synvert-core 0.26.0 → 0.27.3

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: 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