synvert-core 0.28.1 → 0.29.0

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: b240936c7390b45a27e9352da7acec3784499d38d5ec10aae3b3403036df36b5
4
- data.tar.gz: a9c9a91d25352ef1c5fc09bd1cc0d8751d4239513a2fcff0e2618ccec6e93855
3
+ metadata.gz: 31ee6b89cd48a4accb2dc71fdec2e487c534e8d6eb4a9bd6050817cd88f7ba3c
4
+ data.tar.gz: cd4c005e0f7a21e52e984e5279a45d4325d341b92d67feedbbc455ddc062e0fc
5
5
  SHA512:
6
- metadata.gz: 92298a2a06c408cac4aa99870f85138bc754dcb286b636976a01eb88f63613e6f81b80a1d0fc680922a394ab6b7167b9bdd70d6bf2b14a89a7f1a6faaf5292d0
7
- data.tar.gz: f5c10e0e949dd459035e92fb172ed20ad7717369923a93e77dfb8077c7ba7c45c31da3ef1756768215ccdeff8b6b36fef063fe0b6db9fa53b3b9457bd895c8ae
6
+ metadata.gz: 4d1e8642e682a155eedb03c6cdbabca55f53f22c258d4774da7200877159ec18c0a7d568823c5c379fd93810d0baf945a2bc139f8444423855c6279241acb0bc
7
+ data.tar.gz: 73a369f23d1add90b21ce578faf37a3136a6ffcb384f47fa5b3881fd4241af4b087b19fb0d854143ed1e3d9b76f350fc41b2415cddc29671cde3afe0e46d4709
data/CHANGELOG.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 0.28.1 (2021-04-09)
3
+ ## 0.29.0 (2021-04-25)
4
4
 
5
5
  * Make `child_name_range` support [:block, :pipe]
6
+ * Get key value for hash node
6
7
 
7
8
  ## 0.28.0 (2021-04-07)
8
9
 
@@ -203,7 +203,7 @@ module Parser::AST
203
203
  def hash_value(key)
204
204
  if :hash == type
205
205
  value_node = children.find { |pair_node| pair_node.key.to_value == key }
206
- value_node ? value_node.value : nil
206
+ value_node&.value
207
207
  else
208
208
  raise Synvert::Core::MethodNotSupported, "hash_value is not handled for #{debug_info}"
209
209
  end
@@ -280,6 +280,29 @@ module Parser::AST
280
280
  end
281
281
  end
282
282
 
283
+ # Respond key value for hash node, e.g.
284
+ #
285
+ # Current node is s(:hash, s(:pair, s(:sym, :number), s(:int, 10)))
286
+ # node.number_value is 10
287
+ def method_missing(method_name, *args, &block)
288
+ if :hash == type && method_name.to_s.include?('_value')
289
+ key = method_name.to_s.sub('_value', '')
290
+ return hash_value(key.to_sym)&.to_value if key?(key.to_sym)
291
+ return hash_value(key.to_s)&.to_value if key?(key.to_s)
292
+ end
293
+
294
+ super
295
+ end
296
+
297
+ def respond_to_missing?(method_name, *args)
298
+ if :hash == type && method_name.to_s.include?('_value')
299
+ key = method_name.to_s.sub('_value', '')
300
+ return true if key?(key.to_sym) || key?(key.to_s)
301
+ end
302
+
303
+ super
304
+ end
305
+
283
306
  def to_s
284
307
  if :mlhs == type
285
308
  "(#{children.map(&:name).join(', ')})"
@@ -323,35 +346,55 @@ module Parser::AST
323
346
  # @return [Parser::Source::Range] source range of child node.
324
347
  def child_node_range(child_name)
325
348
  case [type, child_name]
326
- when [:block, :pipe]
349
+ when %i[block pipe]
327
350
  Parser::Source::Range.new('(string)', arguments.loc.expression.begin_pos, arguments.loc.expression.end_pos)
328
- when [:class, :name]
351
+ when %i[class name]
329
352
  loc.name
330
- when [:def, :name]
353
+ when %i[def name]
331
354
  loc.name
332
- when [:defs, :name]
355
+ when %i[defs name]
333
356
  loc.name
334
- when [:defs, :dot]
357
+ when %i[defs dot]
335
358
  loc.operator
336
- when [:defs, :self]
359
+ when %i[defs self]
337
360
  Parser::Source::Range.new('(string)', loc.operator.begin_pos - 4, loc.operator.begin_pos)
338
- when [:send, :dot]
361
+ when %i[send dot]
339
362
  loc.dot
340
- when [:send, :message]
341
- loc.operator ? Parser::Source::Range.new('(string)', loc.selector.begin_pos, loc.operator.end_pos) : loc.selector
363
+ when %i[send message]
364
+ if loc.operator
365
+ Parser::Source::Range.new('(string)', loc.selector.begin_pos, loc.operator.end_pos)
366
+ else
367
+ loc.selector
368
+ end
342
369
  else
