node_mutation 1.19.3 → 1.19.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8089525a411cf3e7400148cba0d3cd21b763d6ec034dd5a627c0faf2419d8ec3
4
- data.tar.gz: c5e0137f1da08ac49ffa45124cc39cb095543e5b5d5cc788e32093c581de2e2d
3
+ metadata.gz: 9058cbdb6c979c921d77499277354922b7488da6315b85b368c8f0c14b7bf27e
4
+ data.tar.gz: 9f64d3bdb87aa025cf6362127a1170a014f28ec2ec7e04d88756bcd50744429e
5
5
  SHA512:
6
- metadata.gz: 0ecd574ae42a8cabdee2bdae86a14b905fdb4df3205af93753de47e9eb86f595371332f7b9dc5c560c3cd0b48db45d41680784b44fa4be9fba7ef36eefa8d9a7
7
- data.tar.gz: c67d25471f221f0c9d7bd1bd6c40c95c2dfc995154dd9264ce4268eb4990c380ca38c7732a5da6c1b75518c68aeb8e3ea32c644259de12ce01559abac722d63a
6
+ metadata.gz: c3d8f491d11179cd203167ef7a76b87ea16fdfb0f2454afeb0600d4fb97147a9e237d2f1b86f8432643971b4a00016b1d143813572c49eba0e1d58b58f7c6f81
7
+ data.tar.gz: e1c15e3f180186f28486cc14f3d4ebd0ee132c22d9128058e709d545b2c7bb7dae13529c7b74163427e3bfc3f0bb80eb3b73e74b34e4847ae3c0d0dd955d40e1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # NodeMutation
2
2
 
3
+ ## 1.19.4 (2023-08-17)
4
+
5
+ * Use `NodeMutation.adapter.get_indent`
6
+
3
7
  ## 1.19.3 (2023-07-01)
4
8
 
