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 +4 -4
- data/CHANGELOG.md +18 -0
- data/lib/synvert/core/node_ext.rb +26 -1
- data/lib/synvert/core/rewriter.rb +1 -0
- data/lib/synvert/core/rewriter/action/delete_action.rb +30 -0
- data/lib/synvert/core/rewriter/instance.rb +9 -2
- data/lib/synvert/core/version.rb +1 -1
- data/spec/synvert/core/node_ext_spec.rb +62 -0
- data/spec/synvert/core/rewriter/action/delete_action_spec.rb +26 -0
- data/spec/synvert/core/rewriter/instance_spec.rb +5 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ddab57669b905a8064083e20672a292f78cce5a651331d9202e3fce12a34f776
|
4
|
+
data.tar.gz: d0d9dcb748214c6d0a35609a5cdcc2fdae44e112af7ed4ce15a8e22cc9d19919
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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.
|
data/lib/synvert/core/version.rb
CHANGED
@@ -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.
|
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-
|
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
|