343
370
  if respond_to?(child_name)
344
371
  child_node = send(child_name)
345
372
  return nil if child_node.nil?
373
+
346
374
  if child_node.is_a?(Parser::AST::Node)
347
- return Parser::Source::Range.new('(string)', child_node.loc.expression.begin_pos, child_node.loc.expression.end_pos)
375
+ return(
376
+ Parser::Source::Range.new(
377
+ '(string)',
378
+ child_node.loc.expression.begin_pos,
379
+ child_node.loc.expression.end_pos
380
+ )
381
+ )
348
382
  end
383
+
349
384
  # arguments
350
385
  return nil if child_node.empty?
351
- return Parser::Source::Range.new('(string)', child_node.first.loc.expression.begin_pos, child_node.last.loc.expression.end_pos)
386
+
387
+ return(
388
+ Parser::Source::Range.new(
389
+ '(string)',
390
+ child_node.first.loc.expression.begin_pos,
391
+ child_node.last.loc.expression.end_pos
392
+ )
393
+ )
352
394
  end
353
395
 
354
- raise Synvert::Core::MethodNotSupported, "child_node_range is not handled for #{evaluated.inspect}, child_name: #{child_name}"
396
+ raise Synvert::Core::MethodNotSupported,
397
+ "child_node_range is not handled for #{evaluated.inspect}, child_name: #{child_name}"
355
398
  end
356
399
  end
357
400
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Synvert
4
4
  module Core
5
- VERSION = '0.28.1'
5
+ VERSION = '0.29.0'
6
6
  end
7
7
  end
@@ -333,6 +333,16 @@ describe Parser::AST::Node do
333
333
  end
334
334
  end
335
335
 
336
+ describe 'key value by method_missing' do
337
+ it 'gets for key value' do
338
+ node = parse("{:foo => :bar}")
339
+ expect(node.foo_value).to eq :bar
340
+
341
+ node = parse("{'foo' => 'bar'}")
342
+ expect(node.foo_value).to eq 'bar'
343
+ end
344
+ end
345
+
336
346
  describe '#recursive_children' do
337
347
  it 'iterates all children recursively' do
338
348
  node = parse('class Synvert; def current_node; @node; end; end')
@@ -5,18 +5,18 @@ require 'spec_helper'
5
5
  module Synvert::Core
6
6
  describe Rewriter::DeleteAction do
7
7
  subject {
8
- source = "arr.map {}.flatten"
8
+ source = 'arr.map {}.flatten'
9
9
  node = Parser::CurrentRuby.parse(source)
10
10
  instance = double(current_node: node)
11
11
  Rewriter::DeleteAction.new(instance, :dot, :message)
12
12
  }
13
13
 
14
14
  it 'gets begin_pos' do
15
- expect(subject.begin_pos).to eq "arr.map {}".length
15
+ expect(subject.begin_pos).to eq 'arr.map {}'.length
16
16
  end
17
17
 
18
18
  it 'gets end_pos' do
19
- expect(subject.end_pos).to eq "arr.map {}.flatten".length
19
+ expect(subject.end_pos).to eq 'arr.map {}.flatten'.length
20
20
  end
21
21
 
22
22
  it 'gets rewritten_code' do
@@ -6,7 +6,7 @@ module Synvert::Core
6
6
  describe Rewriter::ReplaceAction do
7
7
  context 'replace with single line' do
8
8
  subject {
9
- source = "FactoryBot.create(:user)"
9
+ source = 'FactoryBot.create(:user)'
10
10
  node = Parser::CurrentRuby.parse(source)
11
11
  instance = double(current_node: node)
12
12
  Rewriter::ReplaceAction.new(instance, :receiver, :dot, :message, with: 'create')
@@ -17,7 +17,7 @@ module Synvert::Core
17
17
  end
18
18
 
19
19
  it 'gets end_pos' do
20
- expect(subject.end_pos).to eq "FactoryBot.create".length
20
+ expect(subject.end_pos).to eq 'FactoryBot.create'.length
21
21
  end
22
22
 
23
23
  it 'gets rewritten_code' do
data/synvert-core.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_runtime_dependency "activesupport"
23
23
  spec.add_runtime_dependency "erubis"
24
- spec.add_runtime_dependency "parser", "~> 3.0.0"
24
+ spec.add_runtime_dependency "parser"
25
25
 
26
26
  spec.add_development_dependency "bundler"
27
27
  spec.add_development_dependency "guard"
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.28.1
4
+ version: 0.29.0
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-04-09 00:00:00.000000000 Z
11
+ date: 2021-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: parser
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 3.0.0
47
+ version: '0'
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: 3.0.0
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -213,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
213
  - !ruby/object:Gem::Version
214
214
  version: '0'
215
215
  requirements: []
216
- rubygems_version: 3.1.4
216
+ rubygems_version: 3.1.6
217
217
  signing_key:
218
218
  specification_version: 4
219
219
  summary: convert ruby code to better syntax.