5
9
  * Rewrite `SyntaxTreeAdapter#child_node_range` to support Binary operator
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- node_mutation (1.19.3)
4
+ node_mutation (1.19.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -15,53 +15,53 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
15
15
  end
16
16
  end
17
17
 
18
- # It gets the new source code after evaluating the node.
18
+ # Gets the new source code after evaluating the node.
19
19
  # @param node [Parser::AST::Node] The node to evaluate.
20
20
  # @param code [String] The code to evaluate.
21
21
  # @return [String] The new source code.
22
22
  # @example
23
23
  # node = Parser::CurrentRuby.parse('Factory.define :user do; end')
24
- # rewritten_source(node, '{{call.receiver}}').to eq 'Factory'
24
+ # rewritten_source(node, '{{call.receiver}}') # 'Factory'
25
25
  #
26
26
  # # index for node array
27
27
  # node = Parser::CurrentRuby.parse("test(foo, bar)")
28
- # rewritten_source(node, '{{arguments.0}}')).to eq 'foo'
28
+ # rewritten_source(node, '{{arguments.0}}')) # 'foo'
29
29
  #
30
30
  # # {key}_pair for hash node
31
31
  # node = Parser::CurrentRuby.parse("after_commit :do_index, on: :create, if: :indexable?")
32
- # rewritten_source(node, '{{arguments.-1.on_pair}}')).to eq 'on: :create'
32
+ # rewritten_source(node, '{{arguments.-1.on_pair}}')) # 'on: :create'
33
33
  #
34
34
  # # {key}_value for hash node
35
35
  # node = Parser::CurrentRuby.parse("after_commit :do_index, on: :create, if: :indexable?")
36
- # rewritten_source(node, '{{arguments.-1.on_value}}')).to eq ':create'
36
+ # rewritten_source(node, '{{arguments.-1.on_value}}')) # ':create'
37
37
  #
38
38
  # # to_single_quote for str node
39
39
  # node = Parser::CurrentRuby.parse('"foo"')
40
- # rewritten_source(node, 'to_single_quote') => "'foo'"
40
+ # rewritten_source(node, 'to_single_quote') # "'foo'"
41
41
  #
42
42
  # # to_double_quote for str node
43
43
  # node = Parser::CurrentRuby.parse("'foo'")
44
- # rewritten_source(node, 'to_double_quote') => '"foo"'
44
+ # rewritten_source(node, 'to_double_quote') # '"foo"'
45
45
  #
46
46
  # # to_symbol for str node
47
47
  # node = Parser::CurrentRuby.parse("'foo'")
48
- # rewritten_source(node, 'to_symbol') => ':foo'
48
+ # rewritten_source(node, 'to_symbol') # ':foo'
49
49
  #
50
50
  # # to_string for sym node
51
51
  # node = Parser::CurrentRuby.parse(":foo")
52
- # rewritten_source(node, 'to_string') => 'foo'
52
+ # rewritten_source(node, 'to_string') # 'foo'
53
53
  #
54
54
  # # to_lambda_literal for block node
55
55
  # node = Parser::CurrentRuby.parse('lambda { foobar }')
56
- # rewritten_source(node, 'to_lambda_literal') => '-> { foobar }'
56
+ # rewritten_source(node, 'to_lambda_literal') # '-> { foobar }'
57
57
  #
58
58
  # # strip_curly_braces for hash node
59
59
  # node = Parser::CurrentRuby.parse("{ foo: 'bar' }")
60
- # rewritten_source(node, 'strip_curly_braces') => "foo: 'bar'"
60
+ # rewritten_source(node, 'strip_curly_braces') # "foo: 'bar'"
61
61
  #
62
62
  # # wrap_curly_braces for hash node
63
63
  # node = Parser::CurrentRuby.parse("test(foo: 'bar')")
64
- # rewritten_source(node.arguments.first, 'wrap_curly_braces') => "{ foo: 'bar' }"
64
+ # rewritten_source(node.arguments.first, 'wrap_curly_braces') # "{ foo: 'bar' }"
65
65
  def rewritten_source(node, code)
66
66
  code.gsub(/{{(.+?)}}/m) do
67
67
  old_code = Regexp.last_match(1)
@@ -82,7 +82,7 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
82
82
  if lines_count > 1 && lines_count == evaluated.size
83
83
  new_code = []
84
84
  lines.each_with_index { |line, index|
85
- new_code << (index == 0 ? line : line[evaluated.first.indent - 2..-1])
85
+ new_code << (index == 0 ? line : line[NodeMutation.adapter.get_indent(evaluated.first) - NodeMutation.tab_width..-1])
86
86
  }
87
87
  new_code.join("\n")
88
88
  else
@@ -109,40 +109,40 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
109
109
  # @return {NodeMutation::Struct::Range} The range of the child node.
110
110
  # @example
111
111
  # node = Parser::CurrentRuby.parse('Factory.define :user do; end')
112
- # child_node_range(node, 'caller.receiver') => { start: 0, end: 'Factory'.length }
112
+ # child_node_range(node, 'caller.receiver') # { start: 0, end: 'Factory'.length }
113
113
  #
114
114
  # # node array
115
115
  # node = Parser::CurrentRuby.parse('foobar arg1, arg2)')
116
- # child_node_range(node, 'arguments') => { start: 'foobar '.length, end: 'foobar arg1, arg2'.length }
116
+ # child_node_range(node, 'arguments') # { start: 'foobar '.length, end: 'foobar arg1, arg2'.length }
117
117
  #
118
118
  # # index for node array
119
119
  # node = Parser::CurrentRuby.parse('foobar(arg1, arg2)')
120
- # child_node_range(node, 'arguments.-1') => { start: 'foobar(arg1, '.length, end: 'foobar(arg1, arg2'.length }
120
+ # child_node_range(node, 'arguments.-1') # { start: 'foobar(arg1, '.length, end: 'foobar(arg1, arg2'.length }
121
121
  #
122
122
  # # pips for block node
123
123
  # node = Parser::CurrentRuby.parse('Factory.define :user do |user|; end')
124
- # child_node_range(node, 'pipes') => { start: 'Factory.deine :user do '.length, end: 'Factory.define :user do |user|'.length }
124
+ # child_node_range(node, 'pipes') # { start: 'Factory.deine :user do '.length, end: 'Factory.define :user do |user|'.length }
125
125
  #
126
126
  # # parentheses for def and defs node
127
127
  # node = Parser::CurrentRuby.parse('def foo(bar); end')
128
- # child_node_range(node, 'parentheses') => { start: 'def foo'.length, end: 'def foo(bar)'.length }
128
+ # child_node_range(node, 'parentheses') # { start: 'def foo'.length, end: 'def foo(bar)'.length }
129
129
  #
130
130
  # # double_colon for const node
131
131
  # node = Parser::CurrentRuby.parse('Foo::Bar')
132
- # child_node_range(node, 'double_colon') => { start: 'Foo'.length, end: 'Foo::'.length }
132
+ # child_node_range(node, 'double_colon') # { start: 'Foo'.length, end: 'Foo::'.length }
133
133
  #
134
134
  # # self and dot for defs node
135
135
  # node = Parser::CurrentRuby.parse('def self.foo(bar); end')
136
- # child_node_range(node, 'self') => { start: 'def '.length, end: 'def self'.length }
137
- # child_node_range(node, 'dot') => { start: 'def self'.length, end: 'def self.'.length }
136
+ # child_node_range(node, 'self') # { start: 'def '.length, end: 'def self'.length }
137
+ # child_node_range(node, 'dot') # { start: 'def self'.length, end: 'def self.'.length }
138
138
  #
139
139
  # # dot for send and csend node
140
140
  # node = Parser::CurrentRuby.parse('foo.bar(test)')
141
- # child_node_range(node, 'self') => { start: 'foo'.length, end: 'foo.'.length }
141
+ # child_node_range(node, 'self') # { start: 'foo'.length, end: 'foo.'.length }
142
142
  #
143
143
  # # parentheses for send and csend node
144
144
  # node = Parser::CurrentRuby.parse('foo.bar(test)')
145
- # child_node_range(node, 'parentheses') => { start: 'foo.bar'.length, end: 'foo.bar(test)'.length }
145
+ # child_node_range(node, 'parentheses') # { start: 'foo.bar'.length, end: 'foo.bar(test)'.length }
146
146
  def child_node_range(node, child_name)
147
147
  direct_child_name, nested_child_name = child_name.to_s.split('.', 2)
148
148
 
@@ -18,47 +18,47 @@ class NodeMutation::SyntaxTreeAdapter < NodeMutation::Adapter
18
18
  # @return [String] The new source code.
19
19
  # @example
20
20
  # node = SyntaxTree::Parser.new('class Synvert; end').parse.statements.body.first
21
- # rewritten_source(node, '{{constant}}').to eq 'Synvert'
21
+ # rewritten_source(node, '{{constant}}') # 'Synvert'
22
22
  #
23
23
  # # index for node array
24
24
  # node = SyntaxTree::Parser.new("foo.bar(a, b)").parse.statements.body.first
25
- # rewritten_source(node, '{{arguments.arguments.parts.-1}}')).to eq 'b'
25
+ # rewritten_source(node, '{{arguments.arguments.parts.-1}}')) # 'b'
26
26
  #
27
27
  # # {key}_assoc for HashLiteral node
28
28
  # node = SyntaxTree::Parser.new("after_commit :do_index, on: :create, if: :indexable?").parse.statements.body.first
29
- # rewritten_source(node, '{{arguments.parts.-1.on_assoc}}')).to eq 'on: :create'
29
+ # rewritten_source(node, '{{arguments.parts.-1.on_assoc}}')) # 'on: :create'
30
30
  #
31
31
  # # {key}_value for hash node
32
32
  # node = SyntaxTree::Parser.new("after_commit :do_index, on: :create, if: :indexable?").parse.statements.body.first
33
- # rewritten_source(node, '{{arguments.parts.-1.on_value}}')).to eq ':create'
33
+ # rewritten_source(node, '{{arguments.parts.-1.on_value}}')) # ':create'
34
34
  #
35
35
  # # to_single_quote for StringLiteral node
36
36
  # node = SyntaxTree::Parser.new('"foo"').parse.statements.body.first
37
- # rewritten_source(node, 'to_single_quote') => "'foo'"
37
+ # rewritten_source(node, 'to_single_quote') # "'foo'"
38
38
  #
39
39
  # # to_double_quote for StringLiteral node
40
40
  # node = SyntaxTree::Parser.new("'foo'").parse.statements.body.first
41
- # rewritten_source(node, 'to_double_quote') => '"foo"'
41
+ # rewritten_source(node, 'to_double_quote') # '"foo"'
42
42
  #
43
43
  # # to_symbol for StringLiteral node
44
44
  # node = SyntaxTree::Parser.new("'foo'").parse.statements.body.first
45
- # rewritten_source(node, 'to_symbol') => ':foo'
45
+ # rewritten_source(node, 'to_symbol') # ':foo'
46
46
  #
47
47
  # # to_string for SymbolLiteral node
48
48
  # node = SyntaxTree::Parser.new(":foo").parse.statements.body.first
49
- # rewritten_source(node, 'to_string') => 'foo'
49
+ # rewritten_source(node, 'to_string') # 'foo'
50
50
  #
51
51
  # # to_lambda_literal for MethodAddBlock node
52
52
  # node = SyntaxTree::Parser.new('lambda { foobar }').parse.statements.body.first
53
- # rewritten_source(node, 'to_lambda_literal') => '-> { foobar }'
53
+ # rewritten_source(node, 'to_lambda_literal') # '-> { foobar }'
54
54
  #
55
55
  # # strip_curly_braces for HashLiteral node
56
56
  # node = SyntaxTree::Parser.new("{ foo: 'bar' }").parse.statements.body.first
57
- # rewritten_source(node, 'strip_curly_braces') => "foo: 'bar'"
57
+ # rewritten_source(node, 'strip_curly_braces') # "foo: 'bar'"
58
58
  #
59
59
  # # wrap_curly_braces for BareAssocHash node
60
60
  # node = SyntaxTree::Parser.new("test(foo: 'bar')").parse.statements.body.first
61
- # rewritten_source(node.arguments.arguments.parts.first, 'wrap_curly_braces') => "{ foo: 'bar' }"
61
+ # rewritten_source(node.arguments.arguments.parts.first, 'wrap_curly_braces') # "{ foo: 'bar' }"
62
62
  def rewritten_source(node, code)
63
63
  code.gsub(/{{(.+?)}}/m) do
64
64
  old_code = Regexp.last_match(1)
@@ -74,7 +74,7 @@ class NodeMutation::SyntaxTreeAdapter < NodeMutation::Adapter
74
74
  if lines_count > 1 && lines_count == evaluated.size
75
75
  new_code = []
76
76
  lines.each_with_index { |line, index|
77
- new_code << (index == 0 ? line : line[evaluated.first.indent - 2..-1])
77
+ new_code << (index == 0 ? line : line[NodeMutation.adapter.get_indent(evaluated.first) - NodeMutation.tab_width..-1])
78
78
  }
79
79
  new_code.join("\n")
80
80
  else
@@ -101,19 +101,19 @@ class NodeMutation::SyntaxTreeAdapter < NodeMutation::Adapter
101
101
  # @return {NodeMutation::Struct::Range} The range of the child node.
102
102
  # @example
103
103
  # node = SyntaxTree::Parser.new('foo.bar(test)').parse.statements.body.first
104
- # child_node_range(node, 'receiver') => { start: 0, end: 'foo'.length }
104
+ # child_node_range(node, 'receiver') # { start: 0, end: 'foo'.length }
105
105
  #
106
106
  # # node array
107
107
  # node = SyntaxTree::Parser.new('foo.bar(a, b)').parse.statements.body.first
108
- # child_node_range(node, 'arguments.arguments') => { start: 'foo.bar('.length, end: 'foo.bar(a, b'.length }
108
+ # child_node_range(node, 'arguments.arguments') # { start: 'foo.bar('.length, end: 'foo.bar(a, b'.length }
109
109
  #
110
110
  # # index for node array
111
111
  # node = SyntaxTree::Parser.new('foo.bar(a, b)').parse.statements.body.first
112
- # child_node_range(node, 'arguments.arguments.parts.-1') => { start: 'foo.bar(a, '.length, end: 'foo.bar(a, b'.length }
112
+ # child_node_range(node, 'arguments.arguments.parts.-1') # { start: 'foo.bar(a, '.length, end: 'foo.bar(a, b'.length }
113
113
  #
114
114
  # # operator of Binary node
115
115
  # node = SyntaxTree::Parser.new('foo | bar').parse.statements.body.first
116
- # child_node_range(node, 'operator') => { start: 'foo '.length, end: 'foo |'.length }
116
+ # child_node_range(node, 'operator') # { start: 'foo '.length, end: 'foo |'.length }
117
117
  def child_node_range(node, child_name)
118
118
  direct_child_name, nested_child_name = child_name.to_s.split('.', 2)
119
119
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class NodeMutation
4
- VERSION = "1.19.3"
4
+ VERSION = "1.19.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: node_mutation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.3
4
+ version: 1.19.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-30 00:00:00.000000000 Z
11
+ date: 2023-08-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: ast node mutation apis
14
14
  email:
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  requirements: []
73
- rubygems_version: 3.4.13
73
+ rubygems_version: 3.4.18
74
74
  signing_key:
75
75
  specification_version: 4
76
76
  summary: ast node mutation apis