node_mutation 1.12.0 → 1.12.1
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/lib/node_mutation/parser_adapter.rb +23 -17
- data/lib/node_mutation/result.rb +14 -24
- data/lib/node_mutation/struct.rb +7 -0
- data/lib/node_mutation/version.rb +1 -1
- data/lib/node_mutation.rb +8 -5
- data/sig/node_mutation/adapter.rbs +3 -3
- data/sig/node_mutation/result.rbs +2 -4
- data/sig/node_mutation/strategy.rbs +7 -0
- data/sig/node_mutation/struct.rbs +17 -0
- data/sig/node_mutation.rbs +1 -5
- metadata +5 -4
- data/lib/node_mutation/location.rb +0 -3
- data/lib/node_mutation/range.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 377cc05adfb7a9f55647b1850a325d9ddcb20004e2574af39657248bd05a51b4
|
4
|
+
data.tar.gz: 233c08e3fa49855270f62c11e1d9587b77886e9a6edded54f27096a9dc951849
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 593a0319dc715d587137e840d66694ed6f8c5d4a73312eb20847eee8383b4f47910f25d1d14f1e3fb95bee3ee1ab6627a08fdd2fa40c837c1a4d8e3422237066
|
7
|
+
data.tar.gz: 9aca39fb58ae4b02687a310fdcc3a7f388ebc86bcdce29b8efff24069077e3ed9194c9556bd833737160c8a220af87c010eedfd588e71f98c5b3bdae0d578cd3
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -65,7 +65,7 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
65
65
|
"#{direct_child_name} is not supported for #{get_source(node)}" unless child_node
|
66
66
|
return child_node_range(child_node, nested_child_name) if nested_child_name
|
67
67
|
|
68
|
-
return NodeMutation::Range.new(child_node.loc.expression.begin_pos, child_node.loc.expression.end_pos)
|
68
|
+
return NodeMutation::Struct::Range.new(child_node.loc.expression.begin_pos, child_node.loc.expression.end_pos)
|
69
69
|
end
|
70
70
|
|
71
71
|
raise NodeMutation::MethodNotSupported,
|
@@ -74,36 +74,39 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
74
74
|
child_node = node.send(direct_child_name)
|
75
75
|
return child_node_range(child_node, nested_child_name) if nested_child_name
|
76
76
|
|
77
|
-
return NodeMutation::Range.new(child_node.loc.expression.begin_pos, child_node.loc.expression.end_pos)
|
77
|
+
return NodeMutation::Struct::Range.new(child_node.loc.expression.begin_pos, child_node.loc.expression.end_pos)
|
78
78
|
end
|
79
79
|
|
80
80
|
case [node.type, child_name.to_sym]
|
81
81
|
when %i[block pipes], %i[def parentheses], %i[defs parentheses]
|
82
|
-
NodeMutation::Range.new(
|
82
|
+
NodeMutation::Struct::Range.new(
|
83
83
|
node.arguments.first.loc.expression.begin_pos - 1,
|
84
84
|
node.arguments.last.loc.expression.end_pos + 1
|
85
85
|
)
|
86
86
|
when %i[block arguments], %i[def arguments], %i[defs arguments]
|
87
|
-
NodeMutation::Range.new(
|
87
|
+
NodeMutation::Struct::Range.new(
|
88
|
+
node.arguments.first.loc.expression.begin_pos,
|
89
|
+
node.arguments.last.loc.expression.end_pos
|
90
|
+
)
|
88
91
|
when %i[class name], %i[const name], %i[def name], %i[defs name]
|
89
|
-
NodeMutation::Range.new(node.loc.name.begin_pos, node.loc.name.end_pos)
|
92
|
+
NodeMutation::Struct::Range.new(node.loc.name.begin_pos, node.loc.name.end_pos)
|
90
93
|
when %i[defs dot]
|
91
|
-
NodeMutation::Range.new(node.loc.operator.begin_pos, node.loc.operator.end_pos) if node.loc.operator
|
94
|
+
NodeMutation::Struct::Range.new(node.loc.operator.begin_pos, node.loc.operator.end_pos) if node.loc.operator
|
92
95
|
when %i[defs self]
|
93
|
-
NodeMutation::Range.new(node.loc.operator.begin_pos - 'self'.length, node.loc.operator.begin_pos)
|
96
|
+
NodeMutation::Struct::Range.new(node.loc.operator.begin_pos - 'self'.length, node.loc.operator.begin_pos)
|
94
97
|
when %i[lvasgn variable], %i[ivasgn variable], %i[cvasgn variable], %i[gvasgn variable]
|
95
|
-
NodeMutation::Range.new(node.loc.name.begin_pos, node.loc.name.end_pos)
|
98
|
+
NodeMutation::Struct::Range.new(node.loc.name.begin_pos, node.loc.name.end_pos)
|
96
99
|
when %i[send dot], %i[csend dot]
|
97
|
-
NodeMutation::Range.new(node.loc.dot.begin_pos, node.loc.dot.end_pos) if node.loc.dot
|
100
|
+
NodeMutation::Struct::Range.new(node.loc.dot.begin_pos, node.loc.dot.end_pos) if node.loc.dot
|
98
101
|
when %i[send message], %i[csend message]
|
99
102
|
if node.loc.operator
|
100
|
-
NodeMutation::Range.new(node.loc.selector.begin_pos, node.loc.operator.end_pos)
|
103
|
+
NodeMutation::Struct::Range.new(node.loc.selector.begin_pos, node.loc.operator.end_pos)
|
101
104
|
else
|
102
|
-
NodeMutation::Range.new(node.loc.selector.begin_pos, node.loc.selector.end_pos)
|
105
|
+
NodeMutation::Struct::Range.new(node.loc.selector.begin_pos, node.loc.selector.end_pos)
|
103
106
|
end
|
104
107
|
when %i[send parentheses], %i[csend parentheses]
|
105
108
|
if node.loc.begin && node.loc.end
|
106
|
-
NodeMutation::Range.new(node.loc.begin.begin_pos, node.loc.end.end_pos)
|
109
|
+
NodeMutation::Struct::Range.new(node.loc.begin.begin_pos, node.loc.end.end_pos)
|
107
110
|
end
|
108
111
|
else
|
109
112
|
if node.type == :hash && child_name.to_s.end_with?('_pair')
|
@@ -112,7 +115,7 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
112
115
|
"#{direct_child_name} is not supported for #{get_source(node)}" unless pair_node
|
113
116
|
return child_node_range(pair, nested_child_name) if nested_child_name
|
114
117
|
|
115
|
-
return NodeMutation::Range.new(pair_node.loc.expression.begin_pos, pair_node.loc.expression.end_pos)
|
118
|
+
return NodeMutation::Struct::Range.new(pair_node.loc.expression.begin_pos, pair_node.loc.expression.end_pos)
|
116
119
|
end
|
117
120
|
|
118
121
|
raise NodeMutation::MethodNotSupported,
|
@@ -126,7 +129,7 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
126
129
|
|
127
130
|
if child_node.is_a?(Parser::AST::Node)
|
128
131
|
return(
|
129
|
-
NodeMutation::Range.new(child_node.loc.expression.begin_pos, child_node.loc.expression.end_pos)
|
132
|
+
NodeMutation::Struct::Range.new(child_node.loc.expression.begin_pos, child_node.loc.expression.end_pos)
|
130
133
|
)
|
131
134
|
end
|
132
135
|
|
@@ -134,7 +137,10 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
134
137
|
return nil if child_node.empty?
|
135
138
|
|
136
139
|
return(
|
137
|
-
NodeMutation::Range.new(
|
140
|
+
NodeMutation::Struct::Range.new(
|
141
|
+
child_node.first.loc.expression.begin_pos,
|
142
|
+
child_node.last.loc.expression.end_pos
|
143
|
+
)
|
138
144
|
)
|
139
145
|
end
|
140
146
|
end
|
@@ -149,12 +155,12 @@ class NodeMutation::ParserAdapter < NodeMutation::Adapter
|
|
149
155
|
|
150
156
|
def get_start_loc(node)
|
151
157
|
begin_loc = node.loc.expression.begin
|
152
|
-
NodeMutation::Location.new(begin_loc.line, begin_loc.column)
|
158
|
+
NodeMutation::Struct::Location.new(begin_loc.line, begin_loc.column)
|
153
159
|
end
|
154
160
|
|
155
161
|
def get_end_loc(node)
|
156
162
|
end_loc = node.loc.expression.end
|
157
|
-
NodeMutation::Location.new(end_loc.line, end_loc.column)
|
163
|
+
NodeMutation::Struct::Location.new(end_loc.line, end_loc.column)
|
158
164
|
end
|
159
165
|
|
160
166
|
def get_indent(node)
|
data/lib/node_mutation/result.rb
CHANGED
@@ -1,41 +1,31 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class NodeMutation::Result
|
4
|
-
attr_accessor :file_path
|
4
|
+
attr_accessor :file_path, :new_source
|
5
|
+
attr_reader :actions
|
5
6
|
|
6
|
-
def initialize(
|
7
|
-
@
|
7
|
+
def initialize(affected:, conflicted:)
|
8
|
+
@affected = affected
|
9
|
+
@conflicted = conflicted
|
10
|
+
@actions = []
|
8
11
|
end
|
9
12
|
|
10
13
|
def affected?
|
11
|
-
@
|
14
|
+
@affected
|
12
15
|
end
|
13
16
|
|
14
17
|
def conflicted?
|
15
|
-
@
|
18
|
+
@conflicted
|
16
19
|
end
|
17
20
|
|
18
|
-
def actions
|
19
|
-
@
|
20
|
-
end
|
21
|
-
|
22
|
-
def new_source
|
23
|
-
@options[:new_source]
|
21
|
+
def actions=(actions)
|
22
|
+
@actions = actions.map { |action| NodeMutation::Struct::Action.new(action.start, action.end, action.new_code) }
|
24
23
|
end
|
25
24
|
|
26
25
|
def to_json(*args)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
hash = { file_path: file_path }
|
32
|
-
@options.each do |key, value|
|
33
|
-
if key == :actions
|
34
|
-
hash[:actions] = value.map { |action| { start: action.start, end: action.end, new_code: action.new_code } }
|
35
|
-
else
|
36
|
-
hash[key] = value
|
37
|
-
end
|
38
|
-
end
|
39
|
-
hash
|
26
|
+
data = { affected: affected?, conflicted: conflicted? }
|
27
|
+
data[:new_source] = new_source if new_source
|
28
|
+
data[:actions] = actions unless actions.empty?
|
29
|
+
data.to_json(*args)
|
40
30
|
end
|
41
31
|
end
|
data/lib/node_mutation.rb
CHANGED
@@ -18,10 +18,9 @@ class NodeMutation
|
|
18
18
|
autoload :ReplaceWithAction, 'node_mutation/action/replace_with_action'
|
19
19
|
autoload :WrapAction, 'node_mutation/action/wrap_action'
|
20
20
|
autoload :NoopAction, 'node_mutation/action/noop_action'
|
21
|
-
autoload :Range, 'node_mutation/range'
|
22
|
-
autoload :Location, 'node_mutation/location'
|
23
21
|
autoload :Result, 'node_mutation/result'
|
24
22
|
autoload :Strategy, 'node_mutation/strategy'
|
23
|
+
autoload :Struct, 'node_mutation/struct'
|
25
24
|
|
26
25
|
attr_reader :actions
|
27
26
|
|
@@ -229,7 +228,9 @@ class NodeMutation
|
|
229
228
|
@actions.reverse_each do |action|
|
230
229
|
source[action.start...action.end] = action.new_code if action.new_code
|
231
230
|
end
|
232
|
-
NodeMutation::Result.new(affected: true, conflicted: !conflict_actions.empty
|
231
|
+
result = NodeMutation::Result.new(affected: true, conflicted: !conflict_actions.empty?)
|
232
|
+
result.new_source = source
|
233
|
+
result
|
233
234
|
end
|
234
235
|
|
235
236
|
# Test actions and return the actions.
|
@@ -241,7 +242,7 @@ class NodeMutation
|
|
241
242
|
# @return {NodeMutation::Result}
|
242
243
|
def test
|
243
244
|
if @actions.length == 0
|
244
|
-
return NodeMutation::Result.new(affected: false, conflicted: false
|
245
|
+
return NodeMutation::Result.new(affected: false, conflicted: false)
|
245
246
|
end
|
246
247
|
|
247
248
|
@actions.sort_by! { |action| [action.start, action.end] }
|
@@ -250,7 +251,9 @@ class NodeMutation
|
|
250
251
|
raise ConflictActionError, "mutation actions are conflicted"
|
251
252
|
end
|
252
253
|
|
253
|
-
NodeMutation::Result.new(affected: true, conflicted: !conflict_actions.empty
|
254
|
+
result = NodeMutation::Result.new(affected: true, conflicted: !conflict_actions.empty?)
|
255
|
+
result.actions = @actions
|
256
|
+
result
|
254
257
|
end
|
255
258
|
|
256
259
|
private
|
@@ -5,15 +5,15 @@ class NodeMutation::Adapter[T]
|
|
5
5
|
|
6
6
|
def file_content: (node: T) -> String
|
7
7
|
|
8
|
-
def child_node_range: (node: T, child_name: String) -> NodeMutation::Range
|
8
|
+
def child_node_range: (node: T, child_name: String) -> NodeMutation::Struct::Range
|
9
9
|
|
10
10
|
def get_start: (node: T) -> Integer
|
11
11
|
|
12
12
|
def get_end: (node: T) -> Integer
|
13
13
|
|
14
|
-
def get_start_loc: (node: T) -> NodeMutation::Location
|
14
|
+
def get_start_loc: (node: T) -> NodeMutation::Struct::Location
|
15
15
|
|
16
|
-
def get_end_loc: (node: T) -> NodeMutation::Location
|
16
|
+
def get_end_loc: (node: T) -> NodeMutation::Struct::Location
|
17
17
|
|
18
18
|
def get_indent: (node: T) -> Integer
|
19
19
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class NodeMutation::Result
|
2
2
|
attr_accessor file_path (): String
|
3
|
+
attr_accessor new_source (): String
|
4
|
+
attr_accessor actions (): Array[NodeMutation::Struct::Action]
|
3
5
|
|
4
6
|
def initialize: (source: String) -> NodeMutation::Result
|
5
7
|
|
@@ -7,9 +9,5 @@ class NodeMutation::Result
|
|
7
9
|
|
8
10
|
def conflicted?: () -> bool
|
9
11
|
|
10
|
-
def new_source: () -> String
|
11
|
-
|
12
|
-
def actions: () -> Array[Hash]
|
13
|
-
|
14
12
|
def to_json: (*args) -> String
|
15
13
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class NodeMutation::Struct
|
2
|
+
class Action < ::Struct
|
3
|
+
prop :start, Integer
|
4
|
+
prop :end, Integer
|
5
|
+
prop :new_code, String
|
6
|
+
end
|
7
|
+
|
8
|
+
class Location < ::Struct
|
9
|
+
prop :line, Integer
|
10
|
+
prop :column, Integer
|
11
|
+
end
|
12
|
+
|
13
|
+
class Range < ::Struct
|
14
|
+
prop :start, Integer
|
15
|
+
prop :end, Integer
|
16
|
+
end
|
17
|
+
end
|
data/sig/node_mutation.rbs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module NodeMutation[T]
|
2
|
-
VERSION:
|
2
|
+
VERSION: String
|
3
3
|
|
4
4
|
class MethodNotSupported < StandardError
|
5
5
|
end
|
@@ -7,10 +7,6 @@ module NodeMutation[T]
|
|
7
7
|
class ConflictActionError < StandardError
|
8
8
|
end
|
9
9
|
|
10
|
-
KEEP_RUNNING: Integer
|
11
|
-
|
12
|
-
THROW_ERROR: Integer
|
13
|
-
|
14
10
|
attr_reader actions: Array[NodeMutation::Action]
|
15
11
|
|
16
12
|
def self.configure: (options: { adapter: NodeMutation::Adapter, strategy: Integer, tab_width: Integer }) -> void
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: node_mutation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.12.
|
4
|
+
version: 1.12.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
@@ -51,16 +51,17 @@ files:
|
|
51
51
|
- lib/node_mutation/action/replace_with_action.rb
|
52
52
|
- lib/node_mutation/action/wrap_action.rb
|
53
53
|
- lib/node_mutation/adapter.rb
|
54
|
-
- lib/node_mutation/location.rb
|
55
54
|
- lib/node_mutation/parser_adapter.rb
|
56
|
-
- lib/node_mutation/range.rb
|
57
55
|
- lib/node_mutation/result.rb
|
58
56
|
- lib/node_mutation/strategy.rb
|
57
|
+
- lib/node_mutation/struct.rb
|
59
58
|
- lib/node_mutation/version.rb
|
60
59
|
- node_mutation.gemspec
|
61
60
|
- sig/node_mutation.rbs
|
62
61
|
- sig/node_mutation/adapter.rbs
|
63
62
|
- sig/node_mutation/result.rbs
|
63
|
+
- sig/node_mutation/strategy.rbs
|
64
|
+
- sig/node_mutation/struct.rbs
|
64
65
|
homepage: https://github.com/xinminlabs/node-mutation-ruby
|
65
66
|
licenses: []
|
66
67
|
metadata:
|
@@ -82,7 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
83
|
- !ruby/object:Gem::Version
|
83
84
|
version: '0'
|
84
85
|
requirements: []
|
85
|
-
rubygems_version: 3.4.
|
86
|
+
rubygems_version: 3.4.7
|
86
87
|
signing_key:
|
87
88
|
specification_version: 4
|
88
89
|
summary: ast node mutation apis
|
data/lib/node_mutation/range.rb
DELETED