synvert 0.12.1 → 0.16.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 +16 -1
- data/README.md +12 -2
- data/lib/synvert/cli.rb +70 -52
- 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: 1d737afecd60f57b9f37667899020a9a228af5ea1aa6e195686e4da8c5e201ea
|
4
|
+
data.tar.gz: 070115ee46ab5de7a6dd3b24bf39ed4a62a5f5b00c7b1a897f7378cc2b379f39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ddc5f29a5f0dc24a13ed097e0814f4a4eed585185420010b6fdbfcdc5822d4b1ba769a094d46e61f494c10866c58b83126f6fda4c768814a9ace2a7b9b3c5c1
|
7
|
+
data.tar.gz: 0dc29b3b96c5aaeaf3479d28e1fe7f33b2a95f76205665bd6c4ec6122d16949e829713f9dd0ff6d92170c4c01e8cbe4d2de52fa5399459c7bb3f0fdd4edad616
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,22 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
-
## 0.
|
3
|
+
## 0.16.0 (2021-03-24)
|
4
4
|
|
5
|
+
* Add `ruby_version` and `gem_spec` to json output
|
6
|
+
|
7
|
+
## 0.15.0 (2021-03-23)
|
8
|
+
|
9
|
+
* Fix reduce on empty array
|
10
|
+
* Update synvert-core when syncing snippets
|
11
|
+
|
12
|
+
## 0.14.0 (2021-03-13)
|
13
|
+
|
14
|
+
* Add CLI option `--format`
|
15
|
+
* Run one snippet once
|
16
|
+
|
17
|
+
## 0.13.0 (2021-03-02)
|
18
|
+
|
19
|
+
* Use `ENV['SYNVERT_SNIPPETS_HOME']` to change default snippets home
|
5
20
|
* Display snippet source code for showing a snippet
|
6
21
|
|
7
22
|
## 0.12.0 (2021-03-01)
|
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,15 +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
100
|
opts.on '-g', '--generate NEW_SNIPPET_NAME', 'generate a new snippet' do |name|
|
118
101
|
@options[:command] = 'generate'
|
119
102
|
@options[:snippet_name] = name
|
120
103
|
end
|
104
|
+
opts.on '-f', '--format FORMAT', 'output format' do |format|
|
105
|
+
@options[:format] = format
|
106
|
+
end
|
121
107
|
opts.on '-v', '--version', 'show this version' do
|
122
108
|
puts "#{VERSION} (with synvert-core #{Core::VERSION} and parser #{Parser::VERSION})"
|
123
109
|
exit
|
@@ -137,7 +123,7 @@ module Synvert
|
|
137
123
|
|
138
124
|
# Load all rewriters.
|
139
125
|
def load_rewriters
|
140
|
-
Dir.glob(File.join(
|
126
|
+
Dir.glob(File.join(default_snippets_home, 'lib/**/*.rb')).each { |file| require file }
|
141
127
|
|
142
128
|
@options[:custom_snippet_paths].each do |snippet_path|
|
143
129
|
if /^http/.match?(snippet_path)
|
@@ -148,7 +134,7 @@ module Synvert
|
|
148
134
|
end
|
149
135
|
end
|
150
136
|
rescue StandardError
|
151
|
-
FileUtils.rm_rf
|
137
|
+
FileUtils.rm_rf default_snippets_home
|
152
138
|
retry
|
153
139
|
end
|
154
140
|
|
@@ -156,7 +142,10 @@ module Synvert
|
|
156
142
|
def list_available_rewriters
|
157
143
|
if Core::Rewriter.availables.empty?
|
158
144
|
puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.'
|
159
|
-
|
145
|
+
return
|
146
|
+
end
|
147
|
+
|
148
|
+
if plain_output?
|
160
149
|
Core::Rewriter.availables.each do |group, rewriters|
|
161
150
|
puts group
|
162
151
|
rewriters.each do |name, _rewriter|
|
@@ -164,29 +153,25 @@ module Synvert
|
|
164
153
|
end
|
165
154
|
end
|
166
155
|
puts
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
name: name,
|
183
|
-
description: rewriter.description,
|
184
|
-
sub_snippets: rewriter.sub_snippets.map(&:name)
|
185
|
-
}
|
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
|
+
item = {
|
162
|
+
group: group,
|
163
|
+
name: name,
|
164
|
+
description: rewriter.description,
|
165
|
+
sub_snippets: rewriter.sub_snippets.map(&:name)
|
166
|
+
}
|
167
|
+
item[:ruby_version] = rewriter.ruby_version.version if rewriter.ruby_version
|
168
|
+
item[:gem_spec] = { name: rewriter.gem_spec.name, version: rewriter.gem_spec.version } if rewriter.gem_spec
|
169
|
+
output << item
|
170
|
+
end
|
186
171
|
end
|
187
|
-
end
|
188
172
|
|
189
|
-
|
173
|
+
puts JSON.generate(output)
|
174
|
+
end
|
190
175
|
end
|
191
176
|
|
192
177
|
# Open one rewriter.
|
@@ -194,7 +179,7 @@ module Synvert
|
|
194
179
|
editor = [ENV['SYNVERT_EDITOR'], ENV['EDITOR']].find { |e| !e.nil? && !e.empty? }
|
195
180
|
return puts 'To open a synvert snippet, set $EDITOR or $SYNVERT_EDITOR' unless editor
|
196
181
|
|
197
|
-
path = File.expand_path(File.join(
|
182
|
+
path = File.expand_path(File.join(default_snippets_home, "lib/#{@options[:snippet_name]}.rb"))
|
198
183
|
if File.exist? path
|
199
184
|
system editor, path
|
200
185
|
else
|
@@ -222,7 +207,7 @@ module Synvert
|
|
222
207
|
|
223
208
|
# Show and print one rewriter.
|
224
209
|
def show_rewriter
|
225
|
-
path = File.expand_path(File.join(
|
210
|
+
path = File.expand_path(File.join(default_snippets_home, "lib/#{@options[:snippet_name]}.rb"))
|
226
211
|
if File.exist?(path)
|
227
212
|
puts File.read(path)
|
228
213
|
else
|
@@ -232,11 +217,36 @@ module Synvert
|
|
232
217
|
|
233
218
|
# sync snippets
|
234
219
|
def sync_snippets
|
235
|
-
Snippet.new(
|
220
|
+
Snippet.new(default_snippets_home).sync
|
236
221
|
puts 'synvert snippets are synced'
|
237
222
|
core_version = Snippet.fetch_core_version
|
238
223
|
if Gem::Version.new(core_version) > Gem::Version.new(Synvert::Core::VERSION)
|
239
|
-
puts "synvert-core is updated,
|
224
|
+
puts "synvert-core is updated, installing synvert-core #{core_version}"
|
225
|
+
system('gem install synvert-core')
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
# run snippets
|
230
|
+
def run_snippet
|
231
|
+
snippet_name = @options[:snippet_name]
|
232
|
+
if plain_output?
|
233
|
+
puts "===== #{snippet_name} started ====="
|
234
|
+
group, name = snippet_name.split('/')
|
235
|
+
rewriter = Core::Rewriter.call group, name
|
236
|
+
rewriter.warnings.each do |warning|
|
237
|
+
puts '[Warn] ' + warning.message
|
238
|
+
end
|
239
|
+
puts rewriter.todo if rewriter.todo
|
240
|
+
puts "===== #{snippet_name} done ====="
|
241
|
+
elsif json_output?
|
242
|
+
group, name = snippet_name.split('/')
|
243
|
+
rewriter = Core::Rewriter.call group, name
|
244
|
+
output = {
|
245
|
+
affected_files: rewriter.affected_files.union(rewriter.sub_snippets.sum([], &:affected_files)).to_a,
|
246
|
+
warnings: rewriter.warnings.union(rewriter.sub_snippets.sum([], &:warnings)),
|
247
|
+
todo: rewriter.todo
|
248
|
+
}
|
249
|
+
puts JSON.generate(output)
|
240
250
|
end
|
241
251
|
end
|
242
252
|
|
@@ -250,7 +260,7 @@ module Synvert
|
|
250
260
|
|
251
261
|
Synvert::Rewriter.new '#{group}', '#{name}' do
|
252
262
|
description <<~EOS
|
253
|
-
It
|
263
|
+
It converts Foo to Bar
|
254
264
|
|
255
265
|
```ruby
|
256
266
|
Foo
|
@@ -288,8 +298,16 @@ module Synvert
|
|
288
298
|
File.write("spec/#{group}/#{name}_spec.rb", spec_content)
|
289
299
|
end
|
290
300
|
|
291
|
-
def
|
292
|
-
File.join(ENV['HOME'], '.synvert')
|
301
|
+
def default_snippets_home
|
302
|
+
ENV['SYNVERT_SNIPPETS_HOME'] || File.join(ENV['HOME'], '.synvert')
|
303
|
+
end
|
304
|
+
|
305
|
+
def plain_output?
|
306
|
+
@options[:format] == 'plain'
|
307
|
+
end
|
308
|
+
|
309
|
+
def json_output?
|
310
|
+
@options[:format] == 'json'
|
293
311
|
end
|
294
312
|
end
|
295
313
|
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.1'
|
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.16.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-24 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.1
|
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.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|