synvert-core 1.25.0 → 1.26.1

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: 69a5a31926536922320b7184cae70096bba437729c6c4dbe6c0bb2ab98d56e43
4
- data.tar.gz: afeed86dae83348eccb85859dcc907250ff1e5361d69b7a71839cb88c1fc3e79
3
+ metadata.gz: 76425d306537f25b4323935112165ad6bbc02714793e39d7287ee97b884f2284
4
+ data.tar.gz: 276cb3ec3ee5685b3233b51105ac1de4233927f3e7bcd89bac01e5d761aa5869
5
5
  SHA512:
6
- metadata.gz: 50d06d1c664c06fac3e7bc163226c3e98305bd26d802919ce73003ad4e8d5e1cf441d2559b32aeada9266d48cb7d3365ef2d39fa37a934bd2e0fe2ad489693ee
7
- data.tar.gz: 34915fcbb4252d66c9b25318b96e1f4bf6f4a8881f8d85229bc7f6f5cbf80ff50aed3f774cddcbab10495ef865daff0c6d40fd6608382e9e97d7a42b16ca6fc3
6
+ metadata.gz: d0e36b19d07fb73b93898b48833e5419e1f5e258da0c9660cf8584efdb142e6d4495a9a47105884ba558b6f2a2070c83eebfe54aee22f64d5eb4cfd3a3c712e8
7
+ data.tar.gz: 6058cc41e9ac61a497d1ddb0f8cb642a48797d67ace1a0e7d513fbae1cce9a7fa50d4a35162caf3e396e0630f5ac394bd63d0a75a83f0a1012a7ef9d8b4a18fc
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.26.1 (2023-05-06)
4
+
5
+ * Compact test results
6
+ * Fix erb regex
7
+
8
+ ## 1.26.0 (2023-04-18)
9
+
10
+ * `add_file` and `remove_file` work for test
11
+ * Add `indent` dsl
12
+ * Add `type` to Action
13
+ * Update `node_mutation` to 1.15.3
14
+
3
15
  ## 1.25.0 (2023-04-17)
4
16
 
5
17
  * Update `wrap` dsl
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- synvert-core (1.25.0)
4
+ synvert-core (1.26.1)
5
5
  activesupport (< 7.0.0)
6
- node_mutation (>= 1.15.1)
6
+ node_mutation (>= 1.15.3)
7
7
  node_query (>= 1.12.1)
8
8
  parallel
9
9
  parser
@@ -39,7 +39,7 @@ GEM
39
39
  guard (~> 2.1)
40
40
  guard-compat (~> 1.1)
41
41
  rspec (>= 2.99.0, < 4.0)
42
- i18n (1.12.0)
42
+ i18n (1.13.0)
43
43
  concurrent-ruby (~> 1.0)
44
44
  listen (3.7.1)
45
45
  rb-fsevent (~> 0.10, >= 0.10.3)
@@ -48,13 +48,13 @@ GEM
48
48
  method_source (1.0.0)
49
49
  minitest (5.18.0)
50
50
  nenv (0.3.0)
51
- node_mutation (1.15.1)
51
+ node_mutation (1.15.3)
52
52
  node_query (1.12.1)
53
53
  notiffany (0.1.3)
54
54
  nenv (~> 0.1)
55
55
  shellany (~> 0.0)
56
- parallel (1.22.1)
57
- parser (3.2.2.0)
56
+ parallel (1.23.0)
57
+ parser (3.2.2.1)
58
58
  ast (~> 2.4.1)
59
59
  parser_node_ext (1.0.0)
60
60
  parser
@@ -82,7 +82,7 @@ GEM
82
82
  thor (1.2.1)
83
83
  tzinfo (2.0.6)
84
84
  concurrent-ruby (~> 1.0)
85
- zeitwerk (2.6.7)
85
+ zeitwerk (2.6.8)
86
86
 
87
87
  PLATFORMS
88
88
  ruby
data/README.md CHANGED
@@ -88,6 +88,7 @@ Actions:
88
88
 
