class SyntaxSuggest::LexValue

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"

Attributes

line[R]
state[R]
token[R]
type[R]

Public Class Methods

new(line, type, token, state, last_lex = nil) click to toggle source
# 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

Public Instance Methods

expr_beg?() click to toggle source
# File lib/syntax_suggest/lex_value.rb, line 62
def expr_beg?
  state.anybits?(Ripper::EXPR_BEG)
end
expr_label?() click to toggle source
# File lib/syntax_suggest/lex_value.rb, line 66
def expr_label?
  state.allbits?(Ripper::EXPR_LABEL)
end
fname?() click to toggle source
# File lib/syntax_suggest/lex_value.rb, line 46
def fname?
  state.allbits?(Ripper::EXPR_FNAME)
end
ignore_newline?() click to toggle source
# File lib/syntax_suggest/lex_value.rb, line 50
def ignore_newline?
  type == :on_ignored_nl
end
is_end?() click to toggle source
# File lib/syntax_suggest/lex_value.rb, line 54
def is_end?
  @is_end
end
is_kw?() click to toggle source
# File lib/syntax_suggest/lex_value.rb, line 58
def is_kw?
  @is_kw
end

Private Instance Methods

set_kw_end(last_lex) click to toggle source
# File lib/syntax_suggest/lex_value.rb, line 27
        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