synvert-core 0.26.1 → 0.27.4

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: e3f85c5eb0a82ffb3447ad72ac9f901883a074b1f16c244176008a333b3e90cc
4
- data.tar.gz: c13b895edc3ef7f9d126795933e2bf01267b0b912e2904a4481baff175eebca4
3
+ metadata.gz: a239badccf8d5b2774e75423755123fe55393f951cb3064030800ce351e014bf
4
+ data.tar.gz: df9c575e61f833873bafaa672b95977390ce5eef62ace7898f209f684fef595d
5
5
  SHA512:
6
- metadata.gz: 16ceb23eaf30909e4950cefbaae20b650f90320a496fee4a095a054dc7996fe91bfbcb79fc6252caa38f09b5998c687d4171bee050fc605cf2c8ee8ddac93c61
7
- data.tar.gz: fc0202a47909b7bcffdd0e235c198419afcf2653f89bcd9abce626b412ab3c4a92a0bfbc71be8971873d15aeac85e4e2d0f80575ee44f75374d7c755af281c12
6
+ metadata.gz: fc153d13c26d917155db767031b5371df250014e1c86cfbf58e89693775e5488a02276e272a62e6c41489a744056846ff2237f74433c283dbfc5b9664c989372
7
+ data.tar.gz: 4c6e8df70fc14379a871b1b187ef9ce4b3b32ec964aedf096d6db1f69ae911e005933576b1adbc01478a61b1c694a1d7002bd1d4f0647f1e421bcbe894f191f5
data/CHANGELOG.md CHANGED
@@ -1,8 +1,26 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 0.26.1 (2021-03-31)
3
+ ## 0.27.4 (2021-04-01)
4
+
5
+ * Support `:block` in `child_node_range`
6
+
7
+ ## 0.27.3 (2021-03-31)
8
+
9
+ * Support `:def` in `child_node_range`
10
+ * Support `:defs` in `child_node_range`
11
+
12
+ ## 0.27.2 (2021-03-31)
13
+
14
+ * Fix selector with operator in `child_node_range`
15
+
16
+ ## 0.27.1 (2021-03-31)
17
+
18
+ * Fix `delete` action arguments
19
+
20
+ ## 0.27.0 (2021-03-31)
4
21
 
5
22
  * Support `:class` in `child_node_range`
23
+ * Add `delete` action
6
24
 
7
25
  ## 0.26.0 (2021-03-30)
8
26
 
@@ -323,6 +323,13 @@ module Parser::AST
323
323
  # @return [Parser::Source::Range] source range of child node.
324
324
  def child_node_range(child_name)
325
325
  case type
326
+ when :block
327
+ case child_name
328
+ when :caller
329
+ caller&.loc&.expression
330
+ when :arguments
331
+ arguments&.loc&.expression
332
+ end
326
333
  when :class
327
334
  case child_name
328
335
  when :name
@@ -330,12 +337,32 @@ module Parser::AST
330
337
  when :parent_class
331
338
  parent_class&.loc&.expression
332
339
  end
340
+ when :def
341
+ case child_name
342
+ when :name
343
+ loc.name
344
+ when :arguments
345
+ Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos) unless arguments.empty?
346
+ end
347
+ when :defs
348
+ case child_name
349
+ when :dot
350
+ loc.operator
351
+ when :self
352
+ Parser::Source::Range.new('(string)', loc.operator.begin_pos - 4, loc.operator.begin_pos)
353
+ when :name
354
+ loc.name
355
+ when :arguments
356
+ Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos) unless arguments.empty?
357
+ end
333
358
  when :send
334
359
  case child_name
335
360
  when :receiver
336
361
  receiver&.loc&.expression
362
+ when :dot
363
+ loc.dot
337
364
  when :message
338
- loc.selector
365
+ loc.operator ? Parser::Source::Range.new('(string)', loc.selector.begin_pos, loc.operator.end_pos) : loc.selector
339
366
  when :arguments
340
367
  Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos) unless arguments.empty?
341
368
  end
@@ -24,6 +24,7 @@ module Synvert::Core
24
24
  autoload :ReplaceAction, 'synvert/core/rewriter/action/replace_action'
25
25
  autoload :ReplaceErbStmtWithExprAction, 'synvert/core/rewriter/action/replace_erb_stmt_with_expr_action'
26
26
  autoload :RemoveAction, 'synvert/core/rewriter/action/remove_action'
27
+ autoload :DeleteAction, 'synvert/core/rewriter/action/delete_action'
27
28
 
28
29
  autoload :Warning, 'synvert/core/rewriter/warning'
