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
|
# File 'lib/preval/visitors/attr_accessor.rb', line 6
def on_def(node)
if node.type_match?(:@ident, :params, :bodystmt) &&
node[1].body.none? &&
node[2, 0].type_match?(:stmts_new, :var_ref) &&
node[2, 0, 1, 0].is?(:@ivar) &&
node[0].body == node[2, 0, 1, 0].body[1..-1]
ast = Parser.parse("attr_reader :#{node[0].body}")
node.update(:stmts_add, ast.body[0].body)
end
if node.type_match?(:@ident, :paren, :bodystmt) &&
node[0].body.end_with?('=') &&
node[1, 0, 0].length == 1 &&
node[1, 0].body[1..-1].none? &&
(
node[2, 0].type_match?(:stmts_new, :assign) || (
node[2, 0, 0].type_match?(:stmts_new, :void_stmt) &&
node[2, 0].type_match?(:stmts_add, :assign)
)
) &&
node[2, 0, 1].type_match?(:var_field, :var_ref) &&
node[2, 0, 1, 0, 0].is?(:@ivar) &&
node[0].body[0..-2] == node[2, 0, 1, 0, 0].body[1..-1] &&
node[1, 0, 0][0].body == node[2, 0, 1, 1, 0].body
ast = Parser.parse("attr_writer :#{node[0].body[0..-2]}")
node.update(:stmts_add, ast.body[0].body)
end
end
|