synvert-core 2.0.2 → 2.1.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/.vscode/settings.json +17 -1
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +7 -7
- data/README.md +0 -1
- data/lib/synvert/core/configuration.rb +5 -4
- data/lib/synvert/core/rewriter/instance.rb +18 -21
- data/lib/synvert/core/rewriter/warning.rb +5 -4
- data/lib/synvert/core/rewriter.rb +1 -1
- data/lib/synvert/core/utils.rb +1 -1
- data/lib/synvert/core/version.rb +1 -1
- data/lib/synvert/core.rb +1 -0
- data/spec/synvert/core/configuration_spec.rb +1 -1
- data/spec/synvert/core/rewriter/gem_spec_spec.rb +11 -1
- data/spec/synvert/core/rewriter/instance_spec.rb +21 -24
- data/spec/synvert/core/rewriter/warning_spec.rb +1 -4
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c9a0f5e143582d26ad70583fece58a3e99251a0bb00af3e2ec1815c8b7163454
|
|
4
|
+
data.tar.gz: 0e6e001dc795642ddfe0a245339f4632faeb8492f377cb0739c9d0d89b573fb0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d696b90c59582437c373ea536901c304ef2e63058cb600fd5d9bef731cf8ecc38e021799979174319ed22c1f1e888245f0a9034828953556e3ac09393b8b55af
|
|
7
|
+
data.tar.gz: bd3db282c2f08918279815aed52e80f8bde651f70f61f5b041094679f1092fac2fee65b92adffa58602b6738f0cd70b8bd2cc0f858c209073200cfd9950c3681
|
data/.vscode/settings.json
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"cSpell.words": [
|
|
3
|
-
"
|
|
3
|
+
"asgn",
|
|
4
|
+
"autoindent",
|
|
5
|
+
"blockarg",
|
|
6
|
+
"casgn",
|
|
7
|
+
"csend",
|
|
8
|
+
"cvar",
|
|
9
|
+
"erange",
|
|
10
|
+
"fileutils",
|
|
11
|
+
"haml",
|
|
12
|
+
"ivar",
|
|
13
|
+
"lvar",
|
|
14
|
+
"mlhs",
|
|
15
|
+
"restarg",
|
|
16
|
+
"rvmrc",
|
|
17
|
+
"synvert",
|
|
18
|
+
"Yardoc",
|
|
19
|
+
"zsuper"
|
|
4
20
|
]
|
|
5
21
|
}
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 2.1.0 (2024-06-24)
|
|
4
|
+
|
|
5
|
+
* Remove `add_leading_spaces` method
|
|
6
|
+
* Add `indent` and `dedent` helper methods
|
|
7
|
+
|
|
8
|
+
## 2.0.3 (2024-06-16)
|
|
9
|
+
|
|
10
|
+
* Fix `gem_spec_spec` test failures
|
|
11
|
+
* Use `NodeMutation` to fetch file line
|
|
12
|
+
|
|
3
13
|
## 2.0.2 (2024-05-30)
|
|
4
14
|
|
|
5
15
|
* Do not raise error for prism
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
synvert-core (2.0
|
|
4
|
+
synvert-core (2.1.0)
|
|
5
5
|
activesupport
|
|
6
6
|
node_mutation (>= 1.24.4)
|
|
7
7
|
node_query (>= 1.15.3)
|
|
@@ -17,7 +17,7 @@ PATH
|
|
|
17
17
|
GEM
|
|
18
18
|
remote: https://rubygems.org/
|
|
19
19
|
specs:
|
|
20
|
-
activesupport (7.1.3.
|
|
20
|
+
activesupport (7.1.3.4)
|
|
21
21
|
base64
|
|
22
22
|
bigdecimal
|
|
23
23
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
@@ -31,7 +31,7 @@ GEM
|
|
|
31
31
|
base64 (0.2.0)
|
|
32
32
|
bigdecimal (3.1.8)
|
|
33
33
|
coderay (1.1.3)
|
|
34
|
-
concurrent-ruby (1.3.
|
|
34
|
+
concurrent-ruby (1.3.3)
|
|
35
35
|
connection_pool (2.4.1)
|
|
36
36
|
diff-lcs (1.5.1)
|
|
37
37
|
drb (2.2.1)
|
|
@@ -59,7 +59,7 @@ GEM
|
|
|
59
59
|
rb-inotify (~> 0.9, >= 0.9.10)
|
|
60
60
|
lumberjack (1.2.10)
|
|
61
61
|
method_source (1.1.0)
|
|
62
|
-
minitest (5.
|
|
62
|
+
minitest (5.24.0)
|
|
63
63
|
mutex_m (0.2.0)
|
|
64
64
|
nenv (0.3.0)
|
|
65
65
|
node_mutation (1.24.4)
|
|
@@ -68,14 +68,14 @@ GEM
|
|
|
68
68
|
notiffany (0.1.3)
|
|
69
69
|
nenv (~> 0.1)
|
|
70
70
|
shellany (~> 0.0)
|
|
71
|
-
parallel (1.
|
|
72
|
-
parser (3.3.
|
|
71
|
+
parallel (1.25.1)
|
|
72
|
+
parser (3.3.3.0)
|
|
73
73
|
ast (~> 2.4.1)
|
|
74
74
|
racc
|
|
75
75
|
parser_node_ext (1.3.2)
|
|
76
76
|
parser
|
|
77
77
|
prettier_print (1.2.1)
|
|
78
|
-
prism (0.
|
|
78
|
+
prism (0.30.0)
|
|
79
79
|
prism_ext (0.3.2)
|
|
80
80
|
prism
|
|
81
81
|
pry (0.14.2)
|
data/README.md
CHANGED
|
@@ -97,7 +97,6 @@ Actions:
|
|
|
97
97
|
|
|
98
98
|
* [append](https://synvert-hq.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#append-instance_method) - append the code to the bottom of current node body
|
|
99
99
|
* [prepend](https://synvert-hq.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#prepend-instance_method) - prepend the code to the bottom of current node body
|
|
100
|
-
* [indent](https://synvert-hq.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#indent-instance_method) - indent code
|
|
101
100
|
* [insert](https://synvert-hq.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#insert-instance_method) - insert code
|
|
102
101
|
* [insert_after](https://synvert-hq.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#insert_after-instance_method) - insert the code next to the current node
|
|
103
102
|
* [insert_before](https://synvert-hq.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#insert_before-instance_method) - insert the code previous to the current node
|
|
@@ -111,10 +111,11 @@ module Synvert::Core
|
|
|
111
111
|
# # Code to be executed with temporary configurations
|
|
112
112
|
# end
|
|
113
113
|
def with_temporary_configurations(configurations, &block)
|
|
114
|
-
old_instance_variables =
|
|
115
|
-
hash
|
|
116
|
-
|
|
117
|
-
|
|
114
|
+
old_instance_variables =
|
|
115
|
+
instance_variables.reduce({}) do |hash, var|
|
|
116
|
+
hash[var] = instance_variable_get(var)
|
|
117
|
+
hash
|
|
118
|
+
end
|
|
118
119
|
|
|
119
120
|
configurations.each do |variable, value|
|
|
120
121
|
instance_variable_set("@#{variable}", value)
|
|
@@ -391,20 +391,6 @@ module Synvert::Core
|
|
|
391
391
|
@current_mutation.wrap(@current_node, prefix: prefix, suffix: suffix, newline: newline)
|
|
392
392
|
end
|
|
393
393
|
|
|
394
|
-
# It indent the code of current node.
|
|
395
|
-
# @example
|
|
396
|
-
# # class Foobar
|
|
397
|
-
# # end
|
|
398
|
-
# # =>
|
|
399
|
-
# # class Foobar
|
|
400
|
-
# # end
|
|
401
|
-
# within_node type: 'class' do
|
|
402
|
-
# indent
|
|
403
|
-
# end
|
|
404
|
-
def indent(tab_size: 1)
|
|
405
|
-
@current_mutation.indent(@current_node, tab_size: tab_size)
|
|
406
|
-
end
|
|
407
|
-
|
|
408
394
|
# No operation.
|
|
409
395
|
def noop
|
|
410
396
|
@current_mutation.noop(@current_node)
|
|
@@ -436,7 +422,8 @@ module Synvert::Core
|
|
|
436
422
|
# end
|
|
437
423
|
# @param message [String] warning message.
|
|
438
424
|
def warn(message)
|
|
439
|
-
@
|
|
425
|
+
line = @current_mutation.adapter.get_start_loc(@current_node).line
|
|
426
|
+
@rewriter.add_warning Rewriter::Warning.new(@file_path, line, message)
|
|
440
427
|
end
|
|
441
428
|
|
|
442
429
|
# It adds a callback when visiting an ast node.
|
|
@@ -465,12 +452,22 @@ module Synvert::Core
|
|
|
465
452
|
quote + escaped_str + quote
|
|
466
453
|
end
|
|
467
454
|
|
|
468
|
-
#
|
|
469
|
-
#
|
|
470
|
-
# @param
|
|
471
|
-
# @
|
|
472
|
-
|
|
473
|
-
|
|
455
|
+
# Indents the given source code by the specified tab size.
|
|
456
|
+
#
|
|
457
|
+
# @param source [String] The source code to be indented.
|
|
458
|
+
# @param tab_size [Integer] The number of spaces per tab.
|
|
459
|
+
# @return [String] The indented source code.
|
|
460
|
+
def indent(source, tab_size: 1)
|
|
461
|
+
source.each_line.map { |line| (' ' * NodeMutation.tab_width * tab_size) + line }.join
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
# Dedents the given source code by removing leading spaces or tabs.
|
|
465
|
+
#
|
|
466
|
+
# @param source [String] The source code to dedent.
|
|
467
|
+
# @param tab_size [Integer] The number of spaces per tab (default is 1).
|
|
468
|
+
# @return [String] The dedented source code.
|
|
469
|
+
def dedent(source, tab_size: 1)
|
|
470
|
+
source.each_line.map { |line| line.sub(/^ {#{NodeMutation.tab_width * tab_size}}/, '') }.join
|
|
474
471
|
end
|
|
475
472
|
|
|
476
473
|
private
|
|
@@ -5,11 +5,12 @@ module Synvert::Core
|
|
|
5
5
|
class Rewriter::Warning
|
|
6
6
|
# Initialize a Warning.
|
|
7
7
|
#
|
|
8
|
-
# @param
|
|
8
|
+
# @param file_path [String] file path.
|
|
9
|
+
# @param line [Integer] file line.
|
|
9
10
|
# @param message [String] warning message.
|
|
10
|
-
def initialize(
|
|
11
|
-
@file_path =
|
|
12
|
-
@line =
|
|
11
|
+
def initialize(file_path, line, message)
|
|
12
|
+
@file_path = file_path
|
|
13
|
+
@line = line
|
|
13
14
|
@message = message
|
|
14
15
|
end
|
|
15
16
|
|
|
@@ -201,7 +201,7 @@ module Synvert::Core
|
|
|
201
201
|
# @option strategy [String] 'allow_insert_at_same_position'
|
|
202
202
|
def configure(options)
|
|
203
203
|
@options = @options.merge(options)
|
|
204
|
-
if options[:parser] && !
|
|
204
|
+
if options[:parser] && !Synvert::ALL_PARSERS.include?(options[:parser])
|
|
205
205
|
raise Errors::ParserNotSupported.new("Parser #{options[:parser]} not supported")
|
|
206
206
|
end
|
|
207
207
|
end
|
data/lib/synvert/core/utils.rb
CHANGED
|
@@ -40,7 +40,7 @@ module Synvert::Core
|
|
|
40
40
|
ignored_files = []
|
|
41
41
|
|
|
42
42
|
if Configuration.respect_gitignore
|
|
43
|
-
Open3.popen3('git check-ignore --stdin') do |stdin, stdout,
|
|
43
|
+
Open3.popen3('git check-ignore --stdin') do |stdin, stdout, _stderr, _wait_thr|
|
|
44
44
|
stdin.puts(all_files.join("\n"))
|
|
45
45
|
stdin.close
|
|
46
46
|
|
data/lib/synvert/core/version.rb
CHANGED
data/lib/synvert/core.rb
CHANGED
|
@@ -16,7 +16,17 @@ module Synvert::Core
|
|
|
16
16
|
slop (3.4.7)
|
|
17
17
|
EOS
|
|
18
18
|
let(:lock_path) { File.absolute_path('./Gemfile.lock') }
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
before do
|
|
21
|
+
Configuration.root_path = File.dirname(lock_path)
|
|
22
|
+
allow(File).to receive(:exist?).with(File.join(ENV['HOME'])).and_return(true)
|
|
23
|
+
allow(File).to receive(:exist?).with(File.join(ENV['HOME'], '.gem')).and_return(false)
|
|
24
|
+
allow(File).to receive(:exist?).with(File.join(ENV['HOME'], '.gem/specs')).and_return(false)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
after do
|
|
28
|
+
Configuration.root_path = nil
|
|
29
|
+
end
|
|
20
30
|
|
|
21
31
|
it 'returns true if version in Gemfile.lock is greater than definition' do
|
|
22
32
|
expect(File).to receive(:exist?).with(lock_path).and_return(true)
|
|
@@ -235,16 +235,6 @@ module Synvert::Core
|
|
|
235
235
|
instance.wrap prefix: 'module Foobar', suffix: 'end', newline: true
|
|
236
236
|
end
|
|
237
237
|
|
|
238
|
-
it 'parses indent' do
|
|
239
|
-
instance.instance_variable_set(:@current_mutation, double)
|
|
240
|
-
instance.current_node = double
|
|
241
|
-
expect(instance.instance_variable_get(:@current_mutation)).to receive(:indent).with(
|
|
242
|
-
instance.current_node,
|
|
243
|
-
tab_size: 1
|
|
244
|
-
)
|
|
245
|
-
instance.indent
|
|
246
|
-
end
|
|
247
|
-
|
|
248
238
|
it 'parses noop' do
|
|
249
239
|
instance.instance_variable_set(:@current_mutation, double)
|
|
250
240
|
instance.current_node = double
|
|
@@ -260,14 +250,20 @@ module Synvert::Core
|
|
|
260
250
|
end
|
|
261
251
|
|
|
262
252
|
it 'parses warn' do
|
|
263
|
-
|
|
253
|
+
instance.instance_variable_set(:@file_path, 'app/test.rb')
|
|
254
|
+
expect(@current_mutation).to receive_message_chain(:adapter, :get_start_loc, :line).and_return(2)
|
|
255
|
+
expect(Rewriter::Warning).to receive(:new).with('app/test.rb', 2, 'foobar')
|
|
264
256
|
instance.warn 'foobar'
|
|
265
257
|
end
|
|
266
258
|
|
|
267
259
|
it 'parsers add_callback' do
|
|
268
260
|
instance.instance_variable_set(:@current_visitor, double)
|
|
269
261
|
block = proc {}
|
|
270
|
-
expect(instance.instance_variable_get(:@current_visitor)).to receive(:add_callback).with(
|
|
262
|
+
expect(instance.instance_variable_get(:@current_visitor)).to receive(:add_callback).with(
|
|
263
|
+
:class_node,
|
|
264
|
+
at: 'start',
|
|
265
|
+
&block
|
|
266
|
+
)
|
|
271
267
|
instance.add_callback(:class_node, at: 'start', &block)
|
|
272
268
|
end
|
|
273
269
|
|
|
@@ -549,10 +545,6 @@ module Synvert::Core
|
|
|
549
545
|
= form_for @post do |f|
|
|
550
546
|
= form_for @post do |f|
|
|
551
547
|
EOS
|
|
552
|
-
output = <<~EOS
|
|
553
|
-
= form_for post do |f|
|
|
554
|
-
= form_for post do |f|
|
|
555
|
-
EOS
|
|
556
548
|
allow(File).to receive(:read).with('./app/views/posts/_form.html.haml', encoding: 'UTF-8').and_return(input)
|
|
557
549
|
result = instance.test
|
|
558
550
|
expect(result.file_path).to eq 'app/views/posts/_form.html.haml'
|
|
@@ -578,10 +570,6 @@ module Synvert::Core
|
|
|
578
570
|
= form_for @post do |f|
|
|
579
571
|
= form_for @post do |f|
|
|
580
572
|
EOS
|
|
581
|
-
output = <<~EOS
|
|
582
|
-
= form_for post do |f|
|
|
583
|
-
= form_for post do |f|
|
|
584
|
-
EOS
|
|
585
573
|
allow(File).to receive(:read).with('./app/views/posts/_form.html.slim', encoding: 'UTF-8').and_return(input)
|
|
586
574
|
result = instance.test
|
|
587
575
|
expect(result.file_path).to eq 'app/views/posts/_form.html.slim'
|
|
@@ -677,10 +665,19 @@ module Synvert::Core
|
|
|
677
665
|
end
|
|
678
666
|
end
|
|
679
667
|
|
|
680
|
-
describe '#
|
|
681
|
-
it 'adds
|
|
682
|
-
|
|
683
|
-
|
|
668
|
+
describe '#indent' do
|
|
669
|
+
it 'adds white spaces' do
|
|
670
|
+
old_code = "def foo\n bar\nend"
|
|
671
|
+
new_code = instance.indent(old_code, tab_size: 2)
|
|
672
|
+
expect(new_code).to eq " def foo\n bar\n end"
|
|
673
|
+
end
|
|
674
|
+
end
|
|
675
|
+
|
|
676
|
+
describe '#dedent' do
|
|
677
|
+
it 'removes white spaces' do
|
|
678
|
+
old_code = " def foo\n bar\n end"
|
|
679
|
+
new_code = instance.dedent(old_code, tab_size: 2)
|
|
680
|
+
expect(new_code).to eq "def foo\n bar\nend"
|
|
684
681
|
end
|
|
685
682
|
end
|
|
686
683
|
end
|
|
@@ -5,10 +5,7 @@ require 'spec_helper'
|
|
|
5
5
|
module Synvert::Core
|
|
6
6
|
describe Rewriter::Warning do
|
|
7
7
|
subject {
|
|
8
|
-
|
|
9
|
-
send_node = Parser::CurrentRuby.parse(source).body.first
|
|
10
|
-
instance = double(current_node: send_node, file_path: 'app/test.rb')
|
|
11
|
-
Rewriter::Warning.new(instance, 'remove debugger')
|
|
8
|
+
Rewriter::Warning.new('app/test.rb', 2, 'remove debugger')
|
|
12
9
|
}
|
|
13
10
|
|
|
14
11
|
it 'gets message with filename and line number' do
|
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: 2.0
|
|
4
|
+
version: 2.1.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: 2024-
|
|
11
|
+
date: 2024-06-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -249,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
249
249
|
- !ruby/object:Gem::Version
|
|
250
250
|
version: '0'
|
|
251
251
|
requirements: []
|
|
252
|
-
rubygems_version: 3.5.
|
|
252
|
+
rubygems_version: 3.5.13
|
|
253
253
|
signing_key:
|
|
254
254
|
specification_version: 4
|
|
255
255
|
summary: convert ruby code to better syntax.
|