Class: Yoda::Parsing::Traverser::Matcher

Inherits:
Object
  • Object
show all
Defined in:
lib/yoda/parsing/traverser/matcher.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type: nil, name: nil, &predicate) ⇒ Matcher

Returns a new instance of Matcher.

Parameters:

  • type (Symbol, nil) (defaults to: nil)
  • name (Symbol, nil) (defaults to: nil)


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

#nameSymbol? (readonly)

Returns:

  • (Symbol, nil)


9
10
11
# File 'lib/yoda/parsing/traverser/matcher.rb', line 9

def name
  @name
end

#predicateProc? (readonly)

Returns:

  • (Proc, nil)


12
13
14
# File 'lib/yoda/parsing/traverser/matcher.rb', line 12

def predicate
  @predicate
end

#typeSymbol? (readonly)

Returns:

  • (Symbol, nil)


6
7
8
# File 'lib/yoda/parsing/traverser/matcher.rb', line 6

def type
  @type
end

Instance Method Details

#match?(node) ⇒ Boolean

Parameters:

Returns:

  • (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?

Parameters:

Returns:

  • (Symbol, nil)

See Also:



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