synvert-core 0.26.0 → 0.27.3

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: a2dcb08f4af325c83596a4ab4ff8ddf43a11500629e96dbccce9fa070dcf7fbc
4
- data.tar.gz: 4d428fd96a41f1a31b32d6f301562f093c752d6ec63a1dd5641f6f66a62605b7
3
+ metadata.gz: ddab57669b905a8064083e20672a292f78cce5a651331d9202e3fce12a34f776
4
+ data.tar.gz: d0d9dcb748214c6d0a35609a5cdcc2fdae44e112af7ed4ce15a8e22cc9d19919
5
5
  SHA512:
6
- metadata.gz: ae47fbf7a0ce9ddae8e221b9508f981534118e5c303ec1736d391db51477a477d338bbfdc215ecd3af5ba4ff6cd0090995c5a17fab6d249a24d46501f941d3b7
7
- data.tar.gz: 6cf6396cbd3deb8b1d66a1166caa8a584ef0145ebd719b067d1d705f73f7f1d0177e910e16c16c55f19034995d4b641837149185ee318aefe1303e3d8e7db625
6
+ metadata.gz: e1964409321d68628e1e73b24ed77f9c2e223dc9190fdfde722e2ab9e6be92b0be7802468dca245a34d5fba52f3a8778ca26f9299df095308b32cb2da80a3393
7
+ data.tar.gz: 42ed0ba17c74b57c3b1e0019d5f50ddf9bda0f5f1a3564b124ba2b0cf379b95b124e344113bdce8c53852fb911e9744725fa91ec3593943022636584ad6c17ff
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 0.27.3 (2021-03-31)
4
+
5
+ * Support `:def` in `child_node_range`
6
+ * Support `:defs` in `child_node_range`
7
+
8
+ ## 0.27.2 (2021-03-31)
9
+
10
+ * Fix selector with operator in `child_node_range`
11
+
12
+ ## 0.27.1 (2021-03-31)
13
+
14
+ * Fix `delete` action arguments
15
+
16
+ ## 0.27.0 (2021-03-31)
17
+
18
+ * Support `:class` in `child_node_range`
19
+ * Add `delete` action
20
+
3
21
  ## 0.26.0 (2021-03-30)
4
22
 
5
23
  * attr_reader ruby_version and gem_spec
@@ -323,6 +323,31 @@ 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 :class
327
+ case child_name
328
+ when :name
329
+ loc.name
330
+ when :parent_class
331
+ parent_class&.loc&.expression
332
+ end
333
+ when :def
334
+ case child_name
335
+ when :name
336
+ loc.name
337
+ when :arguments
338
+ Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos) unless arguments.empty?
339
+ end
340
+ when :defs
341
+ case child_name
342
+ when :dot
343
+ loc.operator
344
+ when :self
345
+ Parser::Source::Range.new('(string)', loc.operator.begin_pos - 4, loc.operator.begin_pos)
346
+ when :name
347
+ loc.name
348
+ when :arguments
349
+ Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos) unless arguments.empty?
350
+ end
326
351
  when :send
327
352
  case child_name
328
353
  when :receiver
@@ -330,7 +355,7 @@ module Parser::AST
330
355
  when :dot
331
356
  loc.dot
332
357
  when :message
333
- loc.selector
358
+ loc.operator ? Parser::Source::Range.new('(string)', loc.selector.begin_pos, loc.operator.end_pos) : loc.selector
334
359
  when :arguments
335
360
  Parser::Source::Range.new('(string)', arguments.first.loc.expression.begin_pos, arguments.last.loc.expression.end_pos) unless arguments.empty?
336
361
  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.0'
5
+ VERSION = '0.27.3'
6
6
  end
7
7
  end
@@ -395,6 +395,64 @@ describe Parser::AST::Node do
395
395
  end
396
396
 
397
397
  describe '#child_node_range' do
398
+ context 'class node' do
399
+ it 'checks name' do
400
+ node = parse('class Post < ActiveRecord::Base; end')
401
+ range = node.child_node_range(:name)
402
+ expect(range.to_range).to eq(6...10)
403
+ end
404
+
405
+ it 'checks parent_class' do
406
+ node = parse('class Post < ActiveRecord::Base; end')
407
+ range = node.child_node_range(:parent_class)
408
+ expect(range.to_range).to eq(13...31)
409
+
410
+ node = parse('class Post; end')
411
+ range = node.child_node_range(:parent_class)
412
+ expect(range).to be_nil
413
+ end
414
+ end
415
+
416
+ context 'def node' do
417
+ it 'checks name' do
418
+ node = parse('def foo(bar); end')
419
+ range = node.child_node_range(:name)
420
+ expect(range.to_range).to eq(4...7)
421
+ end
422
+
423
+ it 'checks arguments' do
424
+ node = parse('def foo(bar); end')
425
+ range = node.child_node_range(:arguments)
426
+ expect(range.to_range).to eq(8...11)
427
+ end
428
+ end
429
+
430
+ context 'defs node' do
431
+ it 'checks self' do
432
+ node = parse('def self.foo(bar); end')
433
+ range = node.child_node_range(:self)
434
+ expect(range.to_range).to eq(4...8)
435
+ end
436
+
437
+ it 'checks dot' do
438
+ node = parse('def self.foo(bar); end')
439
+ range = node.child_node_range(:dot)
440
+ expect(range.to_range).to eq(8...9)
441
+ end
442
+
443
+ it 'checks name' do
444
+ node = parse('def self.foo(bar); end')
445
+ range = node.child_node_range(:name)
446
+ expect(range.to_range).to eq(9...12)
447
+ end
448
+
449
+ it 'checks arguments' do
450
+ node = parse('def self.foo(bar); end')
451
+ range = node.child_node_range(:arguments)
452
+ expect(range.to_range).to eq(13...16)
453
+ end
454
+ end
455
+
398
456
  context 'send node' do
399
457
  it 'checks receiver' do
400
458
  node = parse('foo.bar(test)')
@@ -421,6 +479,10 @@ describe Parser::AST::Node do
421
479
  range = node.child_node_range(:message)
422
480
  expect(range.to_range).to eq(4...7)
423
481
 
482
+ node = parse('foo.bar = test')
483
+ range = node.child_node_range(:message)
484
+ expect(range.to_range).to eq(4...9)
485
+
424
486
  node = parse('foobar(test)')
425
487
  range = node.child_node_range(:message)
426
488
  expect(range.to_range).to eq(0...6)
@@ -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.0
4
+ version: 0.27.3
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-30 00:00:00.000000000 Z
11
+ date: 2021-03-31 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