Method: Textbringer::RubyMode#backward_definition

Defined in:
lib/textbringer/modes/ruby_mode.rb

#backward_definition(n = number_prefix_arg || 1) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/textbringer/modes/ruby_mode.rb', line 119

def backward_definition(n = number_prefix_arg || 1)
  tokens = Ripper.lex(@buffer.to_s).reverse
  @buffer.beginning_of_line
  n.times do |i|
    tokens = tokens.drop_while { |(l, _), e, t|
      l >= @buffer.current_line ||
        e != :on_kw || /\A(?:class|module|def)\z/ !~ t
    }
    (line,), = tokens.first
    if line.nil?
      @buffer.beginning_of_buffer
      break
    end
    @buffer.goto_line(line)
    tokens = tokens.drop(1)
  end
  while /\s/ =~ @buffer.char_after
    @buffer.forward_char
  end
end