class M::FinishLine
Stripped down parser that can determine the ending line for a method.
def self.ending_line_for(method_obj)
Helper to translate a method object into the path and line range where
def self.ending_line_for(method_obj) path, begin_line = method_obj.source_location new(File.read(path), path).parse[begin_line] end
def first_arg(arg, *)
def first_arg(arg, *) arg end
def initialize(*)
def initialize(*) # A hash mapping the 1-indexed line numbers that tests start on to where they end. @begins_to_ends = {} super end
def just_lineno(*)
def just_lineno(*) lineno end
def on_args_add(parts, part)
def on_args_add(parts, part) parts << part end
def on_args_add_block(args, *rest)
def on_args_add_block(args, *rest) args.first end
def on_args_new
def on_args_new [] end
def on_command_call(*, begin_lineno, _args)
def on_command_call(*, begin_lineno, _args) begin_lineno end
def on_def(begin_line, *)
name, which we have overridden to return the line number of the ident
This event's first argument gets the `ident` node containing the method
method test e.g. `def test_some_description`
def on_def(begin_line, *) @begins_to_ends[begin_line] = lineno end
def on_method_add_block(begin_line, end_line)
def on_method_add_block(begin_line, end_line) if begin_line && end_line @begins_to_ends[begin_line] = end_line end end
def parse
def parse super @begins_to_ends end