123456789_123456789_123456789_123456789_123456789_

Class: SyntaxSuggest::Token

Relationships & Source Files
Inherits: Object
Defined in: lib/syntax_suggest/token.rb

Overview

Value object for accessing lex values

This lex:

[IDENTIFIER(1,0)-(1,8)("describe"), 32]

Would translate into:

lex.location # => (1,0)-(1,8) lex.type # => :IDENTIFIER lex.token # => "describe"

Constant Summary

  • KW_TYPES = private
    # File 'lib/syntax_suggest/token.rb', line 18
    %i[
      KEYWORD_IF KEYWORD_UNLESS KEYWORD_WHILE KEYWORD_UNTIL
      KEYWORD_DEF KEYWORD_CASE KEYWORD_FOR KEYWORD_BEGIN KEYWORD_CLASS KEYWORD_MODULE KEYWORD_DO KEYWORD_DO_LOOP
    ].to_set.freeze

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(prism_token, previous_prism_token, visitor) ⇒ Token

[ GitHub ]

  
# File 'lib/syntax_suggest/token.rb', line 24

def initialize(prism_token, previous_prism_token, visitor)
  @location = prism_token.location
  @type = prism_token.type
  @value = prism_token.value

  # Prism lexes `:module` as SYMBOL_BEGIN, KEYWORD_MODULE
  # https://github.com/ruby/prism/issues/3940
  symbol_content = previous_prism_token&.type == :SYMBOL_BEGIN
  @is_kw = KW_TYPES.include?(@type)
  @is_kw = false if symbol_content || visitor.endless_def_keyword_offsets.include?(@location.start_offset)
  @is_end = @type == :KEYWORD_END
end

Instance Attribute Details

#is_end?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/token.rb', line 41

def is_end?
  @is_end
end

#is_kw?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/token.rb', line 45

def is_kw?
  @is_kw
end

#location (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/token.rb', line 16

attr_reader :location, :type, :value

#type (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/token.rb', line 16

attr_reader :location, :type, :value

#value (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/token.rb', line 16

attr_reader :location, :type, :value

Instance Method Details

#line

[ GitHub ]

  
# File 'lib/syntax_suggest/token.rb', line 37

def line
  @location.start_line
end