-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathnaming_normalizer.rb
112 lines (94 loc) · 1.92 KB
/
naming_normalizer.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
require 'parser/current'
# class Normalize < Parser::AST::Processor
class NamingNormalizer < Parser::TreeRewriter
include Mandate
def initialize(code, mapping)
@original_code = code
@mapping = mapping
end
def call
buffer = Parser::Source::Buffer.new('', source: original_code)
builder = RuboCop::AST::Builder.new
ast = Parser::CurrentRuby.new(builder).parse(buffer)
rewrite(buffer, ast)
end
%i[
on_argument
on_const
on_var
on_vasgn
].each do |method_name|
define_method method_name do |node|
replace_loc_name(node)
super(node)
end
end
def on_def(node)
# node.pry
p node.loc.name.source
# @method_scope = metho
replace_loc_name(node)
super(node)
end
def on_send(node)
# node.pry
if !node.enumerator_method? &&
!node.operator_method?
replace_loc_selector(node)
end
super
end
def process_regular_node
super
end
def on_op_asgn(node)
# p "opasgn"
#node.pry
super
end
def on_casgn(node)
# p "casgn"
#node.pry
super
end
def on_defs(node)
# p "defs"
#node.pry
super
end
def on_numblock(node)
# p "numblock"
#node.pry
super
end
def handler_missing(node)
case node.type
# noop
when true, :str, :nil, :int
super
else
p "handler_missing"
#node.pry
end
end
private
attr_reader :original_code, :mapping
def replace_loc_name(node)
p node.type
placeholder = case node.type
when :def
# node.pry
placeholder_for(:method, node.loc.name.source)
else
placeholder_for(:misc, node.loc.name.source)
end
replace(node.loc.name, placeholder)
end
def replace_loc_selector(node)
replace(node.loc.selector, placeholder_for(node.loc.selector.source))
end
def placeholder_for(type, token)
key = "#{type}_#{token}"
mapping.key?(key) ? mapping[key] : key
end
end