This class handles only scanner events, which are dispatched in the ‘right’ order (same with input).
# File tmp/rubies/ruby-2.7.6/ext/ripper/lib/ripper/filter.rb, line 24
def initialize(src, filename = '-', lineno = 1)
@__lexer = Lexer.new(src, filename, lineno)
@__line = nil
@__col = nil
@__state = nil
end
Creates a new Ripper::Filter
instance, passes parameters src
, filename
, and lineno
to Ripper::Lexer.new
The lexer is for internal use only.
# File tmp/rubies/ruby-2.7.6/ext/ripper/lib/ripper/filter.rb, line 46
def column
@__col
end
The column number of the current token. This value starts from 0. This method is valid only in event handlers.
# File tmp/rubies/ruby-2.7.6/ext/ripper/lib/ripper/filter.rb, line 32
def filename
@__lexer.filename
end
The file name of the input.
# File tmp/rubies/ruby-2.7.6/ext/ripper/lib/ripper/filter.rb, line 39
def lineno
@__line
end
The line number of the current token. This value starts from 1. This method is valid only in event handlers.
# File tmp/rubies/ruby-2.7.6/ext/ripper/lib/ripper/filter.rb, line 80
def on_default(event, token, data)
data
end
This method is called when some event handler is undefined. event
is :on_XXX, token
is the scanned token, and data
is a data accumulator.
The return value of this method is passed to the next event handler (as of Enumerable#inject
).
# File tmp/rubies/ruby-2.7.6/ext/ripper/lib/ripper/filter.rb, line 59
def parse(init = nil)
data = init
@__lexer.lex.each do |pos, event, tok, state|
@__line, @__col = *pos
@__state = state
data = if respond_to?(event, true)
then __send__(event, tok, data)
else on_default(event, tok, data)
end
end
data
end
Starts the parser. init
is a data accumulator and is passed to the next event handler (as of Enumerable#inject
).
# File tmp/rubies/ruby-2.7.6/ext/ripper/lib/ripper/filter.rb, line 52
def state
@__state
end
The scanner’s state of the current token. This value is the bitwise OR of zero or more of the Ripper::EXPR_*
constants.