synvert-core 0.28.1 → 0.29.0

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