Class: Yoda::Parsing::Traverser::Matcher
- Inherits:
-
Object
- Object
- Yoda::Parsing::Traverser::Matcher
- Defined in:
- lib/yoda/parsing/traverser/matcher.rb
Instance Attribute Summary collapse
- #name ⇒ Symbol? readonly
- #predicate ⇒ Proc? readonly
- #type ⇒ Symbol? readonly
Instance Method Summary collapse
-
#initialize(type: nil, name: nil, &predicate) ⇒ Matcher
constructor
A new instance of Matcher.
- #match?(node) ⇒ Boolean
- #name_of(node) ⇒ Symbol?
Constructor Details
#initialize(type: nil, name: nil, &predicate) ⇒ Matcher
Returns a new instance of Matcher.
16 17 18 19 20 |
# File 'lib/yoda/parsing/traverser/matcher.rb', line 16 def initialize(type: nil, name: nil, &predicate) @type = type @name = name @predicate = predicate end |
Instance Attribute Details
#name ⇒ Symbol? (readonly)
9 10 11 |
# File 'lib/yoda/parsing/traverser/matcher.rb', line 9 def name @name end |
#predicate ⇒ Proc? (readonly)
12 13 14 |
# File 'lib/yoda/parsing/traverser/matcher.rb', line 12 def predicate @predicate end |
#type ⇒ Symbol? (readonly)
6 7 8 |
# File 'lib/yoda/parsing/traverser/matcher.rb', line 6 def type @type end |
Instance Method Details
#match?(node) ⇒ Boolean
24 25 26 27 28 29 |
# File 'lib/yoda/parsing/traverser/matcher.rb', line 24 def match?(node) return false if type && type != node.type return false if name && name != name_of(node) return false if predicate && !predicate.call(node) true end |
#name_of(node) ⇒ Symbol?
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/yoda/parsing/traverser/matcher.rb', line 34 def name_of(node) case node.type when :lvar, :ivar, :cvar, :gvar node.name when :lvasgn, :ivasgn, :cvasgn, :gvasgn node.assignee.try(:name) when :const node.name.name when :casgn node.assignee.name when :sym node.value when :send, :csend node.selector.name when :"op-asgn" node.children[1].name when :def node.name_clause.name when :defs node.name_clause.name when :arg, :blockarg, :kwarg node.content.try(:name) when :optarg, :kwoptarg node.content.try(:name) when :restarg, :kwrestarg node.content.try(:name) end end |