123456789_123456789_123456789_123456789_123456789_

Class: SyntaxSuggest::LexValue

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

Overview

Value object for accessing lex values

This lex:

[1, 0], :on_ident, "describe", CMDARG

Would translate into:

lex.line # => 1
lex.type # => :on_indent
lex.token # => "describe"

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(line, type, token, state, last_lex = nil) ⇒ LexValue

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 18

def initialize(line, type, token, state, last_lex = nil)
  @line = line
  @type = type
  @token = token
  @state = state

  set_kw_end(last_lex)
end

Instance Attribute Details

#expr_beg?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 62

def expr_beg?
  state.anybits?(Ripper::EXPR_BEG)
end

#expr_label?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 66

def expr_label?
  state.allbits?(Ripper::EXPR_LABEL)
end

#fname?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 46

def fname?
  state.allbits?(Ripper::EXPR_FNAME)
end

#ignore_newline?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 50

def ignore_newline?
  type == :on_ignored_nl
end

#is_end?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 54

def is_end?
  @is_end
end

#is_kw?Boolean (readonly)

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 58

def is_kw?
  @is_kw
end

#line (readonly)

[ GitHub ]

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

attr_reader :line, :type, :token, :state

#state (readonly)

[ GitHub ]

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

attr_reader :line, :type, :token, :state

#token (readonly)

[ GitHub ]

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

attr_reader :line, :type, :token, :state

#type (readonly)

[ GitHub ]

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

attr_reader :line, :type, :token, :state

Instance Method Details

#set_kw_end(last_lex) (private)

[ GitHub ]

  
# File 'lib/syntax_suggest/lex_value.rb', line 27

private def set_kw_end(last_lex)
  @is_end = false
  @is_kw = false
  return if type != :on_kw
  #
  return if last_lex && last_lex.fname? # https://github.com/ruby/ruby/commit/776759e300e4659bb7468e2b97c8c2d4359a2953

  case token
  when "if", "unless", "while", "until"
    # Only count if/unless when it's not a "trailing" if/unless
    # https://github.com/ruby/ruby/blob/06b44f819eb7b5ede1ff69cecb25682b56a1d60c/lib/irb/ruby-lex.rb#L374-L375
    @is_kw = true unless expr_label?
  when "def", "case", "for", "begin", "class", "module", "do"
    @is_kw = true
  when "end"
    @is_end = true
  end
end