to_source 0.2.13 → 0.2.14

Sign up to get free protection for your applications and to get access to all the features.
data/Changelog.md CHANGED
@@ -1,35 +1,41 @@
1
- # v0.2.13 2013-01-9
1
+ # v0.2.14 2013-01-09
2
+
3
+ * [fixed] Emit send with arguments and body correctly
4
+
5
+ [Compare v0.2.13..v0.2.14](https://github.com/mbj/to_source/compare/v0.2.13...v0.2.14)
6
+
7
+ # v0.2.13 2013-01-09
2
8
 
3
9
  * [fixed] Emit send with arguments and body correctly
4
10
 
5
11
  [Compare v0.2.12..v0.2.13](https://github.com/mbj/to_source/compare/v0.2.12...v0.2.13)
6
12
 
7
- # v0.2.12 2013-01-9
13
+ # v0.2.12 2013-01-09
8
14
 
9
15
  * [fixed] Emit edge cases with dynamic literals correctly
10
16
 
11
17
  [Compare v0.2.11..v0.2.12](https://github.com/mbj/to_source/compare/v0.2.11...v0.2.12)
12
18
 
13
- # v0.2.11 2013-01-9
19
+ # v0.2.11 2013-01-09
14
20
 
15
21
  * [fixed] Allow all nodes to be entrypoints
16
22
 
17
23
  [Compare v0.2.10..v0.2.11](https://github.com/mbj/to_source/compare/v0.2.10...v0.2.11)
18
24
 
19
- # v0.2.10 2013-01-7
25
+ # v0.2.10 2013-01-07
20
26
 
21
27
  * [Changed] Rewrote internals compleatly, no outer API change
22
28
  * [fixed] Emit indentation of complex nested structures with rescue statements correctly
23
29
 
24
30
  [Compare v0.2.9..v0.2.10](https://github.com/mbj/to_source/compare/v0.2.9...v0.2.10)
25
31
 
26
- # v0.2.9 2013-01-4
32
+ # v0.2.9 2013-01-04
27
33
 
28
34
  * [fixed] Handle regexp literals containing slashes in non shash delimiters %r(/) correctly
29
35
 
30
36
  [Compare v0.2.8..v0.2.9](https://github.com/mbj/to_source/compare/v0.2.8...v0.2.9)
31
37
 
32
- # v0.2.8 2013-01-3
38
+ # v0.2.8 2013-01-03
33
39
 
34
40
  * [Changed] Emit many times more ugly code, but correctnes > beautifulnes
35
41
  * [fixed] Emit break with parantheses
@@ -38,13 +44,13 @@
38
44
 
39
45
  [Compare v0.2.7..v0.2.8](https://github.com/mbj/to_source/compare/v0.2.7...v0.2.8)
40
46
 
41
- # v0.2.7 2013-01-2
47
+ # v0.2.7 2013-01-02
42
48
 
43
49
  * [fixed] Emit super with blocks correctly
44
50
 
45
51
  [Compare v0.2.6..v0.2.7](https://github.com/mbj/to_source/compare/v0.2.6...v0.2.7)
46
52
 
47
- # v0.2.6 2013-01-1
53
+ # v0.2.6 2013-01-01
48
54
 
49
55
  * [fixed] Emit super vs super() correctly
50
56
 
data/TODO CHANGED
@@ -1,4 +1,5 @@
1
1
  * Do not emit parantheses around non keywords in binary operations (this will beautify source again)
2
+ * Unify code for all binary emitters
2
3
  * Add YARD coverage again
3
4
  * Fix all dm2 metric tools issues
4
5
  * Mutation coverage!
@@ -49,6 +49,7 @@ module ToSource
49
49
  class AssignmentOperator < self
50
50
 
51
51
  def dispatch
52
+ emit('(')
52
53
  visit(node.left)
53
54
  space
54
55
  emit(self.class::SYMBOL)
@@ -56,6 +57,7 @@ module ToSource
56
57
  emit('(')
57
58
  visit(node.right.value)
58
59
  emit(')')
60
+ emit(')')
59
61
  end
60
62
 
61
63
  class Or < self
@@ -6,11 +6,21 @@ module ToSource
6
6
 
7
7
  def dispatch
8
8
  emit('(')
9
- visit(node.left)
10
- emit(')')
9
+ emit_left
11
10
  space
12
11
  emit(self.class::SYMBOL)
13
12
  space
13
+ emit_right
14
+ emit(')')
15
+ end
16
+
17
+ def emit_left
18
+ emit('(')
19
+ visit(node.left)
20
+ emit(')')
21
+ end
22
+
23
+ def emit_right
14
24
  emit('(')
15
25
  visit(node.right)
16
26
  emit(')')
@@ -6,16 +6,26 @@ module ToSource
6
6
 
7
7
  def dispatch
8
8
  emit('(')
9
- visit(left)
10
- emit(')')
9
+ emit_left
11
10
  space
12
11
  emit(node.name)
13
12
  space
13
+ emit_right
14
+ emit(')')
15
+ end
16
+
17
+ def emit_right
14
18
  emit('(')
15
19
  visit(right)
16
20
  emit(')')
17
21
  end
18
22
 
23
+ def emit_left
24
+ emit('(')
25
+ visit(left)
26
+ emit(')')
27
+ end
28
+
19
29
  def left
20
30
  node.receiver
21
31
  end
@@ -654,65 +654,73 @@ describe ToSource,'.to_source' do
654
654
  end
655
655
  end
656
656
 
657
- context 'binary operators' do
657
+ context 'binary operators methods' do
658
658
  %w(+ - * / & | && || << >> == === != <= < <=> > >= =~ !~ ^ **).each do |operator|
659
659
  context "on literals #{operator}" do
660
- assert_source "(1) #{operator} (2)"
660
+ assert_source "((1) #{operator} (2))"
661
661
  end
662
662
 
663
663
  context "on self #{operator}" do
664
- assert_source "(self) #{operator} (b)"
664
+ assert_source "((self) #{operator} (b))"
665
665
  end
666
666
 
667
- context "on calls #{operator}" do
668
- assert_source "(a) #{operator} (b)"
667
+ context "on send #{operator}" do
668
+ assert_source "((a) #{operator} (b))"
669
669
  end
670
670
  end
671
671
 
672
672
  context 'binary operator and keywords' do
673
- assert_source '(a) || (break(foo))'
673
+ assert_source '((a) || (break(foo)))'
674
+ end
675
+
676
+ context 'sending methods to result of binary operator' do
677
+ assert_source '((a) || (b)).foo'
674
678
  end
675
679
 
676
680
  context 'nested binary operators' do
677
- assert_source '(a) || ((b) || (c))'
681
+ assert_source '((a) || (((b) || (c))))'
678
682
  end
679
683
  end
680
684
 
681
685
  { :or => :'||', :and => :'&&' }.each do |word, symbol|
682
686
  context "word form form equivalency of #{word} and #{symbol}" do
683
- assert_converts "(a) #{symbol} (break(foo))", "a #{word} break foo"
687
+ assert_converts "((a) #{symbol} (break(foo)))", "a #{word} break foo"
684
688
  end
685
689
  end
686
690
 
687
691
  context 'expansion of shortcuts' do
688
692
  context 'on += operator' do
689
- assert_converts 'a = (a) + (2)', 'a += 2'
693
+ assert_converts 'a = ((a) + (2))', 'a += 2'
690
694
  end
691
695
 
692
696
  context 'on -= operator' do
693
- assert_converts 'a = (a) - (2)', 'a -= 2'
697
+ assert_converts 'a = ((a) - (2))', 'a -= 2'
694
698
  end
695
699
 
696
700
  context 'on **= operator' do
697
- assert_converts 'a = (a) ** (2)', 'a **= 2'
701
+ assert_converts 'a = ((a) ** (2))', 'a **= 2'
698
702
  end
699
703
 
700
704
  context 'on *= operator' do
701
- assert_converts 'a = (a) * (2)', 'a *= 2'
705
+ assert_converts 'a = ((a) * (2))', 'a *= 2'
702
706
  end
703
707
 
704
708
  context 'on /= operator' do
705
- assert_converts 'a = (a) / (2)', 'a /= 2'
709
+ assert_converts 'a = ((a) / (2))', 'a /= 2'
706
710
  end
707
711
  end
708
712
 
709
713
  context 'shortcuts' do
710
714
  context 'on &&= operator' do
711
- assert_source 'a &&= (b)'
715
+ assert_source '(a &&= (b))'
712
716
  end
713
717
 
714
718
  context 'on ||= operator' do
715
- assert_source 'a ||= (2)'
719
+ assert_source '(a ||= (2))'
720
+ end
721
+
722
+ context 'calling methods on shortcuts' do
723
+ assert_source '(a ||= (2)).bar'
716
724
  end
717
725
  end
718
726
 
data/to_source.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'to_source'
4
- s.version = '0.2.13'
4
+ s.version = '0.2.14'
5
5
  s.authors = ['Markus Schirp']
6
6
  s.email = ['mbj@seonic.net']
7
7
  s.homepage = 'http://github.com/mbj/to_source'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: to_source
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.13
4
+ version: 0.2.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: