Class: Fast::FindWithCapture

Inherits:
Find
  • Object
show all
Defined in:
lib/fast.rb

Overview

Allow use previous captures while searching in the AST. Use ‘\1` to point the match to the first captured element or sequential numbers considering the order of the captures.

Examples:

check comparision of integers that will always return true

ast = Fast.ast("1 == 1") => s(:send, s(:int, 1), :==, s(:int, 1))
Fast.match?("(send $(int _) == \1)", ast) # => [s(:int, 1)]

Instance Attribute Summary collapse

Attributes inherited from Find

#token

Instance Method Summary collapse

Methods inherited from Find

#==, #compare_symbol_or_head, #debug, #debug_match_recursive, #match_recursive

Constructor Details

#initialize(token) ⇒ FindWithCapture

Returns a new instance of FindWithCapture.



459
460
461
462
463
464
# File 'lib/fast.rb', line 459

def initialize(token)
  token = token.token if token.respond_to?(:token)
  raise 'You must use captures!' unless token

  @capture_index = token.to_i
end

Instance Attribute Details

#previous_captures=(value) ⇒ Object (writeonly)

Sets the attribute previous_captures

Parameters:

  • value

    the value to set the attribute previous_captures to.



457
458
459
# File 'lib/fast.rb', line 457

def previous_captures=(value)
  @previous_captures = value
end

Instance Method Details

#match?(node) ⇒ Boolean

Returns:

  • (Boolean)


466
467
468
# File 'lib/fast.rb', line 466

def match?(node)
  node == @previous_captures[@capture_index - 1]
end

#to_sObject



470
471
472
# File 'lib/fast.rb', line 470

def to_s
  "fc[\\#{@capture_index}]"
end