29
30
 
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Synvert::Core
4
+ # RemoveAction to delete code.
5
+ class Rewriter::DeleteAction < Rewriter::Action
6
+ def initialize(instance, *selectors)
7
+ super(instance, nil)
8
+ @selectors = selectors
9
+ end
10
+
11
+ # Begin position of code to replace.
12
+ #
13
+ # @return [Integer] begin position.
14
+ def begin_pos
15
+ @selectors.map { |selector| @node.child_node_range(selector).begin_pos }.min
16
+ end
17
+
18
+ # End position of code to replace.
19
+ #
20
+ # @return [Integer] end position.
21
+ def end_pos
22
+ @selectors.map { |selector| @node.child_node_range(selector).end_pos }.max
23
+ end
24
+
25
+ # The rewritten code, always empty string.
26
+ def rewritten_code
27
+ ''
28
+ end
29
+ end
30
+ end
@@ -254,7 +254,7 @@ module Synvert::Core
254
254
  # Parse replace with dsl, it creates a [Synvert::Core::Rewriter::ReplaceAction] to
255
255
  # replace child node with code.
256
256
  #
257
- # @param selector [Symbol] selector name of child name.
257
+ # @param selector [Symbol] selector name of child node.
258
258
  # @param with [String] code need to be replaced with.
259
259
  def replace(selector, with:)
260
260
  @actions << Rewriter::ReplaceAction.new(self, selector, with: with)
@@ -266,11 +266,18 @@ module Synvert::Core
266
266
  @actions << Rewriter::ReplaceErbStmtWithExprAction.new(self)
267
267
  end
268
268
 
269
- # Parse remove dsl, it creates a [Synvert::Core::Rewriter::RemoveAction] to current node.
269
+ # Parse remove dsl, it creates a [Synvert::Core::Rewriter::RemoveAction] to remove current node.
270
270
  def remove
271
271
  @actions << Rewriter::RemoveAction.new(self)
272
272
  end
273
273
 
274
+ # Parse delete dsl, it creates a [Synvert::Core::Rewriter::DeleteAction] to delete child nodes.
275
+ #
276
+ # @param selectors [Array<Symbol>] selector names of child node.
277
+ def delete(*selectors)
278
+ @actions << Rewriter::DeleteAction.new(self, *selectors)
279
+ end
280
+
274
281
  # Parse warn dsl, it creates a [Synvert::Core::Rewriter::Warning] to save warning message.
275
282
  #
276
283
  # @param message [String] warning message.
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '0.26.1'
5
+ VERSION = '0.27.4'
6
6
  end
7
7
  end
@@ -395,6 +395,78 @@ describe Parser::AST::Node do
395
395
  end
396
396
 
397
397
  describe '#child_node_range' do
398
+ context 'block node' do
399
+ it 'checks caller' do
400
+ node = parse('Factory.define :user do |user|; end')
401
+ range = node.child_node_range(:caller)
402
+ expect(range.to_range).to eq(0...20)
403
+ end
404
+
405
+ it 'checks arguments' do
406
+ node = parse('Factory.define :user do |user|; end')
407
+ range = node.child_node_range(:arguments)
408
+ expect(range.to_range).to eq(24...30)
409
+ end
410
+ end
411
+
412
+ context 'class node' do
413
+ it 'checks name' do
414
+ node = parse('class Post < ActiveRecord::Base; end')
415
+ range = node.child_node_range(:name)
416
+ expect(range.to_range).to eq(6...10)
417
+ end
418
+
419
+ it 'checks parent_class' do
420
+ node = parse('class Post < ActiveRecord::Base; end')
421
+ range = node.child_node_range(:parent_class)
422
+ expect(range.to_range).to eq(13...31)
423
+
424
+ node = parse('class Post; end')
425
+ range = node.child_node_range(:parent_class)
426
+ expect(range).to be_nil
427
+ end
428
+ end
429
+
430
+ context 'def node' do
431
+ it 'checks name' do
432
+ node = parse('def foo(bar); end')
433
+ range = node.child_node_range(:name)
434
+ expect(range.to_range).to eq(4...7)
435
+ end
436
+
437
+ it 'checks arguments' do
438
+ node = parse('def foo(bar); end')
439
+ range = node.child_node_range(:arguments)
440
+ expect(range.to_range).to eq(8...11)
441
+ end
442
+ end
443
+
444
+ context 'defs node' do
445
+ it 'checks self' do
446
+ node = parse('def self.foo(bar); end')
447
+ range = node.child_node_range(:self)
448
+ expect(range.to_range).to eq(4...8)
449
+ end
450
+
451
+ it 'checks dot' do
452
+ node = parse('def self.foo(bar); end')
453
+ range = node.child_node_range(:dot)
454
+ expect(range.to_range).to eq(8...9)
455
+ end
456
+
457
+ it 'checks name' do
458
+ node = parse('def self.foo(bar); end')
459
+ range = node.child_node_range(:name)
460
+ expect(range.to_range).to eq(9...12)
461
+ end
462
+
463
+ it 'checks arguments' do
464
+ node = parse('def self.foo(bar); end')
465
+ range = node.child_node_range(:arguments)
466
+ expect(range.to_range).to eq(13...16)
467
+ end
468
+ end
469
+
398
470
  context 'send node' do
399
471
  it 'checks receiver' do
400
472
  node = parse('foo.bar(test)')