89
89
  * [append](https://xinminlabs.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#append-instance_method) - append the code to the bottom of current node body
90
90
  * [prepend](https://xinminlabs.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#prepend-instance_method) - prepend the code to the bottom of current node body
91
+ * [indent](https://xinminlabs.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#indent-instance_method) - indent code
91
92
  * [insert](https://xinminlabs.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#insert-instance_method) - insert code
92
93
  * [insert_after](https://xinminlabs.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#insert_after-instance_method) - insert the code next to the current node
93
94
  * [insert_before](https://xinminlabs.github.io/synvert-core-ruby/Synvert/Core/Rewriter/Instance.html#insert_before-instance_method) - insert the code previous to the current node
@@ -10,8 +10,8 @@ module Synvert::Core
10
10
  # @return [String] encoded ruby code.
11
11
  def encode(source)
12
12
  source.gsub(/%>.*?<%=?/m) { |str| ';' + replace_all_code_but_white_space_characters(str[1..-1]) }
13
- .sub(/^.*?<%=?/m) { |str| replace_all_code_but_white_space_characters(str) }
14
- .sub(/%>.*?$/m) { |str| ';' + replace_all_code_but_white_space_characters(str[1..-1]) }
13
+ .sub(/^.*<%=?/m) { |str| replace_all_code_but_white_space_characters(str) }
14
+ .sub(/%>.*$/m) { |str| ';' + replace_all_code_but_white_space_characters(str[1..-1]) }
15
15
  end
16
16
 
17
17
  # Generate an empty proc.
@@ -11,6 +11,7 @@ module Synvert::Core
11
11
  def initialize(node, erb_source)
12
12
  super(node, nil)
13
13
  @erb_source = erb_source
14
+ @type = :insert
14
15
  end
15
16
 
16
17
  # The new erb expr code.
@@ -381,6 +381,20 @@ module Synvert::Core
381
381
  @current_mutation.wrap(@current_node, prefix: prefix, suffix: suffix, newline: newline)
382
382
  end
383
383
 
384
+ # It indent the code of current node.
385
+ # @example
386
+ # # class Foobar
387
+ # # end
388
+ # # =>
389
+ # # class Foobar
390
+ # # end
391
+ # within_node type: 'class' do
392
+ # indent
393
+ # end
394
+ def indent(tab_size: 1)
395
+ @current_mutation.indent(@current_node, tab_size: tab_size)
396
+ end
397
+
384
398
  # No operation.
385
399
  def noop
386
400
  @current_mutation.noop(@current_node)
@@ -264,6 +264,14 @@ module Synvert::Core
264
264
  def add_file(filename, content)
265
265
  return unless @options[:run_instance]
266
266
 
267
+ unless @options[:write_to_file]
268
+ result = NodeMutation::Result.new(affected: true, conflicted: false)
269
+ result.actions = [NodeMutation::Struct::Action.new(:add_file, 0, 0, content)]
270
+ result.file_path = filename
271
+ @test_results << result
272
+ return
273
+ end
274
+
267
275
  filepath = File.join(Configuration.root_path, filename)
268
276
  if File.exist?(filepath)
269
277
  puts "File #{filepath} already exists."
@@ -283,6 +291,14 @@ module Synvert::Core
283
291
  def remove_file(filename)
284
292
  return unless @options[:run_instance]
285
293
 
294
+ unless @options[:write_to_file]
295
+ result = NodeMutation::Result.new(affected: true, conflicted: false)
296
+ result.actions = [NodeMutation::Struct::Action.new(:remove_file, 0, -1)]
297
+ result.file_path = filename
298
+ @test_results << result
299
+ return
300
+ end
301
+
286
302
  file_path = File.join(Configuration.root_path, filename)
287
303
  File.delete(file_path) if File.exist?(file_path)
288
304
  end
@@ -367,7 +383,7 @@ module Synvert::Core
367
383
  end
368
384
 
369
385
  def merge_test_results(results)
370
- @test_results += results.select { |result| result.affected? }
386
+ @test_results += results.compact.select { |result| result.affected? }
371
387
  end
372
388
  end
373
389
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '1.25.0'
5
+ VERSION = '1.26.1'
6
6
  end
7
7
  end
@@ -217,11 +217,11 @@ module Synvert::Core
217
217
  EOS
218
218
  proc = Engine::Haml.generate_transform_proc(encoded_source)
219
219
  actions = [
220
- NodeMutation::Struct::Action.new(50, 55, ''),
220
+ NodeMutation::Struct::Action.new(:delete, 50, 55, ''),
221
221
  # first end position is 69
222
- NodeMutation::Struct::Action.new(100, 105, ''),
222
+ NodeMutation::Struct::Action.new(:delete, 100, 105, ''),
223
223
  # second end position is 111
224
- NodeMutation::Struct::Action.new(120, 125, '')
224
+ NodeMutation::Struct::Action.new(:delete, 120, 125, '')
225
225
  ]
226
226
  proc.call(actions)
227
227
  expect(actions.first.start).to eq 50
@@ -204,11 +204,11 @@ module Synvert::Core
204
204
  EOS
205
205
  proc = Engine::Slim.generate_transform_proc(encoded_source)
206
206
  actions = [
207
- NodeMutation::Struct::Action.new(50, 55, ''),
207
+ NodeMutation::Struct::Action.new(:delete, 50, 55, ''),
208
208
  # first end position is 69
209
- NodeMutation::Struct::Action.new(100, 105, ''),
209
+ NodeMutation::Struct::Action.new(:delete, 100, 105, ''),
210
210
  # second end position is 111
211
- NodeMutation::Struct::Action.new(120, 125, '')
211
+ NodeMutation::Struct::Action.new(:delete, 120, 125, '')
212
212
  ]
213
213
  proc.call(actions)
214
214
  expect(actions.first.start).to eq 50
@@ -245,6 +245,16 @@ module Synvert::Core
245
245
  instance.wrap prefix: 'module Foobar', suffix: 'end', newline: true
246
246
  end
247
247
 
248
+ it 'parses indent' do
249
+ instance.instance_variable_set(:@current_mutation, double)
250
+ instance.current_node = double
251
+ expect(instance.instance_variable_get(:@current_mutation)).to receive(:indent).with(
252
+ instance.current_node,
253
+ tab_size: 1
254
+ )
255
+ instance.indent
256
+ end
257
+
248
258
  it 'parses noop' do
249
259
  instance.instance_variable_set(:@current_mutation, double)
250
260
  instance.current_node = double
@@ -430,8 +440,8 @@ module Synvert::Core
430
440
  results = instance.test
431
441
  expect(results.file_path).to eq 'spec/models/post_spec.rb'
432
442
  expect(results.actions).to eq [
433
- NodeMutation::Struct::Action.new(35, 59, 'create :user'),
434
- NodeMutation::Struct::Action.new(69, 105, 'create :post, user: user')
443
+ NodeMutation::Struct::Action.new(:replace, 35, 59, 'create :user'),
444
+ NodeMutation::Struct::Action.new(:replace, 69, 105, 'create :post, user: user')
435
445
  ]
436
446
  end
437
447
 
@@ -469,7 +479,7 @@ module Synvert::Core
469
479
  allow(File).to receive(:read).with('./app/views/posts/_form.html.erb', encoding: 'UTF-8').and_return(input)
470
480
  result = instance.test
471
481
  expect(result.file_path).to eq 'app/views/posts/_form.html.erb'
472
- expect(result.actions).to eq [NodeMutation::Struct::Action.new(2, 2, '=')]
482
+ expect(result.actions).to eq [NodeMutation::Struct::Action.new(:insert, 2, 2, '=')]
473
483
  end
474
484
 
475
485
  it 'updates haml file' do
@@ -491,8 +501,9 @@ module Synvert::Core
491
501
  result = instance.test
492
502
  expect(result.file_path).to eq 'app/views/posts/_form.html.haml'
493
503
  expect(result.actions).to eq [
494
- NodeMutation::Struct::Action.new("= form_for ".length, "= form_for @post".length, 'post'),
504
+ NodeMutation::Struct::Action.new(:replace, "= form_for ".length, "= form_for @post".length, 'post'),
495
505
  NodeMutation::Struct::Action.new(
506
+ :replace,
496
507
  "= form_for @post do |f|\n= form_for ".length,
497
508
  "= form_for @post do |f|\n= form_for @post".length,
498
509
  'post'
@@ -519,8 +530,9 @@ module Synvert::Core
519
530
  result = instance.test
520
531
  expect(result.file_path).to eq 'app/views/posts/_form.html.slim'
521
532
  expect(result.actions).to eq [
522
- NodeMutation::Struct::Action.new("= form_for ".length, "= form_for @post".length, 'post'),
533
+ NodeMutation::Struct::Action.new(:replace, "= form_for ".length, "= form_for @post".length, 'post'),
523
534
  NodeMutation::Struct::Action.new(
535
+ :replace,
524
536
  "= form_for @post do |f|\n= form_for ".length,
525
537
  "= form_for @post do |f|\n= form_for @post".length,
526
538
  'post'
@@ -68,7 +68,7 @@ module Synvert::Core
68
68
  expect(results[0].file_path).to eq '/code.rb'
69
69
  expect(results[0].affected?).to be_truthy
70
70
  expect(results[0].conflicted?).to be_falsey
71
- expect(results[0].actions).to eq [NodeMutation::Struct::Action.new(6, 12, 'Synvert')]
71
+ expect(results[0].actions).to eq [NodeMutation::Struct::Action.new(:replace, 6, 12, 'Synvert')]
72
72
  end
73
73
  end
74
74
  end
@@ -169,6 +169,18 @@ module Synvert::Core
169
169
  rewriter.process_with_sandbox
170
170
  expect(File.exist?('./foo.bar')).to be_falsey
171
171
  end
172
+
173
+ it 'returns test result' do
174
+ rewriter =
175
+ Rewriter.new 'group', 'rewriter2' do
176
+ add_file 'foo.bar', 'FooBar'
177
+ end
178
+ result = rewriter.test
179
+ expect(result[0].file_path).to eq 'foo.bar'
180
+ expect(result[0].affected?).to be_truthy
181
+ expect(result[0].conflicted?).to be_falsey
182
+ expect(result[0].actions).to eq [NodeMutation::Struct::Action.new(:add_file, 0, 0, 'FooBar')]
183
+ end
172
184
  end
173
185
 
174
186
  describe 'parses remove_file' do
@@ -201,6 +213,21 @@ module Synvert::Core
201
213
  expect(File.exist?('./foo.bar')).to be_truthy
202
214
  FileUtils.rm './foo.bar'
203
215
  end
216
+
217
+ it 'returns test result' do
218
+ File.write './foo.bar', 'FooBar'
219
+ rewriter =
220
+ Rewriter.new 'group', 'rewriter2' do
221
+ remove_file 'foo.bar'
222
+ end
223
+ result = rewriter.test
224
+ expect(result[0].file_path).to eq 'foo.bar'
225
+ expect(result[0].affected?).to be_truthy
226
+ expect(result[0].conflicted?).to be_falsey
227
+ expect(result[0].actions).to eq [NodeMutation::Struct::Action.new(:remove_file, 0, -1, nil)]
228
+ expect(File.exist?('./foo.bar')).to be_truthy
229
+ FileUtils.rm './foo.bar'
230
+ end
204
231
  end
205
232
 
206
233
  describe 'parses add_snippet' do
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_runtime_dependency "activesupport", "< 7.0.0"
23
23
  spec.add_runtime_dependency "node_query", ">= 1.12.1"
24
- spec.add_runtime_dependency "node_mutation", ">= 1.15.1"
24
+ spec.add_runtime_dependency "node_mutation", ">= 1.15.3"
25
25
  spec.add_runtime_dependency "parser"
26
26
  spec.add_runtime_dependency "parser_node_ext", ">= 1.0.0"
27
27
  spec.add_runtime_dependency "parallel"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synvert-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.25.0
4
+ version: 1.26.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-17 00:00:00.000000000 Z
11
+ date: 2023-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.15.1
47
+ version: 1.15.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.15.1
54
+ version: 1.15.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: parser
57
57
  requirement: !ruby/object:Gem::Requirement