synvert 0.12.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
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