node_mutation 1.15.2 → 1.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +1 -1
- data/lib/node_mutation/action/append_action.rb +5 -0
- data/lib/node_mutation/action/delete_action.rb +1 -0
- data/lib/node_mutation/action/indent_action.rb +1 -0
- data/lib/node_mutation/action/insert_action.rb +1 -0
- data/lib/node_mutation/action/prepend_action.rb +5 -0
- data/lib/node_mutation/action/remove_action.rb +1 -0
- data/lib/node_mutation/action/replace_action.rb +1 -0
- data/lib/node_mutation/action/replace_with_action.rb +5 -0
- data/lib/node_mutation/action.rb +3 -1
- data/lib/node_mutation/parser_adapter.rb +18 -0
- data/lib/node_mutation/result.rb +1 -1
- data/lib/node_mutation/struct.rb +1 -1
- data/lib/node_mutation/version.rb +1 -1
- data/sig/node_mutation/struct.rbs +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 14e76d23c3a0be62554de359db928e7f0e70fe75b6c13ecb0655add5af735333
|
4
|
+
data.tar.gz: 1777be0d1e8c4044fa175dcc8f9f9e3431283fdf039392cba9f8fe4fd656c676
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef64c7156966a2d80c4bf823e0c3330d8934cf52306a9f179bac7105b52c82e78bb9b0d958510165a541fd1fe550b3eec7c7e78eaf3aa7f3207a5b0df1f9e4e3
|
7
|
+
data.tar.gz: 969399df03dc8e3f5c15e55f37a3664bf0945a41e5ff244542319b8a2c20d6afff54dc3aee72b6b4e6c90c6ce84428b6008d14d3dc81e343c68296e78b387218
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
# ReplaceWithAction to replace code.
|
4
4
|
class NodeMutation::ReplaceWithAction < NodeMutation::Action
|
5
|
+
def initialize(node, code)
|
6
|
+
super(node, code)
|
7
|
+
@type = :replace
|
8
|
+
end
|
9
|
+
|
5
10
|
# The rewritten source code with proper indent.
|
6
11
|
#
|
7
12
|
# @return [String] rewritten code.
|
data/lib/node_mutation/action.rb
CHANGED
@@ -6,7 +6,9 @@ class NodeMutation::Action
|
|
6
6
|
# @return [Integer] start position
|
7
7
|
# @!attribute [rw] end
|
8
8
|
# @return [Integer] end position
|
9
|
-
|
9
|
+
# @!attribute [rw] type
|
10
|
+
# @return [Symbol] action type, :insert, :replace or :delete
|
11
|
+
attr_accessor :start, :end, :type
|
10
12
|
|
11
13
|
# Initialize an action.
|
12
14
|
#
|
@@ -120,6 +120,15 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
120
120
|
return NodeMutation::Struct::Range.new(pair_node.loc.expression.begin_pos, pair_node.loc.expression.end_pos)
|
121
121
|
end
|
122
122
|
|
123
|
+
if node.type == :hash && child_name.to_s.end_with?('_value')
|
124
|
+
pair_node = node.pairs.find { |pair| pair.key.to_value.to_s == child_name.to_s[0..-7] }
|
125
|
+
raise NodeMutation::MethodNotSupported,
|
126
|
+
"#{direct_child_name} is not supported for #{get_source(node)}" unless pair_node
|
127
|
+
return child_node_range(pair.value, nested_child_name) if nested_child_name
|
128
|
+
|
129
|
+
return NodeMutation::Struct::Range.new(pair_node.value.loc.expression.begin_pos, pair_node.value.loc.expression.end_pos)
|
130
|
+
end
|
131
|
+
|
123
132
|
raise NodeMutation::MethodNotSupported,
|
124
133
|
"#{direct_child_name} is not supported for #{get_source(node)}" unless node.respond_to?(direct_child_name)
|
125
134
|
|
@@ -206,6 +215,15 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
206
215
|
return pair_node
|
207
216
|
end
|
208
217
|
|
218
|
+
if node.is_a?(Parser::AST::Node) && node.type == :hash && direct_child_name.end_with?('_value')
|
219
|
+
pair_node = node.pairs.find { |pair| pair.key.to_value.to_s == direct_child_name[0..-7] }
|
220
|
+
raise NodeMutation::MethodNotSupported,
|
221
|
+
"#{direct_child_name} is not supported for #{get_source(node)}" unless pair_node
|
222
|
+
return child_node_by_name(pair_node.value, nested_child_name) if nested_child_name
|
223
|
+
|
224
|
+
return pair_node.value
|
225
|
+
end
|
226
|
+
|
209
227
|
if node.respond_to?(direct_child_name)
|
210
228
|
child_node = node.send(direct_child_name)
|
211
229
|
elsif direct_child_name.include?('(') && direct_child_name.include?(')')
|
data/lib/node_mutation/result.rb
CHANGED
@@ -19,7 +19,7 @@ class NodeMutation::Result
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def actions=(actions)
|
22
|
-
@actions = actions.map { |action| NodeMutation::Struct::Action.new(action.start, action.end, action.new_code) }
|
22
|
+
@actions = actions.map { |action| NodeMutation::Struct::Action.new(action.type, action.start, action.end, action.new_code) }
|
23
23
|
end
|
24
24
|
|
25
25
|
def to_json(*args)
|
data/lib/node_mutation/struct.rb
CHANGED
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.
|
4
|
+
version: 1.16.0
|
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-
|
11
|
+
date: 2023-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: ast node mutation apis
|
14
14
|
email:
|