Class: PuppetLint::Lexer::Token
- Inherits:
-
Object
- Object
- PuppetLint::Lexer::Token
- Defined in:
- lib/puppet-lint/lexer/token.rb
Overview
Public: Stores a fragment of the manifest and the information about its location in the manifest.
Instance Attribute Summary collapse
-
#column ⇒ Object
readonly
Public: Returns the Integer column number of the line of the manifest text where the Token can be found.
-
#line ⇒ Object
readonly
Public: Returns the Integer line number of the manifest text where the Token can be found.
-
#next_code_token ⇒ Object
Public: Gets/sets the next code token (skips whitespace, comments, etc) in the manifest.
-
#next_token ⇒ Object
Public: Gets/sets the next token in the manifest.
-
#prev_code_token ⇒ Object
Public: Gets/sets the previous code tokne (skips whitespace, comments, etc) in the manifest.
-
#prev_token ⇒ Object
Public: Gets/sets the previous token in the manifest.
-
#raw ⇒ Object
Public: Returns the raw value of the Token.
-
#type ⇒ Object
Public: Returns the Symbol type of the Token.
-
#value ⇒ Object
Public: Returns the String value of the Token.
Instance Method Summary collapse
-
#find_token_of(direction, type, opts = {}) ⇒ Object
Internal: Search from this token to find the next token of a given type in a given direction.
-
#initialize(type, value, line, column) ⇒ Token
constructor
Public: Initialise a new Token object.
-
#inspect ⇒ Object
Public: Produce a human friendly description of the Token when inspected.
-
#next_token_of(type, opts = {}) ⇒ Object
Public: Search from this token to find the next token of a given type.
-
#prev_token_of(type, opts = {}) ⇒ Object
Public: Search from this token to find the previous token of a given type.
-
#to_manifest ⇒ Object
Public: Produce a Puppet DSL representation of a Token.
Constructor Details
#initialize(type, value, line, column) ⇒ Token
Public: Initialise a new Token object.
type - An upper case Symbol describing the type of Token. value - The String value of the Token. line - The Integer line number where the Token can be found in the
manifest.
column - The Integer number of characters from the start of the line to
the start of the Token.
Returns the instantiated Token.
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/puppet-lint/lexer/token.rb', line 47 def initialize(type, value, line, column) @value = value @type = type @line = line @column = column @next_token = nil @prev_token = nil @next_code_token = nil @prev_code_token = nil end |
Instance Attribute Details
#column ⇒ Object (readonly)
Public: Returns the Integer column number of the line of the manifest text where the Token can be found.
21 22 23 |
# File 'lib/puppet-lint/lexer/token.rb', line 21 def column @column end |
#line ⇒ Object (readonly)
Public: Returns the Integer line number of the manifest text where the Token can be found.
17 18 19 |
# File 'lib/puppet-lint/lexer/token.rb', line 17 def line @line end |
#next_code_token ⇒ Object
Public: Gets/sets the next code token (skips whitespace, comments, etc) in the manifest.
31 32 33 |
# File 'lib/puppet-lint/lexer/token.rb', line 31 def next_code_token @next_code_token end |
#next_token ⇒ Object
Public: Gets/sets the next token in the manifest.
24 25 26 |
# File 'lib/puppet-lint/lexer/token.rb', line 24 def next_token @next_token end |
#prev_code_token ⇒ Object
Public: Gets/sets the previous code tokne (skips whitespace, comments, etc) in the manifest.
35 36 37 |
# File 'lib/puppet-lint/lexer/token.rb', line 35 def prev_code_token @prev_code_token end |
#prev_token ⇒ Object
Public: Gets/sets the previous token in the manifest.
27 28 29 |
# File 'lib/puppet-lint/lexer/token.rb', line 27 def prev_token @prev_token end |
#raw ⇒ Object
Public: Returns the raw value of the Token.
13 14 15 |
# File 'lib/puppet-lint/lexer/token.rb', line 13 def raw @raw end |
#type ⇒ Object
Public: Returns the Symbol type of the Token.
7 8 9 |
# File 'lib/puppet-lint/lexer/token.rb', line 7 def type @type end |
#value ⇒ Object
Public: Returns the String value of the Token.
10 11 12 |
# File 'lib/puppet-lint/lexer/token.rb', line 10 def value @value end |
Instance Method Details
#find_token_of(direction, type, opts = {}) ⇒ Object
Internal: Search from this token to find the next token of a given type in a given direction.
direction - A Symbol direction to search (:next or :prev). type - A Symbol type of the token to find, or an Array of Symbols. opts - An optional Hash
:value - A token value to search for in addition to type
:skip_blocks - A Boolean to specify whether { } blocks should be
skipped over (defaults to true).
Returns a PuppetLint::Lexer::Token object if a matching token could be found, otherwise nil.
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/puppet-lint/lexer/token.rb', line 151 def find_token_of(direction, type, opts = {}) return nil unless [:next, :prev].include?(direction) opts[:skip_blocks] ||= true to_find = Array[*type] token_iter = self.send("#{direction}_token".to_sym) while !token_iter.nil? if to_find.include? token_iter.type if opts[:value] return token_iter if token_iter.value == opts[:value] else return token_iter end end opening_token = direction == :next ? "L" : "R" closing_token = direction == :next ? "R" : "L" if opts[:skip_blocks] case token_iter.type when "#{opening_token}BRACE".to_sym token_iter = token_iter.send("#{direction}_token_of".to_sym, ["#{closing_token}BRACE".to_sym, opts]) when "#{opening_token}BRACK".to_sym token_iter = token_iter.send("#{direction}_token_of".to_sym, ["#{closing_token}BRACK".to_sym, opts]) when "#{opening_token}PAREN".to_sym token_iter = token_iter.send("#{direction}_token_of".to_sym, ["#{closing_token}PAREN".to_sym, opts]) end end token_iter = token_iter.send("#{direction}_token".to_sym) end nil end |
#inspect ⇒ Object
Public: Produce a human friendly description of the Token when inspected.
Returns a String describing the Token.
62 63 64 |
# File 'lib/puppet-lint/lexer/token.rb', line 62 def inspect "<Token #{@type.inspect} (#{@value}) @#{@line}:#{@column}>" end |
#next_token_of(type, opts = {}) ⇒ Object
Public: Search from this token to find the next token of a given type.
type - A Symbol type of the token to find, or an Array of Symbols. opts - An optional Hash
:value - A token value to search for in addition to type
:skip_blocks - A Boolean to specify whether { } blocks should be
skipped over (defaults to true).
Returns a PuppetLint::Lexer::Token object if a matching token could be found, otherwise nil.
121 122 123 |
# File 'lib/puppet-lint/lexer/token.rb', line 121 def next_token_of(type, opts = {}) find_token_of(:next, type, opts) end |
#prev_token_of(type, opts = {}) ⇒ Object
Public: Search from this token to find the previous token of a given type.
type - A Symbol type of the token to find, or an Array of Symbols. opts - An optional Hash
:value - A token value to search for in addition to type
:skip_blocks - A Boolean to specify whether { } blocks should be
skipped over (defaults to true).
Returns a PuppetLint::Lexer::Token object if a matching token could be found, otherwise nil.
135 136 137 |
# File 'lib/puppet-lint/lexer/token.rb', line 135 def prev_token_of(type, opts = {}) find_token_of(:prev, type, opts) end |
#to_manifest ⇒ Object
Public: Produce a Puppet DSL representation of a Token.
Returns a Puppet DSL String.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/puppet-lint/lexer/token.rb', line 69 def to_manifest case @type when :STRING "\"#{@value}\"" when :SSTRING "'#{@value}'" when :DQPRE "\"#{@value}" when :DQPOST "#{@value}\"" when :VARIABLE enclose_token_types = Set[:DQPRE, :DQMID, :HEREDOC_PRE, :HEREDOC_MID].freeze if !@prev_code_token.nil? && enclose_token_types.include?(@prev_code_token.type) if @raw.nil? "${#{@value}}" else "${#{@raw}}" end else "$#{@value}" end when :UNENC_VARIABLE "$#{@value}" when :NEWLINE "\n" when :COMMENT "##{@value}" when :REGEX "/#{@value}/" when :MLCOMMENT @raw when :HEREDOC_OPEN "@(#{@value})" when :HEREDOC @raw when :HEREDOC_POST @raw else @value end end |