@@ -406,11 +478,25 @@ describe Parser::AST::Node do
406
478
  expect(range).to be_nil
407
479
  end
408
480
 
481
+ it 'checks dot' do
482
+ node = parse('foo.bar(test)')
483
+ range = node.child_node_range(:dot)
484
+ expect(range.to_range).to eq(3...4)
485
+
486
+ node = parse('foobar(test)')
487
+ range = node.child_node_range(:dot)
488
+ expect(range).to be_nil
489
+ end
490
+
409
491
  it 'checks message' do
410
492
  node = parse('foo.bar(test)')
411
493
  range = node.child_node_range(:message)
412
494
  expect(range.to_range).to eq(4...7)
413
495
 
496
+ node = parse('foo.bar = test')
497
+ range = node.child_node_range(:message)
498
+ expect(range.to_range).to eq(4...9)
499
+
414
500
  node = parse('foobar(test)')
415
501
  range = node.child_node_range(:message)
416
502
  expect(range.to_range).to eq(0...6)
@@ -430,24 +516,6 @@ describe Parser::AST::Node do
430
516
  expect(range).to be_nil
431
517
  end
432
518
  end
433
-
434
- context 'class node' do
435
- it 'checks name' do
436
- node = parse('class Post < ActiveRecord::Base; end')
437
- range = node.child_node_range(:name)
438
- expect(range.to_range).to eq(6...10)
439
- end
440
-
441
- it 'checks parent_class' do
442
- node = parse('class Post < ActiveRecord::Base; end')
443
- range = node.child_node_range(:parent_class)
444
- expect(range.to_range).to eq(13...31)
445
-
446
- node = parse('class Post; end')
447
- range = node.child_node_range(:parent_class)
448
- expect(range).to be_nil
449
- end
450
- end
451
519
  end
452
520
 
453
521
  describe '#rewritten_source' do
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ module Synvert::Core
6
+ describe Rewriter::DeleteAction do
7
+ subject {
8
+ source = "arr.map {}.flatten"
9
+ node = Parser::CurrentRuby.parse(source)
10
+ instance = double(current_node: node)
11
+ Rewriter::DeleteAction.new(instance, :dot, :message)
12
+ }
13
+
14
+ it 'gets begin_pos' do
15
+ expect(subject.begin_pos).to eq "arr.map {}".length
16
+ end
17
+
18
+ it 'gets end_pos' do
19
+ expect(subject.end_pos).to eq "arr.map {}.flatten".length
20
+ end
21
+
22
+ it 'gets rewritten_code' do
23
+ expect(subject.rewritten_code).to eq ''
24
+ end
25
+ end
26
+ end
@@ -127,6 +127,11 @@ module Synvert::Core
127
127
  instance.remove
128
128
  end
129
129
 
130
+ it 'parses remove' do
131
+ expect(Rewriter::DeleteAction).to receive(:new).with(instance, :dot, :message)
132
+ instance.delete :dot, :message
133
+ end
134
+
130
135
  it 'parses warn' do
131
136
  expect(Rewriter::Warning).to receive(:new).with(instance, 'foobar')
132
137
  instance.warn 'foobar'
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: 0.26.1
4
+ version: 0.27.4
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-31 00:00:00.000000000 Z
11
+ date: 2021-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -147,6 +147,7 @@ files:
147
147
  - lib/synvert/core/rewriter.rb
148
148
  - lib/synvert/core/rewriter/action.rb
149
149
  - lib/synvert/core/rewriter/action/append_action.rb
150
+ - lib/synvert/core/rewriter/action/delete_action.rb
150
151
  - lib/synvert/core/rewriter/action/insert_action.rb
151
152
  - lib/synvert/core/rewriter/action/insert_after_action.rb
152
153
  - lib/synvert/core/rewriter/action/remove_action.rb
@@ -171,6 +172,7 @@ files:
171
172
  - spec/synvert/core/engine/erb_spec.rb
172
173
  - spec/synvert/core/node_ext_spec.rb
173
174
  - spec/synvert/core/rewriter/action/append_action_spec.rb
175
+ - spec/synvert/core/rewriter/action/delete_action_spec.rb
174
176
  - spec/synvert/core/rewriter/action/insert_action_spec.rb
175
177
  - spec/synvert/core/rewriter/action/insert_after_action_spec.rb
176
178
  - spec/synvert/core/rewriter/action/remove_action_spec.rb
@@ -221,6 +223,7 @@ test_files:
221
223
  - spec/synvert/core/engine/erb_spec.rb
222
224
  - spec/synvert/core/node_ext_spec.rb
223
225
  - spec/synvert/core/rewriter/action/append_action_spec.rb
226
+ - spec/synvert/core/rewriter/action/delete_action_spec.rb
224
227
  - spec/synvert/core/rewriter/action/insert_action_spec.rb
225
228
  - spec/synvert/core/rewriter/action/insert_after_action_spec.rb
226
229
  - spec/synvert/core/rewriter/action/remove_action_spec.rb