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.
404
405
406
|
# File 'lib/fast.rb', line 404
def initialize(token)
self.token = token
end
|
Instance Attribute Details
#token ⇒ Object
Returns the value of attribute token.
403
404
405
|
# File 'lib/fast.rb', line 403
def token
@token
end
|
Instance Method Details
#==(other) ⇒ Object
451
452
453
454
455
|
# File 'lib/fast.rb', line 451
def ==(other)
return false if other.nil? || !other.respond_to?(:token)
token == other.token
end
|
#compare_symbol_or_head(expression, node) ⇒ Object
426
427
428
429
430
431
432
433
434
435
|
# File 'lib/fast.rb', line 426
def compare_symbol_or_head(expression, node)
case node
when Parser::AST::Node
node.type == expression.to_sym
when String
node == expression.to_s
else
node == expression
end
end
|
#debug(expression, node, match) ⇒ Object
443
444
445
|
# File 'lib/fast.rb', line 443
def debug(expression, node, match)
puts "#{expression} == #{node} # => #{match}"
end
|
#debug_match_recursive(expression, node) ⇒ Object
437
438
439
440
441
|
# File 'lib/fast.rb', line 437
def debug_match_recursive(expression, node)
match = original_match_recursive(expression, node)
debug(expression, node, match)
match
end
|
#match?(node) ⇒ Boolean
408
409
410
|
# File 'lib/fast.rb', line 408
def match?(node)
match_recursive(valuate(token), node)
end
|
#match_recursive(expression, node) ⇒ Object
412
413
414
415
416
417
418
419
420
421
422
423
424
|
# File 'lib/fast.rb', line 412
def match_recursive(expression, node)
case expression
when Proc then expression.call(node)
when Find then expression.match?(node)
when Symbol then compare_symbol_or_head(expression, node)
when Enumerable
expression.each_with_index.all? do |exp, i|
match_recursive(exp, i.zero? ? node : node.children[i - 1])
end
else
node == expression
end
end
|
#to_s ⇒ Object
447
448
449
|
# File 'lib/fast.rb', line 447
def to_s
"f[#{[*token].map(&:to_s).join(', ')}]"
end
|