to_source 0.2.4 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog.md +9 -0
- data/Gemfile +1 -1
- data/Gemfile.devtools +6 -13
- data/lib/to_source/visitor.rb +46 -10
- data/spec/unit/to_source/visitor/class_methods/run_spec.rb +37 -17
- data/to_source.gemspec +1 -1
- metadata +2 -2
data/Changelog.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# v0.2.5 2012-12-14
|
2
|
+
|
3
|
+
* [fixed] Emit unary operators correctly
|
4
|
+
* [fixed] Define with optional splat and block argument
|
5
|
+
* [fixed] Emit arguments to break keyword
|
6
|
+
* [change] Uglify output of binary operators with unneded paranteses. Correct output > nice output.
|
7
|
+
* [fixed] Emit nested binary operators correctly.
|
8
|
+
* [fixed] Emit element reference on self correctly. self[foo].
|
9
|
+
|
1
10
|
# v0.2.4 2012-12-07
|
2
11
|
|
3
12
|
* [feature] Allow to emit pattern variables as root node
|
data/Gemfile
CHANGED
data/Gemfile.devtools
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
group :development do
|
2
|
-
gem 'rake', '~> 0
|
1
|
+
group :development do
|
2
|
+
gem 'rake', '~> 10.0'
|
3
3
|
gem 'rspec', '~> 2.12.0'
|
4
4
|
gem 'yard', '~> 0.8.3'
|
5
5
|
end
|
@@ -26,26 +26,19 @@ group :metrics do
|
|
26
26
|
gem 'flog', '~> 2.5.1'
|
27
27
|
gem 'reek', '~> 1.2.8', :git => 'https://github.com/dkubb/reek.git'
|
28
28
|
gem 'roodi', '~> 2.1.0'
|
29
|
-
gem 'yardstick', '~> 0.
|
30
|
-
gem '
|
29
|
+
gem 'yardstick', '~> 0.8.0'
|
30
|
+
gem 'mutant', '~> 0.2.5'
|
31
31
|
|
32
32
|
platforms :ruby_18, :ruby_19 do
|
33
33
|
# this indirectly depends on ffi which does not build on ruby-head
|
34
34
|
gem 'yard-spellcheck', '~> 0.1.5'
|
35
35
|
end
|
36
36
|
|
37
|
-
platforms :
|
38
|
-
gem '
|
39
|
-
gem 'fattr', '~> 2.2.0' # for metric_fu
|
40
|
-
gem 'json', '~> 1.7.3' # for metric_fu rake task
|
41
|
-
gem 'map', '~> 6.0.1' # for metric_fu
|
42
|
-
gem 'metric_fu', '~> 2.1.1'
|
43
|
-
gem 'mspec', '~> 1.5.17'
|
44
|
-
gem 'rcov', '~> 1.0.0'
|
37
|
+
platforms :mri_19 do
|
38
|
+
gem 'simplecov', '~> 0.7'
|
45
39
|
end
|
46
40
|
|
47
41
|
platforms :rbx do
|
48
42
|
gem 'pelusa', '~> 0.2.1'
|
49
|
-
gem 'anima', '~> 0.0.1', :git => 'https://github.com/mbj/anima.git'
|
50
43
|
end
|
51
44
|
end
|
data/lib/to_source/visitor.rb
CHANGED
@@ -148,6 +148,10 @@ module ToSource
|
|
148
148
|
#
|
149
149
|
def break(node)
|
150
150
|
emit('break')
|
151
|
+
if node.value.class != Rubinius::AST::NilLiteral
|
152
|
+
emit(' ')
|
153
|
+
dispatch(node.value)
|
154
|
+
end
|
151
155
|
end
|
152
156
|
|
153
157
|
# Emit next
|
@@ -1047,6 +1051,39 @@ module ToSource
|
|
1047
1051
|
end
|
1048
1052
|
end
|
1049
1053
|
|
1054
|
+
UNARY_OPERATORS = %w(
|
1055
|
+
! ~ -@ +@
|
1056
|
+
).map(&:to_sym).to_set.freeze
|
1057
|
+
|
1058
|
+
UNARY_MAPPING = {
|
1059
|
+
:-@ => :-,
|
1060
|
+
:+@ => :+,
|
1061
|
+
}.freeze
|
1062
|
+
|
1063
|
+
# Emit unary operator
|
1064
|
+
#
|
1065
|
+
# @param [Rubinius::AST::Node] node
|
1066
|
+
#
|
1067
|
+
# @return [true]
|
1068
|
+
# if node was emitted
|
1069
|
+
#
|
1070
|
+
# @return [false]
|
1071
|
+
# otherwise
|
1072
|
+
#
|
1073
|
+
# @api private
|
1074
|
+
#
|
1075
|
+
def unary_operator(node)
|
1076
|
+
name = node.name
|
1077
|
+
|
1078
|
+
if UNARY_OPERATORS.include?(name)
|
1079
|
+
emit(UNARY_MAPPING.fetch(name, name))
|
1080
|
+
dispatch(node.receiver)
|
1081
|
+
return true
|
1082
|
+
end
|
1083
|
+
|
1084
|
+
false
|
1085
|
+
end
|
1086
|
+
|
1050
1087
|
# Emit send node
|
1051
1088
|
#
|
1052
1089
|
# @param [Rubinius::AST::Node] node
|
@@ -1056,11 +1093,7 @@ module ToSource
|
|
1056
1093
|
# @api private
|
1057
1094
|
#
|
1058
1095
|
def send(node)
|
1059
|
-
if node
|
1060
|
-
emit('!')
|
1061
|
-
dispatch(node.receiver)
|
1062
|
-
return
|
1063
|
-
end
|
1096
|
+
return if unary_operator(node)
|
1064
1097
|
|
1065
1098
|
if receiver(node)
|
1066
1099
|
emit('.')
|
@@ -1141,10 +1174,7 @@ module ToSource
|
|
1141
1174
|
# @api private
|
1142
1175
|
#
|
1143
1176
|
def element_reference(node)
|
1144
|
-
|
1145
|
-
dispatch(node.receiver)
|
1146
|
-
end
|
1147
|
-
|
1177
|
+
dispatch(node.receiver)
|
1148
1178
|
arguments(node,'[',']')
|
1149
1179
|
end
|
1150
1180
|
|
@@ -1378,9 +1408,11 @@ module ToSource
|
|
1378
1408
|
# @api private
|
1379
1409
|
#
|
1380
1410
|
def and(node)
|
1411
|
+
emit('(')
|
1381
1412
|
dispatch(node.left)
|
1382
1413
|
emit(' && ')
|
1383
1414
|
dispatch(node.right)
|
1415
|
+
emit(')')
|
1384
1416
|
end
|
1385
1417
|
|
1386
1418
|
# Emit or
|
@@ -1392,9 +1424,11 @@ module ToSource
|
|
1392
1424
|
# @api private
|
1393
1425
|
#
|
1394
1426
|
def or(node)
|
1427
|
+
emit('(')
|
1395
1428
|
dispatch(node.left)
|
1396
1429
|
emit(' || ')
|
1397
1430
|
dispatch(node.right)
|
1431
|
+
emit(')')
|
1398
1432
|
end
|
1399
1433
|
|
1400
1434
|
# Emit and operation with assignment
|
@@ -1611,6 +1645,7 @@ module ToSource
|
|
1611
1645
|
if defaults
|
1612
1646
|
emit(', ') unless empty
|
1613
1647
|
dispatch(node.defaults)
|
1648
|
+
empty = false
|
1614
1649
|
end
|
1615
1650
|
|
1616
1651
|
if splat
|
@@ -1807,12 +1842,13 @@ module ToSource
|
|
1807
1842
|
|
1808
1843
|
operand = node.arguments.array[0]
|
1809
1844
|
|
1845
|
+
emit('(')
|
1810
1846
|
dispatch(node.receiver)
|
1811
1847
|
|
1812
1848
|
emit(" #{name.to_s} ")
|
1813
1849
|
dispatch(operand)
|
1814
1850
|
|
1815
|
-
|
1851
|
+
emit(')')
|
1816
1852
|
end
|
1817
1853
|
end
|
1818
1854
|
end
|
@@ -361,6 +361,10 @@ describe ToSource::Visitor,'.run' do
|
|
361
361
|
assert_source 'foo[index]'
|
362
362
|
end
|
363
363
|
|
364
|
+
context 'as element reference on self' do
|
365
|
+
assert_source 'self[foo]'
|
366
|
+
end
|
367
|
+
|
364
368
|
context 'without arguments' do
|
365
369
|
assert_source 'foo.bar'
|
366
370
|
end
|
@@ -501,6 +505,10 @@ describe ToSource::Visitor,'.run' do
|
|
501
505
|
assert_source 'break'
|
502
506
|
end
|
503
507
|
|
508
|
+
context 'break with arguments' do
|
509
|
+
assert_source 'break a'
|
510
|
+
end
|
511
|
+
|
504
512
|
context 'next' do
|
505
513
|
assert_source 'next'
|
506
514
|
end
|
@@ -534,43 +542,43 @@ describe ToSource::Visitor,'.run' do
|
|
534
542
|
context 'binary operators' do
|
535
543
|
%w(+ - * / & | && || << >> == === != <= < <=> > >= =~ !~ ^ **).each do |operator|
|
536
544
|
context "on literals #{operator}" do
|
537
|
-
assert_source "1 #{operator} 2"
|
545
|
+
assert_source "(1 #{operator} 2)"
|
538
546
|
end
|
539
547
|
|
540
548
|
context "on self #{operator}" do
|
541
|
-
assert_source "self #{operator} b"
|
549
|
+
assert_source "(self #{operator} b)"
|
542
550
|
end
|
543
551
|
|
544
552
|
context "on calls #{operator}" do
|
545
|
-
assert_source "a #{operator} b"
|
553
|
+
assert_source "(a #{operator} b)"
|
546
554
|
end
|
547
555
|
|
548
556
|
end
|
549
557
|
|
550
|
-
|
551
|
-
assert_source
|
558
|
+
context 'nested binary operators' do
|
559
|
+
assert_source '(a || (b || c))'
|
552
560
|
end
|
553
561
|
end
|
554
562
|
|
555
563
|
context 'expansion of shortcuts' do
|
556
564
|
context 'on += operator' do
|
557
|
-
assert_converts 'a = a + 2', 'a += 2'
|
565
|
+
assert_converts 'a = (a + 2)', 'a += 2'
|
558
566
|
end
|
559
567
|
|
560
568
|
context 'on -= operator' do
|
561
|
-
assert_converts 'a = a - 2', 'a -= 2'
|
569
|
+
assert_converts 'a = (a - 2)', 'a -= 2'
|
562
570
|
end
|
563
571
|
|
564
572
|
context 'on **= operator' do
|
565
|
-
assert_converts 'a = a ** 2', 'a **= 2'
|
573
|
+
assert_converts 'a = (a ** 2)', 'a **= 2'
|
566
574
|
end
|
567
575
|
|
568
576
|
context 'on *= operator' do
|
569
|
-
assert_converts 'a = a * 2', 'a *= 2'
|
577
|
+
assert_converts 'a = (a * 2)', 'a *= 2'
|
570
578
|
end
|
571
579
|
|
572
580
|
context 'on /= operator' do
|
573
|
-
assert_converts 'a = a / 2', 'a /= 2'
|
581
|
+
assert_converts 'a = (a / 2)', 'a /= 2'
|
574
582
|
end
|
575
583
|
|
576
584
|
context 'on &&= operator' do
|
@@ -591,19 +599,15 @@ describe ToSource::Visitor,'.run' do
|
|
591
599
|
assert_source '!!1'
|
592
600
|
end
|
593
601
|
|
594
|
-
|
595
|
-
assert_source '~a'
|
596
|
-
end
|
597
|
-
|
598
|
-
pending 'unary match' do
|
602
|
+
context 'unary match' do
|
599
603
|
assert_source '~a'
|
600
604
|
end
|
601
605
|
|
602
|
-
|
606
|
+
context 'unary minus' do
|
603
607
|
assert_source '-a'
|
604
608
|
end
|
605
609
|
|
606
|
-
|
610
|
+
context 'unary plus' do
|
607
611
|
assert_source '+a'
|
608
612
|
end
|
609
613
|
end
|
@@ -994,6 +998,22 @@ describe ToSource::Visitor,'.run' do
|
|
994
998
|
RUBY
|
995
999
|
end
|
996
1000
|
|
1001
|
+
context 'with optional and splat argument' do
|
1002
|
+
assert_source <<-RUBY
|
1003
|
+
def foo(baz = true, *bor)
|
1004
|
+
bar
|
1005
|
+
end
|
1006
|
+
RUBY
|
1007
|
+
end
|
1008
|
+
|
1009
|
+
context 'with optional and splat and block argument' do
|
1010
|
+
assert_source <<-RUBY
|
1011
|
+
def foo(baz = true, *bor, &block)
|
1012
|
+
bar
|
1013
|
+
end
|
1014
|
+
RUBY
|
1015
|
+
end
|
1016
|
+
|
997
1017
|
context 'with required optional and splat argument' do
|
998
1018
|
assert_source <<-RUBY
|
999
1019
|
def foo(bar, baz = true, *bor)
|
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.
|
4
|
+
s.version = '0.2.5'
|
5
5
|
s.authors = ['Josep M. Bach', 'Markus Schirp']
|
6
6
|
s.email = ['josep.m.bach@gmail.com', 'mbj@seonic.net']
|
7
7
|
s.homepage = 'http://github.com/txus/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.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-12-
|
13
|
+
date: 2012-12-14 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: adamantium
|