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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1c67ec2f25a9e357beea399dbdf83f6d4a46a2e3a3729843e2cca128a662b73
4
- data.tar.gz: 4327ecc60f5d4681c2f03bd6e63c2e854a3f9f278c363a71ef9a48126d82320b
3
+ metadata.gz: fa3d4c32999b086b2c6667043c3ed62fff147badcee5d3346a754fa00d510352
4
+ data.tar.gz: d6a24917c14a329e64fb54142c9e65ba33c2b989eca4ba51472692735d7d1682
5
5
  SHA512:
6
- metadata.gz: ce66beb043128746d3771c38a13887e5bd560246c925c5a1570180878b6b86694a4c83074cb5982adfc21f9a930b13b63434d551050270f92f27e485c3500ac5
7
- data.tar.gz: 0550f8223f2f21f4639e5c63dc475767a281c710b06291c69783f68a22441cfb0d8f92f068c22d24d436521cab40c5bcc90d9836b951b3e0e27835be45443561
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: [], snippet_names: [] }
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
- @options[:snippet_names].each do |snippet_name|
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
- '--run SNIPPET_NAMES',
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(default_snippets_path, 'lib/**/*.rb')).each { |file| require file }
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 default_snippets_path
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
- else
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
- end
170
- end
171
-
172
- def list_all_rewriters_in_json
173
- if Core::Rewriter.availables.empty?
174
- puts 'There is no snippet under ~/.synvert, please run `synvert --sync` to fetch snippets.'
175
- return
176
- end
177
-
178
- output = []
179
- Core::Rewriter.availables.each do |group, rewriters|
180
- rewriters.each do |name, rewriter|
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
- puts JSON.generate(output)
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(default_snippets_path, "lib/#{@options[:snippet_name]}.rb"))
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
- group, name = @options[:snippet_name].split('/')
228
- rewriter = Core::Rewriter.fetch(group, name)
229
- if rewriter
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(default_snippets_path).sync
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, please install synvert-core #{core_version}"
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 convert Foo to Bar
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 default_snippets_path
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
- VERSION = '0.12.0'
4
+ VERSION = '0.15.0'
5
5
  end
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.20.1'
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.12.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-01 00:00:00.000000000 Z
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.20.1
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.20.1
26
+ version: 0.25.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement