synvert 0.12.0 → 0.15.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/CHANGELOG.md +15 -0
- data/README.md +12 -2
- data/lib/synvert/cli.rb +70 -66
- data/lib/synvert/version.rb +1 -1
- data/synvert.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fa3d4c32999b086b2c6667043c3ed62fff147badcee5d3346a754fa00d510352
|
|
4
|
+
data.tar.gz: d6a24917c14a329e64fb54142c9e65ba33c2b989eca4ba51472692735d7d1682
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1857e7e55b03f6664324ad5a7ff1a7ff9a0c6cfcf2fb6c66b6d174080872f404fd41a1e566ab48cdaacfd570b9e6369985258ef24f4edb7d4cec6056e9dafbe7
|
|
7
|
+
data.tar.gz: 99291c2413590198482e72b37d159dd99bb528c0d15d31cee3e2abcb86c8e8b1fe67350b4c0f1cf3345d55cc4ba5e2b05d5bddd272743732cae715dcf112e3ff
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 0.15.0 (2021-03-23)
|
|
4
|
+
|
|
5
|
+
* Fix reduce on empty array
|
|
6
|
+
* Update synvert-core when syncing snippets
|
|
7
|
+
|
|
8
|
+
## 0.14.0 (2021-03-13)
|
|
9
|
+
|
|
10
|
+
* Add CLI option `--format`
|
|
11
|
+
* Run one snippet once
|
|
12
|
+
|
|
13
|
+
## 0.13.0 (2021-03-02)
|
|
14
|
+
|
|
15
|
+
* Use `ENV['SYNVERT_SNIPPETS_HOME']` to change default snippets home
|
|
16
|
+
* Display snippet source code for showing a snippet
|
|
17
|
+
|
|
3
18
|
## 0.12.0 (2021-03-01)
|
|
4
19
|
|
|
5
20
|
* Display `synvert-core` and `parser` version
|
data/README.md
CHANGED
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
Synvert = syntax + convert, makes it easy to convert ruby code
|
|
8
8
|
automatically.
|
|
9
9
|
|
|
10
|
-
Synvert is tested against MRI 1.9.3, 2.0.0, 2.1.7 and 2.2.3.
|
|
11
|
-
|
|
12
10
|
Synvert is composed by synvert-core and synvert-snippets.
|
|
13
11
|
|
|
14
12
|
[synvert-core][1] provides a dsl to convert ruby code.
|
|
@@ -49,6 +47,18 @@ $ synvert --sync
|
|
|
49
47
|
$ synvert -r factory_girl/use_short_syntax,rails/upgrade_3_2_to_4_0 ~/Sites/railsbp/rails-bestpractices.com
|
|
50
48
|
```
|
|
51
49
|
|
|
50
|
+
## Docker
|
|
51
|
+
|
|
52
|
+
We have a docker image to run synvert
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
$ docker pull xinminlabs/awesomecode-synvert
|
|
56
|
+
|
|
57
|
+
$ docker run xinminlabs/awesomecode-synvert synvert --list
|
|
58
|
+
|
|
59
|
+
$ docker run -v <your project path>:/app xinminlabs/awesomecode-synvert synvert --run default/check_syntax /app
|
|
60
|
+
```
|
|
61
|
+
|
|
52
62
|
## Documentation
|
|
53
63
|
|
|
54
64
|
[http://xinminlabs.github.io/synvert/][3]
|
data/lib/synvert/cli.rb
CHANGED
|
@@ -15,7 +15,7 @@ module Synvert
|
|
|
15
15
|
|
|
16
16
|
# Initialize a CLI.
|
|
17
17
|
def initialize
|
|
18
|
-
@options = { command: 'run', custom_snippet_paths: [],
|
|
18
|
+
@options = { command: 'run', custom_snippet_paths: [], format: 'plain' }
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
# Run the CLI.
|
|
@@ -28,9 +28,6 @@ module Synvert
|
|
|
28
28
|
when 'list'
|
|
29
29
|
load_rewriters
|
|
30
30
|
list_available_rewriters
|
|
31
|
-
when 'list-all'
|
|
32
|
-
load_rewriters
|
|
33
|
-
list_all_rewriters_in_json
|
|
34
31
|
when 'open'
|
|
35
32
|
open_rewriter
|
|
36
33
|
when 'query'
|
|
@@ -46,16 +43,7 @@ module Synvert
|
|
|
46
43
|
else
|
|
47
44
|
# run
|
|
48
45
|
load_rewriters
|
|
49
|
-
|
|
50
|
-
puts "===== #{snippet_name} started ====="
|
|
51
|
-
group, name = snippet_name.split('/')
|
|
52
|
-
rewriter = Core::Rewriter.call group, name
|
|
53
|
-
rewriter.warnings.each do |warning|
|
|
54
|
-
puts '[Warn] ' + warning.message
|
|
55
|
-
end
|
|
56
|
-
puts rewriter.todo if rewriter.todo
|
|
57
|
-
puts "===== #{snippet_name} done ====="
|
|
58
|
-
end
|
|
46
|
+
run_snippet
|
|
59
47
|
end
|
|
60
48
|
true
|
|
61
49
|
rescue SystemExit
|
|
@@ -82,9 +70,6 @@ module Synvert
|
|
|
82
70
|
'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths|
|
|
83
71
|
@options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip)
|
|
84
72
|
end
|
|
85
|
-
opts.on '--list-all', 'list all available snippets name and description in json format' do
|
|
86
|
-
@options[:command] = 'list-all'
|
|
87
|
-
end
|
|
88
73
|
opts.on '-l', '--list', 'list all available snippets' do
|
|
89
74
|
@options[:command] = 'list'
|
|
90
75
|
end
|
|
@@ -109,17 +94,16 @@ module Synvert
|
|
|
109
94
|
opts.on '--sync', 'sync snippets' do
|
|
110
95
|
@options[:command] = 'sync'
|
|
111
96
|
end
|
|
112
|
-
opts.on '-r',
|
|
113
|
-
|
|
114
|
-
'run specified snippets, each SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax,ruby/new_lambda_syntax' do |snippet_names|
|
|
115
|
-
@options[:snippet_names] = snippet_names.split(',').map(&:strip)
|
|
97
|
+
opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax' do |snippet_name|
|
|
98
|
+
@options[:snippet_name] = snippet_name
|
|
116
99
|
end
|
|
117
|
-
opts.on '-g',
|
|
118
|
-
'--generate NEW_SNIPPET_NAME',
|
|
119
|
-
'generate a new snippet' do |name|
|
|
100
|
+
opts.on '-g', '--generate NEW_SNIPPET_NAME', 'generate a new snippet' do |name|
|
|
120
101
|
@options[:command] = 'generate'
|
|
121
102
|
@options[:snippet_name] = name
|
|
122
103
|
end
|
|
104
|
+
opts.on '-f', '--format FORMAT', 'output format' do |format|
|
|
105
|
+
@options[:format] = format
|
|
106
|
+
end
|
|
123
107
|
opts.on '-v', '--version', 'show this version' do
|
|
124
108
|
puts "#{VERSION} (with synvert-core #{Core::VERSION} and parser #{Parser::VERSION})"
|
|
125
109
|
exit
|
|
@@ -139,7 +123,7 @@ module Synvert
|
|
|
139
123
|
|
|
140
124
|
# Load all rewriters.
|
|
141
125
|
def load_rewriters
|
|
142
|
-
Dir.glob(File.join(
|
|
126
|
+
Dir.glob(File.join(default_snippets_home, 'lib/**/*.rb')).each { |file| require file }
|
|
143
127
|
|
|
144
128
|
@options[:custom_snippet_paths].each do |snippet_path|
|
|
145
129
|
if /^http/.match?(snippet_path)
|
|
@@ -150,7 +134,7 @@ module Synvert
|
|
|
150
134
|
end
|
|
151
135
|
end
|
|
152
136
|
rescue StandardError
|
|
153
|
-
FileUtils.rm_rf
|
|
137
|
+
FileUtils.rm_rf default_snippets_home
|
|
154
138
|
retry
|
|
155
139
|
end
|
|
156
140
|
|
|
@@ -158,7 +142,10 @@ module Synvert
|
|
|
158
142
|
def list_available_rewriters
|
|
159
143
|
if Core::Rewriter.availables.empty?
|
|
160
144
|
puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.'
|
|
161
|
-
|
|
145
|
+
return
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
if plain_output?
|
|
162
149
|
Core::Rewriter.availables.each do |group, rewriters|
|
|
163
150
|
puts group
|
|
164
151
|
rewriters.each do |name, _rewriter|
|
|
@@ -166,29 +153,22 @@ module Synvert
|
|
|
166
153
|
end
|
|
167
154
|
end
|
|
168
155
|
puts
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
rewriter.process_with_sandbox
|
|
182
|
-
output << {
|
|
183
|
-
group: group,
|
|
184
|
-
name: name,
|
|
185
|
-
description: rewriter.description,
|
|
186
|
-
sub_snippets: rewriter.sub_snippets.map(&:name)
|
|
187
|
-
}
|
|
156
|
+
elsif json_output?
|
|
157
|
+
output = []
|
|
158
|
+
Core::Rewriter.availables.each do |group, rewriters|
|
|
159
|
+
rewriters.each do |name, rewriter|
|
|
160
|
+
rewriter.process_with_sandbox
|
|
161
|
+
output << {
|
|
162
|
+
group: group,
|
|
163
|
+
name: name,
|
|
164
|
+
description: rewriter.description,
|
|
165
|
+
sub_snippets: rewriter.sub_snippets.map(&:name)
|
|
166
|
+
}
|
|
167
|
+
end
|
|
188
168
|
end
|
|
189
|
-
end
|
|
190
169
|
|
|
191
|
-
|
|
170
|
+
puts JSON.generate(output)
|
|
171
|
+
end
|
|
192
172
|
end
|
|
193
173
|
|
|
194
174
|
# Open one rewriter.
|
|
@@ -196,7 +176,7 @@ module Synvert
|
|
|
196
176
|
editor = [ENV['SYNVERT_EDITOR'], ENV['EDITOR']].find { |e| !e.nil? && !e.empty? }
|
|
197
177
|
return puts 'To open a synvert snippet, set $EDITOR or $SYNVERT_EDITOR' unless editor
|
|
198
178
|
|
|
199
|
-
path = File.expand_path(File.join(
|
|
179
|
+
path = File.expand_path(File.join(default_snippets_home, "lib/#{@options[:snippet_name]}.rb"))
|
|
200
180
|
if File.exist? path
|
|
201
181
|
system editor, path
|
|
202
182
|
else
|
|
@@ -224,18 +204,9 @@ module Synvert
|
|
|
224
204
|
|
|
225
205
|
# Show and print one rewriter.
|
|
226
206
|
def show_rewriter
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
rewriter.process_with_sandbox
|
|
231
|
-
puts rewriter.description
|
|
232
|
-
rewriter.sub_snippets.each do |sub_rewriter|
|
|
233
|
-
puts
|
|
234
|
-
puts '=' * 80
|
|
235
|
-
puts "snippet: #{sub_rewriter.name}"
|
|
236
|
-
puts '=' * 80
|
|
237
|
-
puts sub_rewriter.description
|
|
238
|
-
end
|
|
207
|
+
path = File.expand_path(File.join(default_snippets_home, "lib/#{@options[:snippet_name]}.rb"))
|
|
208
|
+
if File.exist?(path)
|
|
209
|
+
puts File.read(path)
|
|
239
210
|
else
|
|
240
211
|
puts "snippet #{@options[:snippet_name]} not found"
|
|
241
212
|
end
|
|
@@ -243,11 +214,36 @@ module Synvert
|
|
|
243
214
|
|
|
244
215
|
# sync snippets
|
|
245
216
|
def sync_snippets
|
|
246
|
-
Snippet.new(
|
|
217
|
+
Snippet.new(default_snippets_home).sync
|
|
247
218
|
puts 'synvert snippets are synced'
|
|
248
219
|
core_version = Snippet.fetch_core_version
|
|
249
220
|
if Gem::Version.new(core_version) > Gem::Version.new(Synvert::Core::VERSION)
|
|
250
|
-
puts "synvert-core is updated,
|
|
221
|
+
puts "synvert-core is updated, installing synvert-core #{core_version}"
|
|
222
|
+
system('gem install synvert-core')
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# run snippets
|
|
227
|
+
def run_snippet
|
|
228
|
+
snippet_name = @options[:snippet_name]
|
|
229
|
+
if plain_output?
|
|
230
|
+
puts "===== #{snippet_name} started ====="
|
|
231
|
+
group, name = snippet_name.split('/')
|
|
232
|
+
rewriter = Core::Rewriter.call group, name
|
|
233
|
+
rewriter.warnings.each do |warning|
|
|
234
|
+
puts '[Warn] ' + warning.message
|
|
235
|
+
end
|
|
236
|
+
puts rewriter.todo if rewriter.todo
|
|
237
|
+
puts "===== #{snippet_name} done ====="
|
|
238
|
+
elsif json_output?
|
|
239
|
+
group, name = snippet_name.split('/')
|
|
240
|
+
rewriter = Core::Rewriter.call group, name
|
|
241
|
+
output = {
|
|
242
|
+
affected_files: rewriter.affected_files.union(rewriter.sub_snippets.sum([], &:affected_files)).to_a,
|
|
243
|
+
warnings: rewriter.warnings.union(rewriter.sub_snippets.sum([], &:warnings)),
|
|
244
|
+
todo: rewriter.todo
|
|
245
|
+
}
|
|
246
|
+
puts JSON.generate(output)
|
|
251
247
|
end
|
|
252
248
|
end
|
|
253
249
|
|
|
@@ -261,7 +257,7 @@ module Synvert
|
|
|
261
257
|
|
|
262
258
|
Synvert::Rewriter.new '#{group}', '#{name}' do
|
|
263
259
|
description <<~EOS
|
|
264
|
-
It
|
|
260
|
+
It converts Foo to Bar
|
|
265
261
|
|
|
266
262
|
```ruby
|
|
267
263
|
Foo
|
|
@@ -299,8 +295,16 @@ module Synvert
|
|
|
299
295
|
File.write("spec/#{group}/#{name}_spec.rb", spec_content)
|
|
300
296
|
end
|
|
301
297
|
|
|
302
|
-
def
|
|
303
|
-
File.join(ENV['HOME'], '.synvert')
|
|
298
|
+
def default_snippets_home
|
|
299
|
+
ENV['SYNVERT_SNIPPETS_HOME'] || File.join(ENV['HOME'], '.synvert')
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
def plain_output?
|
|
303
|
+
@options[:format] == 'plain'
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def json_output?
|
|
307
|
+
@options[:format] == 'json'
|
|
304
308
|
end
|
|
305
309
|
end
|
|
306
310
|
end
|
data/lib/synvert/version.rb
CHANGED
data/synvert.gemspec
CHANGED
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
spec.require_paths = ['lib']
|
|
21
21
|
spec.post_install_message = 'Please run `synvert --sync` first to sync snippets remotely.'
|
|
22
22
|
|
|
23
|
-
spec.add_runtime_dependency 'synvert-core', '>= 0.
|
|
23
|
+
spec.add_runtime_dependency 'synvert-core', '>= 0.25.0'
|
|
24
24
|
|
|
25
25
|
spec.add_development_dependency 'bundler'
|
|
26
26
|
spec.add_development_dependency 'rake'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: synvert
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.15.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: 2021-03-
|
|
11
|
+
date: 2021-03-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: synvert-core
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 0.25.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 0.25.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|