Class: Fast::Find
- Inherits:
-
Object
show all
- Defined in:
- lib/fast.rb
Overview
Find is the top level class that respond to #match?(node) interface. It matches recurively and check deeply depends of the token type.
Direct Known Subclasses
All, Any, Capture, FindFromArgument, FindString, FindWithCapture, InstanceMethodCall, Maybe, MethodCall, Not, Parent
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(token) ⇒ Find
Returns a new instance of Find.
394
395
396
|
# File 'lib/fast.rb', line 394
def initialize(token)
self.token = token
end
|
Instance Attribute Details
#token ⇒ Object
Returns the value of attribute token.
393
394
395
|
# File 'lib/fast.rb', line 393
def token
@token
end
|
Instance Method Details
#==(other) ⇒ Object
441
442
443
444
445
|
# File 'lib/fast.rb', line 441
def ==(other)
return false if other.nil? || !other.respond_to?(:token)
token == other.token
end
|
#compare_symbol_or_head(node, expression) ⇒ Object
416
417
418
419
420
421
422
423
424
425
|
# File 'lib/fast.rb', line 416
def compare_symbol_or_head(node, expression)
case node
when Parser::AST::Node
node.type == expression.to_sym
when String
node == expression.to_s
else
node == expression
end
end
|
#debug(node, expression, match) ⇒ Object
433
434
435
|
# File 'lib/fast.rb', line 433
def debug(node, expression, match)
puts "#{expression} == #{node} # => #{match}"
end
|
#debug_match_recursive(node, expression) ⇒ Object
427
428
429
430
431
|
# File 'lib/fast.rb', line 427
def debug_match_recursive(node, expression)
match = original_match_recursive(node, expression)
debug(node, expression, match)
match
end
|
#match?(node) ⇒ Boolean
398
399
400
|
# File 'lib/fast.rb', line 398
def match?(node)
match_recursive(node, valuate(token))
end
|
#match_recursive(node, expression) ⇒ Object
402
403
404
405
406
407
408
409
410
411
412
413
414
|
# File 'lib/fast.rb', line 402
def match_recursive(node, expression)
case expression
when Proc then expression.call(node)
when Find then expression.match?(node)
when Symbol then compare_symbol_or_head(node, expression)
when Enumerable
expression.each_with_index.all? do |exp, i|
match_recursive(i.zero? ? node : node.children[i - 1], exp)
end
else
node == expression
end
end
|
#to_s ⇒ Object
437
438
439
|
# File 'lib/fast.rb', line 437
def to_s
"f[#{[*token].join(', ')}]"
end
|