synvert 0.19.1 → 0.20.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: 62c51dd8a7a0d58c47644593a0a85a14ab201c8a842187f7fc1bb0b9c185c798
4
- data.tar.gz: 72dc55fe685d1149ab875eb04a9dfd81d3f199d2930de46589a4e4d9b0d9173f
3
+ metadata.gz: 0fb489331d776e367ae6be1c1ab39330b59419b07b9db40e1c6ea215fd612338
4
+ data.tar.gz: fbbb3fc50e1c05bc67aef081b4490e49f1c839dc24eb76941e2487f2cb240cd3
5
5
  SHA512:
6
- metadata.gz: c2a3eee39999e331d9d3f24b6fe0c6fc1c512cd9ace5d03a23c111c29a212dad3f80f325d0079fff7c0d302d9ad8e077f546ace95e5dfed53d00feef934504d1
7
- data.tar.gz: 40f6e3423153314c72ae434e6abf34640d08313909d2389f9355e410d02ddf312bff4a51d602ac7ea0b5eed514c6b8a0cc515a9c973911c723256a2d49128a06
6
+ metadata.gz: dad0c74122ab91f6a05907af7bca9fb3badbb3a137a6914227508814de3682f6578975bd9a2aa51a577881ccb6c22e837b43b2b36c01769eb703f63b2eb1e9a2
7
+ data.tar.gz: ff5309c3d2ca47e01be1a02aeb5ab9e3f1f6d0ef1c8ea8dc5fe3e8bcf03afeda5035aebf0c4fc26acf62e44097999294fab431936a665e3726ba9a6314522641
@@ -19,7 +19,7 @@ jobs:
19
19
  runs-on: ubuntu-latest
20
20
  strategy:
21
21
  matrix:
22
- ruby-version: ['2.4', '2.5', '2.6', '2.7', '3.0']
22
+ ruby-version: ['2.6', '2.7', '3.0', '3.1']
23
23
 
24
24
  steps:
25
25
  - uses: actions/checkout@v2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.20.0 (2022-08-20)
4
+
5
+ * Rename `load_rewriters` to `read_rewriters`
6
+ * Run a snippet from remote url or local file path
7
+
8
+ ## 0.19.3 (2022-07-18)
9
+
10
+ * Require json
11
+ * update `synvert-core` to 1.5.0
12
+
13
+ ## 0.19.2 (2021-12-15)
14
+
15
+ * List sub_snippets group and name
16
+
3
17
  ## 0.19.1 (2021-10-23)
4
18
 
5
19
  * Make URI.open work in ruby 2.4
data/README.md CHANGED
@@ -2,67 +2,124 @@
2
2
 
3
3
  <img src="https://synvert.xinminlabs.com/img/logo_96.png" alt="logo" width="32" height="32" />
4
4
 
