synvert-core 1.21.6 → 1.22.0
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/.github/workflows/main.yml +6 -5
- data/CHANGELOG.md +9 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +8 -9
- data/lib/synvert/core/engine/erb.rb +6 -8
- data/lib/synvert/core/rewriter/instance.rb +19 -16
- data/lib/synvert/core/rewriter.rb +14 -5
- data/lib/synvert/core/snippet_not_found_error.rb +1 -1
- data/lib/synvert/core/strategy.rb +1 -1
- data/lib/synvert/core/utils.rb +8 -4
- data/lib/synvert/core/version.rb +1 -1
- data/lib/synvert/core.rb +0 -1
- data/spec/synvert/core/engine/erb_spec.rb +8 -5
- data/spec/synvert/core/rewriter/instance_spec.rb +68 -15
- data/spec/synvert/core/rewriter_spec.rb +21 -17
- data/spec/synvert/core/utils_spec.rb +19 -4
- data/synvert-core-ruby.gemspec +1 -2
- metadata +5 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90f6acc3b15b0d25a8df1320393862f574dffbfc1743fd5bbb03f7323d994ae1
|
4
|
+
data.tar.gz: 7fa5d3c80ed1c86fc8c67abc2add07e374681c3bb54bc53e590195ffb51c3fb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 755e6b198dc2ce1c652ea6bced3f9ee002599e6ab51dee5ea1a9dd8d103b0aafa86fa495808db548a675e0a6bf0356533687f7cd652e73dd519bec9e50cb55dd
|
7
|
+
data.tar.gz: f2364e3359310b864a813d6132e9475ea4f19f95219e849bcbd33cdfe362f849c5a11ddc9220ca6b7689058ca795e70be75a63043fc9498224d336f2fd10a567
|
data/.github/workflows/main.yml
CHANGED
@@ -11,10 +11,10 @@ jobs:
|
|
11
11
|
runs-on: ubuntu-latest
|
12
12
|
strategy:
|
13
13
|
matrix:
|
14
|
-
ruby-version: ['2.
|
14
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
15
15
|
|
16
16
|
steps:
|
17
|
-
- uses: actions/checkout@
|
17
|
+
- uses: actions/checkout@v3
|
18
18
|
- name: Set up Ruby
|
19
19
|
uses: ruby/setup-ruby@v1
|
20
20
|
with:
|
@@ -28,10 +28,11 @@ jobs:
|
|
28
28
|
needs: test
|
29
29
|
name: Update gh-pages to docs
|
30
30
|
steps:
|
31
|
-
- uses: actions/checkout@
|
32
|
-
- uses:
|
31
|
+
- uses: actions/checkout@v3
|
32
|
+
- uses: ruby/setup-ruby@v1
|
33
33
|
with:
|
34
|
-
ruby-version: '3.
|
34
|
+
ruby-version: '3.2'
|
35
|
+
bundler-cache: true
|
35
36
|
- name: Install required gem dependencies
|
36
37
|
run: gem install yard redcarpet github-markup --no-document
|
37
38
|
- name: Build YARD Ruby Documentation
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 1.22.0 (2023-03-24)
|
4
|
+
|
5
|
+
* Add `and_comma` option to `insert`, `insert_before`, `insert_after` api
|
6
|
+
|
7
|
+
## 1.21.7 (2023-03-23)
|
8
|
+
|
9
|
+
* Polish `erb` engine
|
10
|
+
* Update `node_mutation` to 1.12.1
|
11
|
+
|
3
12
|
## 1.21.6 (2023-02-16)
|
4
13
|
|
5
14
|
* `RAILS_VIEW_FILES` do not check `haml` and `slim` files until we support them
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
synvert-core (1.
|
4
|
+
synvert-core (1.22.0)
|
5
5
|
activesupport (< 7.0.0)
|
6
|
-
|
7
|
-
node_mutation (>= 1.9.2)
|
6
|
+
node_mutation (>= 1.12.1)
|
8
7
|
node_query (>= 1.12.0)
|
9
8
|
parallel
|
10
9
|
parser
|
@@ -13,7 +12,7 @@ PATH
|
|
13
12
|
GEM
|
14
13
|
remote: https://rubygems.org/
|
15
14
|
specs:
|
16
|
-
activesupport (6.1.7.
|
15
|
+
activesupport (6.1.7.3)
|
17
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
17
|
i18n (>= 1.6, < 2)
|
19
18
|
minitest (>= 5.1)
|
@@ -21,10 +20,10 @@ GEM
|
|
21
20
|
zeitwerk (~> 2.3)
|
22
21
|
ast (2.4.2)
|
23
22
|
coderay (1.1.3)
|
24
|
-
concurrent-ruby (1.2.
|
23
|
+
concurrent-ruby (1.2.2)
|
25
24
|
diff-lcs (1.5.0)
|
26
25
|
erubis (2.7.0)
|
27
|
-
fakefs (
|
26
|
+
fakefs (2.4.0)
|
28
27
|
ffi (1.15.5)
|
29
28
|
formatador (1.1.0)
|
30
29
|
guard (2.18.0)
|
@@ -48,16 +47,16 @@ GEM
|
|
48
47
|
rb-inotify (~> 0.9, >= 0.9.10)
|
49
48
|
lumberjack (1.2.8)
|
50
49
|
method_source (1.0.0)
|
51
|
-
minitest (5.
|
50
|
+
minitest (5.18.0)
|
52
51
|
nenv (0.3.0)
|
53
|
-
node_mutation (1.
|
52
|
+
node_mutation (1.12.1)
|
54
53
|
erubis
|
55
54
|
node_query (1.12.0)
|
56
55
|
notiffany (0.1.3)
|
57
56
|
nenv (~> 0.1)
|
58
57
|
shellany (~> 0.0)
|
59
58
|
parallel (1.22.1)
|
60
|
-
parser (3.2.1.
|
59
|
+
parser (3.2.1.1)
|
61
60
|
ast (~> 2.4.1)
|
62
61
|
parser_node_ext (1.0.0)
|
63
62
|
parser
|
@@ -1,19 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'erubis'
|
4
|
-
|
5
3
|
module Synvert::Core
|
6
4
|
module Engine
|
7
5
|
class Erb
|
8
6
|
class << self
|
9
|
-
#
|
7
|
+
# Encode erb string, leave only ruby code, replace other erb code with whitespace.
|
10
8
|
#
|
11
|
-
# @param source [String] erb
|
12
|
-
# @return [String] ruby
|
9
|
+
# @param source [String] erb code.
|
10
|
+
# @return [String] encoded ruby code.
|
13
11
|
def encode(source)
|
14
|
-
source.gsub(
|
15
|
-
.
|
16
|
-
.
|
12
|
+
source.gsub(/%>.*?<%=?/m) { |str| ' ' * str.size }
|
13
|
+
.sub(/^.*?<%=?/m) { |str| ' ' * str.size }
|
14
|
+
.sub(/%>.*?$/m) { |str| ' ' * str.size }
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -20,7 +20,7 @@ module Synvert::Core
|
|
20
20
|
@block = block
|
21
21
|
strategy = NodeMutation::Strategy::KEEP_RUNNING
|
22
22
|
if rewriter.options[:strategy] == Strategy::ALLOW_INSERT_AT_SAME_POSITION
|
23
|
-
strategy |=
|
23
|
+
strategy |= NodeMutation::Strategy::ALLOW_INSERT_AT_SAME_POSITION
|
24
24
|
end
|
25
25
|
NodeMutation.configure({ strategy: strategy, tab_width: Configuration.tab_width })
|
26
26
|
rewriter.helpers.each { |helper| singleton_class.send(:define_method, helper[:name], &helper[:block]) }
|
@@ -90,7 +90,6 @@ module Synvert::Core
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
|
94
93
|
# Gets current node, it allows to get current node in block code.
|
95
94
|
#
|
96
95
|
# @return [Parser::AST::Node]
|
@@ -251,8 +250,9 @@ module Synvert::Core
|
|
251
250
|
# @param code [String] code need to be inserted.
|
252
251
|
# @param at [String] insert position, beginning or end
|
253
252
|
# @param to [String] where to insert, if it is nil, will insert to current node.
|
254
|
-
|
255
|
-
|
253
|
+
# @param and_comma [Boolean] insert extra comma.
|
254
|
+
def insert(code, at: 'end', to: nil, and_comma: false)
|
255
|
+
@current_mutation.insert(@current_node, code, at: at, to: to, and_comma: and_comma)
|
256
256
|
end
|
257
257
|
|
258
258
|
# It inserts the code next to the current node.
|
@@ -265,9 +265,11 @@ module Synvert::Core
|
|
265
265
|
# insert_after "{{receiver}}.secret_key_base = \"#{SecureRandom.hex(64)}\""
|
266
266
|
# end
|
267
267
|
# @param code [String] code need to be inserted.
|
268
|
-
|
268
|
+
# @param to [String] where to insert, if it is nil, will insert to current node.
|
269
|
+
# @param and_comma [Boolean] insert extra comma.
|
270
|
+
def insert_after(code, to: nil, and_comma: false)
|
269
271
|
column = ' ' * NodeMutation.adapter.get_start_loc(@current_node).column
|
270
|
-
@current_mutation.insert(@current_node, "\n#{column}#{code}", at: 'end', to: to)
|
272
|
+
@current_mutation.insert(@current_node, "\n#{column}#{code}", at: 'end', to: to, and_comma: and_comma)
|
271
273
|
end
|
272
274
|
|
273
275
|
# It inserts the code previous to the current node.
|
@@ -280,9 +282,11 @@ module Synvert::Core
|
|
280
282
|
# insert_before "{{receiver}}.secret_key_base = \"#{SecureRandom.hex(64)}\""
|
281
283
|
# end
|
282
284
|
# @param code [String] code need to be inserted.
|
283
|
-
|
285
|
+
# @param to [String] where to insert, if it is nil, will insert to current node.
|
286
|
+
# @param and_comma [Boolean] insert extra comma.
|
287
|
+
def insert_before(code, to: nil, and_comma: false)
|
284
288
|
column = ' ' * NodeMutation.adapter.get_start_loc(@current_node).column
|
285
|
-
@current_mutation.insert(@current_node, "#{code}\n#{column}", at: 'beginning', to: to)
|
289
|
+
@current_mutation.insert(@current_node, "#{code}\n#{column}", at: 'beginning', to: to, and_comma: and_comma)
|
286
290
|
end
|
287
291
|
|
288
292
|
# It replaces erb stmt code to expr code.
|
@@ -333,10 +337,9 @@ module Synvert::Core
|
|
333
337
|
# with_node type: 'send', message: { in: %w[puts p] } do
|
334
338
|
# remove
|
335
339
|
# end
|
336
|
-
# @param options [Hash] options.
|
337
340
|
# @option and_comma [Boolean] delete extra comma.
|
338
|
-
def remove(
|
339
|
-
@current_mutation.remove(@current_node,
|
341
|
+
def remove(and_comma: false)
|
342
|
+
@current_mutation.remove(@current_node, and_comma: and_comma)
|
340
343
|
end
|
341
344
|
|
342
345
|
# It deletes child nodes.
|
@@ -348,10 +351,9 @@ module Synvert::Core
|
|
348
351
|
# delete :receiver, :dot
|
349
352
|
# end
|
350
353
|
# @param selectors [Array<Symbol>] selector names of child node.
|
351
|
-
# @param options [Hash]
|
352
354
|
# @option and_comma [Boolean] delete extra comma.
|
353
|
-
def delete(*selectors,
|
354
|
-
@current_mutation.delete(@current_node, *selectors,
|
355
|
+
def delete(*selectors, and_comma: false)
|
356
|
+
@current_mutation.delete(@current_node, *selectors, and_comma: and_comma)
|
355
357
|
end
|
356
358
|
|
357
359
|
# It wraps current node with code.
|
@@ -404,7 +406,8 @@ module Synvert::Core
|
|
404
406
|
if str.include?(quote) && !str.include?(another_quote)
|
405
407
|
return "#{another_quote}#{str}#{another_quote}"
|
406
408
|
end
|
407
|
-
|
409
|
+
|
410
|
+
escaped_str = str.gsub(quote) { |_char| '\\' + quote }
|
408
411
|
quote + escaped_str + quote
|
409
412
|
end
|
410
413
|
|
@@ -413,7 +416,7 @@ module Synvert::Core
|
|
413
416
|
# @param tab_size [Integer] tab size
|
414
417
|
# @return [String]
|
415
418
|
def add_leading_spaces(str, tab_size: 1)
|
416
|
-
" " * Configuration.tab_width * tab_size + str;
|
419
|
+
(" " * Configuration.tab_width * tab_size) + str;
|
417
420
|
end
|
418
421
|
|
419
422
|
private
|
@@ -94,7 +94,15 @@ module Synvert::Core
|
|
94
94
|
# @return [Array<Object>] the test results
|
95
95
|
# @!attribute [rw] options
|
96
96
|
# @return [Hash] the rewriter options
|
97
|
-
attr_reader :group,
|
97
|
+
attr_reader :group,
|
98
|
+
:name,
|
99
|
+
:sub_snippets,
|
100
|
+
:helpers,
|
101
|
+
:warnings,
|
102
|
+
:affected_files,
|
103
|
+
:ruby_version,
|
104
|
+
:gem_spec,
|
105
|
+
:test_results
|
98
106
|
attr_accessor :options
|
99
107
|
|
100
108
|
# Initialize a Rewriter.
|
@@ -230,10 +238,11 @@ module Synvert::Core
|
|
230
238
|
instance.process
|
231
239
|
end
|
232
240
|
else
|
233
|
-
results =
|
234
|
-
|
235
|
-
|
236
|
-
|
241
|
+
results =
|
242
|
+
handle_one_file(Array(file_patterns)) do |file_path|
|
243
|
+
instance = Rewriter::Instance.new(self, file_path, &block)
|
244
|
+
instance.test
|
245
|
+
end
|
237
246
|
merge_test_results(results)
|
238
247
|
end
|
239
248
|
end
|
data/lib/synvert/core/utils.rb
CHANGED
@@ -15,14 +15,17 @@ module Synvert::Core
|
|
15
15
|
if is_valid_url?(snippet_name)
|
16
16
|
uri = URI.parse(format_url(snippet_name))
|
17
17
|
return uri.open.read if remote_snippet_exists?(uri)
|
18
|
+
|
18
19
|
raise SnippetNotFoundError.new("#{snippet_name} nout found")
|
19
20
|
elsif is_valid_file?(snippet_name)
|
20
21
|
return File.read(snippet_name)
|
21
22
|
else
|
22
23
|
snippet_path = snippet_expand_path(snippet_name)
|
23
24
|
return File.read(snippet_path) if File.exist?(snippet_path)
|
25
|
+
|
24
26
|
snippet_uri = URI.parse(format_url(remote_snippet_url(snippet_name)))
|
25
27
|
return snippet_uri.open.read if remote_snippet_exists?(snippet_uri)
|
28
|
+
|
26
29
|
raise SnippetNotFoundError.new("#{snippet_name} nout found")
|
27
30
|
end
|
28
31
|
end
|
@@ -32,9 +35,10 @@ module Synvert::Core
|
|
32
35
|
# @return [Array<String>] file paths
|
33
36
|
def glob(file_patterns)
|
34
37
|
Dir.chdir(Configuration.root_path) do
|
35
|
-
all_files =
|
36
|
-
|
37
|
-
|
38
|
+
all_files =
|
39
|
+
file_patterns.flat_map do |file_pattern|
|
40
|
+
Dir.glob(file_pattern)
|
41
|
+
end
|
38
42
|
filter_only_paths(all_files) - get_skip_files
|
39
43
|
end
|
40
44
|
end
|
@@ -105,4 +109,4 @@ module Synvert::Core
|
|
105
109
|
end
|
106
110
|
end
|
107
111
|
end
|
108
|
-
end
|
112
|
+
end
|
data/lib/synvert/core/version.rb
CHANGED
data/lib/synvert/core.rb
CHANGED
@@ -34,11 +34,14 @@ module Synvert::Core
|
|
34
34
|
<% end %>
|
35
35
|
<% end %>
|
36
36
|
EOF
|
37
|
-
|
38
|
-
expect(
|
39
|
-
expect(
|
40
|
-
expect(
|
41
|
-
expect(
|
37
|
+
encoded_source = Engine::Erb.encode(source)
|
38
|
+
expect(encoded_source).to be_include 'content_for :head do'
|
39
|
+
expect(encoded_source).to be_include " asset_path('bg.png')"
|
40
|
+
expect(encoded_source).to be_include 'post = Post.find(:first)'
|
41
|
+
expect(encoded_source).to be_include "link_to_function 'test', \"confirm('test');\""
|
42
|
+
expect(encoded_source).to be_include 'end'
|
43
|
+
expect(encoded_source).not_to be_include 'style'
|
44
|
+
expect(encoded_source).not_to be_include 'div'
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
@@ -12,7 +12,12 @@ module Synvert::Core
|
|
12
12
|
it 'parses find_node' do
|
13
13
|
scope = double
|
14
14
|
block = proc {}
|
15
|
-
expect(Rewriter::WithinScope).to receive(:new).with(
|
15
|
+
expect(Rewriter::WithinScope).to receive(:new).with(
|
16
|
+
instance,
|
17
|
+
'.send[message=create]',
|
18
|
+
{},
|
19
|
+
&block
|
20
|
+
).and_return(scope)
|
16
21
|
expect(scope).to receive(:process)
|
17
22
|
instance.find_node('.send[message=create]', &block)
|
18
23
|
end
|
@@ -99,28 +104,46 @@ module Synvert::Core
|
|
99
104
|
it 'parses append' do
|
100
105
|
instance.instance_variable_set(:@current_mutation, double)
|
101
106
|
instance.current_node = double
|
102
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:append).with(
|
107
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:append).with(
|
108
|
+
instance.current_node,
|
109
|
+
'Foobar'
|
110
|
+
)
|
103
111
|
instance.append 'Foobar'
|
104
112
|
end
|
105
113
|
|
106
114
|
it 'parses prepend' do
|
107
115
|
instance.instance_variable_set(:@current_mutation, double)
|
108
116
|
instance.current_node = double
|
109
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:prepend).with(
|
117
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:prepend).with(
|
118
|
+
instance.current_node,
|
119
|
+
'Foobar'
|
120
|
+
)
|
110
121
|
instance.prepend 'Foobar'
|
111
122
|
end
|
112
123
|
|
113
124
|
it 'parses insert at end' do
|
114
125
|
instance.instance_variable_set(:@current_mutation, double)
|
115
126
|
instance.current_node = double
|
116
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
127
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
128
|
+
instance.current_node,
|
129
|
+
'Foobar',
|
130
|
+
at: 'end',
|
131
|
+
to: 'receiver',
|
132
|
+
and_comma: false
|
133
|
+
)
|
117
134
|
instance.insert 'Foobar', to: 'receiver'
|
118
135
|
end
|
119
136
|
|
120
137
|
it 'parses insert at beginning' do
|
121
138
|
instance.instance_variable_set(:@current_mutation, double)
|
122
139
|
instance.current_node = double
|
123
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
140
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
141
|
+
instance.current_node,
|
142
|
+
'Foobar',
|
143
|
+
at: 'beginning',
|
144
|
+
to: nil,
|
145
|
+
and_comma: false
|
146
|
+
)
|
124
147
|
instance.insert 'Foobar', at: 'beginning'
|
125
148
|
end
|
126
149
|
|
@@ -128,7 +151,13 @@ module Synvert::Core
|
|
128
151
|
instance.instance_variable_set(:@current_mutation, double)
|
129
152
|
instance.current_node = double
|
130
153
|
expect(NodeMutation).to receive_message_chain(:adapter, :get_start_loc, :column).and_return(2)
|
131
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
154
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
155
|
+
instance.current_node,
|
156
|
+
"\n Foobar",
|
157
|
+
at: 'end',
|
158
|
+
to: nil,
|
159
|
+
and_comma: false
|
160
|
+
)
|
132
161
|
instance.insert_after 'Foobar'
|
133
162
|
end
|
134
163
|
|
@@ -136,7 +165,13 @@ module Synvert::Core
|
|
136
165
|
instance.instance_variable_set(:@current_mutation, double)
|
137
166
|
instance.current_node = double
|
138
167
|
expect(NodeMutation).to receive_message_chain(:adapter, :get_start_loc, :column).and_return(2)
|
139
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
168
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:insert).with(
|
169
|
+
instance.current_node,
|
170
|
+
"Foobar\n ",
|
171
|
+
at: 'beginning',
|
172
|
+
to: nil,
|
173
|
+
and_comma: false
|
174
|
+
)
|
140
175
|
instance.insert_before 'Foobar'
|
141
176
|
end
|
142
177
|
|
@@ -153,35 +188,53 @@ module Synvert::Core
|
|
153
188
|
it 'parses replace_with' do
|
154
189
|
instance.instance_variable_set(:@current_mutation, double)
|
155
190
|
instance.current_node = double
|
156
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace_with).with(
|
191
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace_with).with(
|
192
|
+
instance.current_node,
|
193
|
+
'Foobar'
|
194
|
+
)
|
157
195
|
instance.replace_with 'Foobar'
|
158
196
|
end
|
159
197
|
|
160
198
|
it 'parses replace with' do
|
161
199
|
instance.instance_variable_set(:@current_mutation, double)
|
162
200
|
instance.current_node = double
|
163
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace).with(
|
201
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:replace).with(
|
202
|
+
instance.current_node,
|
203
|
+
:message,
|
204
|
+
with: 'Foobar'
|
205
|
+
)
|
164
206
|
instance.replace :message, with: 'Foobar'
|
165
207
|
end
|
166
208
|
|
167
209
|
it 'parses remove' do
|
168
210
|
instance.instance_variable_set(:@current_mutation, double)
|
169
211
|
instance.current_node = double
|
170
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:remove).with(
|
212
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:remove).with(
|
213
|
+
instance.current_node,
|
214
|
+
and_comma: true
|
215
|
+
)
|
171
216
|
instance.remove and_comma: true
|
172
217
|
end
|
173
218
|
|
174
219
|
it 'parses delete' do
|
175
220
|
instance.instance_variable_set(:@current_mutation, double)
|
176
221
|
instance.current_node = double
|
177
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:delete).with(
|
222
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:delete).with(
|
223
|
+
instance.current_node,
|
224
|
+
:dot,
|
225
|
+
:message,
|
226
|
+
and_comma: true
|
227
|
+
)
|
178
228
|
instance.delete :dot, :message, and_comma: true
|
179
229
|
end
|
180
230
|
|
181
231
|
it 'parses wrap with' do
|
182
232
|
instance.instance_variable_set(:@current_mutation, double)
|
183
233
|
instance.current_node = double
|
184
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:wrap).with(
|
234
|
+
expect(instance.instance_variable_get(:@current_mutation)).to receive(:wrap).with(
|
235
|
+
instance.current_node,
|
236
|
+
with: 'module Foobar'
|
237
|
+
)
|
185
238
|
instance.wrap with: 'module Foobar'
|
186
239
|
end
|
187
240
|
|
@@ -330,8 +383,8 @@ module Synvert::Core
|
|
330
383
|
results = instance.test
|
331
384
|
expect(results.file_path).to eq 'spec/models/post_spec.rb'
|
332
385
|
expect(results.actions).to eq [
|
333
|
-
|
334
|
-
|
386
|
+
NodeMutation::Struct::Action.new(35, 59, 'create :user'),
|
387
|
+
NodeMutation::Struct::Action.new(69, 105, 'create :post, user: user')
|
335
388
|
]
|
336
389
|
end
|
337
390
|
|
@@ -369,7 +422,7 @@ module Synvert::Core
|
|
369
422
|
expect(File).to receive(:read).with('./app/views/posts/_form.html.erb', encoding: 'UTF-8').and_return(input)
|
370
423
|
result = instance.test
|
371
424
|
expect(result.file_path).to eq 'app/views/posts/_form.html.erb'
|
372
|
-
expect(result.actions).to eq [
|
425
|
+
expect(result.actions).to eq [NodeMutation::Struct::Action.new(2, 2, '=')]
|
373
426
|
end
|
374
427
|
end
|
375
428
|
|
@@ -33,13 +33,14 @@ module Synvert::Core
|
|
33
33
|
|
34
34
|
describe '#process' do
|
35
35
|
it 'rewrites the file' do
|
36
|
-
rewriter =
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
rewriter =
|
37
|
+
Rewriter.new('group', 'name') do
|
38
|
+
within_files '**/*.rb' do
|
39
|
+
with_node node_type: 'class', name: 'Foobar' do
|
40
|
+
replace :name, with: 'Synvert'
|
41
|
+
end
|
40
42
|
end
|
41
43
|
end
|
42
|
-
end
|
43
44
|
input = "class Foobar\nend"
|
44
45
|
output = "class Synvert\nend"
|
45
46
|
FakeFS do
|
@@ -52,13 +53,14 @@ module Synvert::Core
|
|
52
53
|
|
53
54
|
describe '#test' do
|
54
55
|
it 'gets test results' do
|
55
|
-
rewriter =
|
56
|
-
|
57
|
-
|
58
|
-
|
56
|
+
rewriter =
|
57
|
+
Rewriter.new('group', 'name') do
|
58
|
+
within_files '**/*.rb' do
|
59
|
+
with_node node_type: 'class', name: 'Foobar' do
|
60
|
+
replace :name, with: 'Synvert'
|
61
|
+
end
|
59
62
|
end
|
60
63
|
end
|
61
|
-
end
|
62
64
|
input = "class Foobar\nend"
|
63
65
|
FakeFS do
|
64
66
|
File.write("code.rb", input)
|
@@ -66,7 +68,7 @@ module Synvert::Core
|
|
66
68
|
expect(results[0].file_path).to eq '/code.rb'
|
67
69
|
expect(results[0].affected?).to be_truthy
|
68
70
|
expect(results[0].conflicted?).to be_falsey
|
69
|
-
expect(results[0].actions).to eq [
|
71
|
+
expect(results[0].actions).to eq [NodeMutation::Struct::Action.new(6, 12, 'Synvert')]
|
70
72
|
end
|
71
73
|
end
|
72
74
|
end
|
@@ -226,9 +228,10 @@ module Synvert::Core
|
|
226
228
|
it 'adds snippet by http url' do
|
227
229
|
expect(Utils).to receive(:remote_snippet_exists?).with(URI.parse('http://synvert.net/foo/bar.rb')).and_return(true)
|
228
230
|
expect_any_instance_of(URI::HTTP).to receive(:open).and_return(StringIO.new("Rewriter.new 'group', 'sub_rewriter' do\nend"))
|
229
|
-
rewriter =
|
230
|
-
|
231
|
-
|
231
|
+
rewriter =
|
232
|
+
Rewriter.new 'group', 'rewriter' do
|
233
|
+
add_snippet 'http://synvert.net/foo/bar.rb'
|
234
|
+
end
|
232
235
|
rewriter.process
|
233
236
|
expect(Rewriter.fetch('group', 'sub_rewriter')).not_to be_nil
|
234
237
|
end
|
@@ -236,9 +239,10 @@ module Synvert::Core
|
|
236
239
|
it 'adds snippet by file path' do
|
237
240
|
expect(File).to receive(:exist?).and_return(true)
|
238
241
|
expect(File).to receive(:read).and_return("Rewriter.new 'group', 'sub_rewriter' do\nend")
|
239
|
-
rewriter =
|
240
|
-
|
241
|
-
|
242
|
+
rewriter =
|
243
|
+
Rewriter.new 'group', 'rewriter' do
|
244
|
+
add_snippet '/home/richard/foo/bar.rb'
|
245
|
+
end
|
242
246
|
rewriter.process
|
243
247
|
expect(Rewriter.fetch('group', 'sub_rewriter')).not_to be_nil
|
244
248
|
end
|
@@ -61,22 +61,37 @@ module Synvert::Core
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'gets all files' do
|
64
|
-
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
64
|
+
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
65
|
+
[
|
66
|
+
'app/models/post.rb',
|
67
|
+
'app/controllers/posts_controller.rb'
|
68
|
+
]
|
69
|
+
)
|
65
70
|
expect(described_class.glob(['**/*.rb'])).to eq(['app/models/post.rb', 'app/controllers/posts_controller.rb'])
|
66
71
|
end
|
67
72
|
|
68
73
|
it 'filters only paths' do
|
69
74
|
Configuration.only_paths = ['app/models']
|
70
|
-
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
75
|
+
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
76
|
+
[
|
77
|
+
'app/models/post.rb',
|
78
|
+
'app/controllers/posts_controller.rb'
|
79
|
+
]
|
80
|
+
)
|
71
81
|
expect(described_class.glob(['**/*.rb'])).to eq(['app/models/post.rb'])
|
72
82
|
end
|
73
83
|
|
74
84
|
it 'skip files' do
|
75
85
|
Configuration.skip_paths = ['app/controllers/**/*']
|
76
|
-
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
86
|
+
expect(Dir).to receive(:glob).with('**/*.rb').and_return(
|
87
|
+
[
|
88
|
+
'app/models/post.rb',
|
89
|
+
'app/controllers/posts_controller.rb'
|
90
|
+
]
|
91
|
+
)
|
77
92
|
expect(Dir).to receive(:glob).with('app/controllers/**/*').and_return(['app/controllers/posts_controller.rb'])
|
78
93
|
expect(described_class.glob(['**/*.rb'])).to eq(['app/models/post.rb'])
|
79
94
|
end
|
80
95
|
end
|
81
96
|
end
|
82
|
-
end
|
97
|
+
end
|
data/synvert-core-ruby.gemspec
CHANGED
@@ -20,9 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
22
|
spec.add_runtime_dependency "activesupport", "< 7.0.0"
|
23
|
-
spec.add_runtime_dependency "erubis"
|
24
23
|
spec.add_runtime_dependency "node_query", ">= 1.12.0"
|
25
|
-
spec.add_runtime_dependency "node_mutation", ">= 1.
|
24
|
+
spec.add_runtime_dependency "node_mutation", ">= 1.12.1"
|
26
25
|
spec.add_runtime_dependency "parser"
|
27
26
|
spec.add_runtime_dependency "parser_node_ext", ">= 1.0.0"
|
28
27
|
spec.add_runtime_dependency "parallel"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: synvert-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 7.0.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: erubis
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: node_query
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +44,14 @@ dependencies:
|
|
58
44
|
requirements:
|
59
45
|
- - ">="
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
47
|
+
version: 1.12.1
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - ">="
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.
|
54
|
+
version: 1.12.1
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: parser
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
174
|
- !ruby/object:Gem::Version
|
189
175
|
version: '0'
|
190
176
|
requirements: []
|
191
|
-
rubygems_version: 3.4.
|
177
|
+
rubygems_version: 3.4.6
|
192
178
|
signing_key:
|
193
179
|
specification_version: 4
|
194
180
|
summary: convert ruby code to better syntax.
|