5
+ [![AwesomeCode Status for xinminlabs/synvert-ruby](https://awesomecode.io/projects/47cd9805-171c-4c61-b927-baa46cd4020a/status)](https://awesomecode.io/repos/xinminlabs/synvert-ruby)
5
6
  ![Main workflow](https://github.com/xinminlabs/synvert-ruby/actions/workflows/main.yml/badge.svg)
6
- [![Coverage Status](https://coveralls.io/repos/xinminlabs/synvert/badge.svg?branch=master)](https://coveralls.io/r/xinminlabs/synvert)
7
7
  [![Gem Version](https://badge.fury.io/rb/synvert.svg)](http://badge.fury.io/rb/synvert)
8
8
 
9
- Synvert = syntax + convert, makes it easy to convert ruby code
10
- automatically.
9
+ `synvert-ruby` is a command tool to rewrite ruby code automatically, it depends on `synvert-core-ruby` and `synvert-snippets-ruby`.
11
10
 
12
- Synvert is composed by synvert-core and synvert-snippets.
11
+ [synvert-core-ruby](https://github.com/xinminlabs/synvert-core-ruby) provides a set of DSLs to rewrite ruby code.
13
12
 
14
- [synvert-core][1] provides a dsl to convert ruby code.
15
-
16
- [synvert-snippets][2] lists all snippets to convert ruby code based on
17
- synvert-core.
13
+ [synvert-snippets-ruby](https://github.com/xinminlabs/synvert-snippets-ruby) provides official snippets to rewrite ruby code.
18
14
 
19
15
  ## Installation
20
16
 
21
- Install it using rubygems
17
+ To install the latest version, run
18
+
22
19
 
23
20
  ```
24
21
  $ gem install synvert
25
22
  ```
26
23
 
27
- then run
24
+ This will also install `synvert-core-ruby`.
25
+
26
+ Before using synvert, you need to sync all official snippets first.
28
27
 
29
28
  ```
30
29
  $ synvert-ruby --sync
31
30
  ```
32
31
 
32
+ Then you can use synvert to rewrite your ruby code, e.g.
33
+
34
+ ```
35
+ $ synvert-ruby -r factory_bot/use_short_syntax
36
+ ```
37
+
33
38
  ## Usage
34
39
 
35
40
  ```
36
41
  $ synvert-ruby -h
37
42
  Usage: synvert-ruby [project_path]
38
- -d, --load SNIPPET_PATHS load custom snippets, snippet paths can be local file path or remote http url
39
43
  -l, --list list all available snippets
40
44
  -q, --query QUERY query specified snippets
41
- --skip FILE_PATTERNS skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb
42
- -s, --show SNIPPET_NAME show specified snippet description
45
+ -s, --show SNIPPET_NAME show specified snippet description, SNIPPET_NAME is combined by group and name, e.g. ruby/new_hash_syntax
46
+ -o, --open SNIPPET_NAME Open a snippet
47
+ -g, --generate NEW_SNIPPET_NAME generate a new snippet
43
48
  --sync sync snippets
44
- -r, --run SNIPPET_NAMES run specified snippets
49
+ --execute execute snippet
50
+ -r, --run SNIPPET_NAME run specified snippet, e.g. ruby/new_hash_syntax, or remote url, or local file path
51
+ --show-run-process show processing files when running a snippet
52
+ --skip FILE_PATTERNS skip specified files or directories, separated by comma, e.g. app/models/post.rb,vendor/plugins/**/*.rb
53
+ -f, --format FORMAT output format
45
54
  -v, --version show this version
46
55
  ```
47
56
 
48
- e.g.
57
+ #### Sync snippets
58
+
59
+ [Official Snippets](https://github.com/xinminlabs/synvert-snippets-ruby) are available on github,
60
+ you can sync them any time you want.
61
+
62
+ ```
63
+ $ synvert-ruby --sync
64
+ ```
65
+
66
+ #### List snippets
67
+
68
+ List all available snippets
69
+
70
+ ```
71
+ $ synvert-ruby -l
72
+
73
+ $ synvert-ruby --list --form json
74
+ ```
75
+
76
+ #### Show a snippet
77
+
78
+ Describe what a snippet does.
79
+
80
+ ```
81
+ $ synvert-ruby -s factory_bot/use_short_syntax
82
+ ```
83
+
84
+ #### Open a snippet
85
+
86
+ Open a snippet in your editor, editor is defined in
87
+ `ENV['SNIPPET_EDITOR']` or `ENV['EDITOR']`
88
+
89
+ ```
90
+ $ synvert-ruby -o factory_bot/use_short_syntax
91
+ ```
92
+
93
+ #### Run a snippet
94
+
95
+ Run a snippet, analyze and then rewrite code.
96
+
97
+ ```
98
+ $ synvert-ruby -r factory_bot/use_short_syntax ~/Sites/xinminlabs/synvert-core-ruby
99
+ ```
100
+
101
+ run a snippet from remote url
49
102
 
50
103
  ```
51
- $ synvert-ruby -r factory_girl/use_short_syntax,rails/upgrade_3_2_to_4_0 ~/Sites/railsbp/rails-bestpractices.com
104
+ $ synvert-ruby -r https://raw.githubusercontent.com/xinminlabs/synvert-snippets-ruby/master/lib/factory_bot/use_short_syntax.rb ~/sites/xinminlabs/synvert-core-ruby
52
105
  ```
53
106
 
54
- ## Documentation
107
+ run a snippet from local path
55
108
 
56
- [https://synvert.xinminlabs.com][3]
109
+ ```
110
+ $ synvert-ruby -r ~/.synvert-ruby/lib/factory_bot/use_short_syntax.rb ~/sites/xinminlabs/synvert-core-ruby
111
+ ```
57
112
 
58
- ## Contributing
113
+ Show processing files when running a snippet.
59
114
 
60
- 1. Fork it
61
- 2. Create your feature branch (`git checkout -b my-new-feature`)
62
- 3. Commit your changes (`git commit -am 'Add some feature'`)
63
- 4. Push to the branch (`git push origin my-new-feature`)
64
- 5. Create new Pull Request
115
+ ```
116
+ $ synvert-ruby -r factory_bot/use_short_syntax --show-run-process ~/Sites/xinminlabs/synvert-core-ruby
117
+ ```
118
+
119
+ #### Generate a snippet
120
+
121
+ Generate a new snippet
65
122
 
66
- [1]: https://github.com/xinminlabs/synvert-core-ruby/
67
- [2]: https://github.com/xinminlabs/synvert-snippets-ruby/
68
- [3]: https://synvert.xinminlabs.com
123
+ ```
124
+ $ synvert-ruby -g ruby/convert_foo_to_bar
125
+ ```
data/lib/synvert/cli.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'optparse'
4
+ require 'json'
5
+ require 'uri'
6
+ require 'open-uri'
4
7
 
5
8
  module Synvert
6
9
  # Synvert command line interface.
@@ -15,7 +18,7 @@ module Synvert
15
18
 
16
19
  # Initialize a CLI.
17
20
  def initialize
18
- @options = { command: 'run', custom_snippet_paths: [], format: 'plain' }
21
+ @options = { command: 'run', format: 'plain' }
19
22
  end
20
23
 
21
24
  # Run the CLI.
@@ -26,12 +29,12 @@ module Synvert
26
29
 
27
30
  case @options[:command]
28
31
  when 'list'
29
- load_rewriters
32
+ read_rewriters
30
33
  list_available_rewriters
31
34
  when 'open'
32
35
  open_rewriter
33
36
  when 'query'
34
- load_rewriters
37
+ read_rewriters
35
38
  query_available_rewriters
36
39
  when 'show'
37
40
  show_rewriter
@@ -42,9 +45,19 @@ module Synvert
42
45
  when 'execute'
43
46
  execute_snippet
44
47
  else
45
- # run
46
- load_rewriters
47
- run_snippet
48
+ if /^http/.match?(@options[:snippet_name])
49
+ uri = URI.parse(@options[:snippet_name])
50
+ eval(uri.open.read)
51
+ snippet_name = get_last_snippet_name
52
+ run_snippet(snippet_name)
53
+ elsif File.exists?(@options[:snippet_name])
54
+ require(@options[:snippet_name])
55
+ snippet_name = get_last_snippet_name
56
+ run_snippet(snippet_name)
57
+ else
58
+ read_rewriters
59
+ run_snippet(@options[:snippet_name])
60
+ end
48
61
  end
49
62
  true
50
63
  rescue SystemExit
@@ -66,11 +79,6 @@ module Synvert
66
79
  optparse =
67
80
  OptionParser.new do |opts|
68
81
  opts.banner = 'Usage: synvert-ruby [project_path]'
69
- opts.on '-d',
70
- '--load SNIPPET_PATHS',
71
- 'load custom snippets, snippet paths can be local file path or remote http url' do |snippet_paths|
72
- @options[:custom_snippet_paths] = snippet_paths.split(',').map(&:strip)
73
- end
74
82
  opts.on '-l', '--list', 'list all available snippets' do
75
83
  @options[:command] = 'list'
76
84
  end
@@ -98,7 +106,7 @@ module Synvert
98
106
  opts.on '--execute', 'execute snippet' do
99
107
  @options[:command] = 'execute'
100
108
  end
101
- opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax' do |snippet_name|
109
+ opts.on '-r', '--run SNIPPET_NAME', 'run specified snippet, e.g. ruby/new_hash_syntax, or remote url, or local file path' do |snippet_name|
102
110
  @options[:snippet_name] = snippet_name
103
111
  end
104
112
  opts.on '--show-run-process', 'show processing files when running a snippet' do
@@ -128,21 +136,9 @@ module Synvert
128
136
  end
129
137
  end
130
138
 
131
- # Load all rewriters.
132
- def load_rewriters
139
+ # read all rewriters.
140
+ def read_rewriters
133
141
  Dir.glob(File.join(default_snippets_home, 'lib/**/*.rb')).each { |file| require file }
134
-
135
- @options[:custom_snippet_paths].each do |snippet_path|
136
- if /^http/.match?(snippet_path)
137
- uri = URI.parse snippet_path
138
- eval(uri.read)
139
- else
140
- require snippet_path
141
- end
142
- end
143
- rescue StandardError
144
- FileUtils.rm_rf default_snippets_home
145
- retry
146
142
  end
147
143
 
148
144
  # List and print all available rewriters.
@@ -165,12 +161,11 @@ module Synvert
165
161
  Core::Rewriter.availables.each do |group, rewriters|
166
162
  rewriters.each do |name, rewriter|
167
163
  rewriter.process_with_sandbox
168
- item = {
169
- group: group,
170
- name: name,
171
- description: rewriter.description,
172
- sub_snippets: rewriter.sub_snippets.map(&:name)
173
- }
164
+ sub_snippets =
165
+ rewriter.sub_snippets.map { |sub_snippet|
166
+ { group: sub_snippet.group, name: sub_snippet.name }
167
+ }
168
+ item = { group: group, name: name, description: rewriter.description, sub_snippets: sub_snippets }
174
169
  item[:ruby_version] = rewriter.ruby_version.version if rewriter.ruby_version
175
170
  item[:gem_spec] = { name: rewriter.gem_spec.name, version: rewriter.gem_spec.version } if rewriter.gem_spec
176
171
  output << item
@@ -234,8 +229,7 @@ module Synvert
234
229
  end
235
230
 
236
231
  # run snippets
237
- def run_snippet
238
- snippet_name = @options[:snippet_name]
232
+ def run_snippet(snippet_name)
239
233
  if plain_output?
240
234
  puts "===== #{snippet_name} started ====="
241
235
  group, name = snippet_name.split('/')
@@ -338,5 +332,12 @@ module Synvert
338
332
  def json_output?
339
333
  @options[:format] == 'json'
340
334
  end
335
+
336
+ # get the last registered snippet name
337
+ def get_last_snippet_name
338
+ group = Rewriter.availables.keys.last
339
+ name = Rewriter.availables[group].keys.last
340
+ return [group, name].join("/")
341
+ end
341
342
  end
342
343
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Synvert
4
- VERSION = '0.19.1'
4
+ VERSION = '0.20.0'
5
5
  end
data/synvert-ruby.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-ruby --sync` first to sync snippets remotely.'
22
22
 
23
- spec.add_runtime_dependency 'synvert-core', '>= 0.58.2'
23
+ spec.add_runtime_dependency 'synvert-core', '>= 1.5.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.19.1
4
+ version: 0.20.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-10-22 00:00:00.000000000 Z
11
+ date: 2022-08-20 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.58.2
19
+ version: 1.5.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.58.2
26
+ version: 1.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  requirements: []
128
- rubygems_version: 3.2.22
128
+ rubygems_version: 3.3.7
129
129
  signing_key:
130
130
  specification_version: 4
131
131
  summary: synvert = syntax + convert.