unparser 0.1.1 → 0.1.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 791317b7c757ff21dccc078c1dc82a53690194bb
4
+ data.tar.gz: 41cdfad7c83f3e88eae3cdf3351bb3830014345f
5
+ SHA512:
6
+ metadata.gz: ed041a27c4747aacd924ed08fc8118eb13be9d82ca598c597f9dbbc9d5e8de28c67a2812b285cf4cacb7c0b4dc2925c52c3f1940060cde6eeb0788b5d1c1137d
7
+ data.tar.gz: 1c55d2b791abf9ca336d78745f08f56e75d1ed92106c0fd08317f3d69524080a72a5b2a3e2102c0dd93e31ef027c267334d3e1caa0e7726fd3cc733d58be5f09
@@ -12,6 +12,8 @@ module Unparser
12
12
  ** %
13
13
  ).map(&:to_sym).to_set
14
14
 
15
+ COMMENT = '#'.freeze
16
+
15
17
  WS = ' '
16
18
  NL = "\n"
17
19
  T_DOT = '.'
@@ -78,7 +80,8 @@ module Unparser
78
80
  TERMINATED = [
79
81
  :int, :float, :self, :kwbegin, :const, :regexp, :args, :lvar,
80
82
  :ivar, :gvar, :cvar, :if, :case, :module, :class, :sclass, :super,
81
- :yield, :zsuper, :break, :next, :defined?, :str, :block
83
+ :yield, :zsuper, :break, :next, :defined?, :str, :block, :while, :loop, :until,
84
+ :def, :defs, :true, :false, :nil, :array, :hash, :sym, :return
82
85
  ].to_set
83
86
 
84
87
  KEYWORDS = constants.each_with_object([]) do |name, keywords|
@@ -121,14 +121,6 @@ module Unparser
121
121
  #
122
122
  abstract_method :dispatch
123
123
 
124
- # Return node
125
- #
126
- # @return [Parser::AST::Node] node
127
- #
128
- # @api private
129
- #
130
- attr_reader :node
131
-
132
124
  # Test if node is emitted as terminated expression
133
125
  #
134
126
  # @return [false]
@@ -404,6 +396,16 @@ module Unparser
404
396
  Parser::AST::Node.new(type, *children)
405
397
  end
406
398
 
399
+ # Helper to introduce comment
400
+ #
401
+ # @return [undefined]
402
+ #
403
+ # @api private
404
+ #
405
+ def comment
406
+ write(WS, COMMENT, WS)
407
+ end
408
+
407
409
  # Emitter that fully relies on parser source maps
408
410
  class SourceMap < self
409
411
 
@@ -21,6 +21,10 @@ module Unparser
21
21
  emit_superclass
22
22
  emit_body
23
23
  k_end
24
+ unless parent_type == :send
25
+ comment
26
+ visit(name)
27
+ end
24
28
  end
25
29
 
26
30
  # Emit superclass
@@ -20,6 +20,10 @@ module Unparser
20
20
  visit(name)
21
21
  emit_body
22
22
  k_end
23
+ if parent_type != :send
24
+ comment
25
+ visit(name)
26
+ end
23
27
  end
24
28
 
25
29
  end # Module
@@ -331,6 +331,28 @@ describe Unparser do
331
331
  assert_source '$var.bar'
332
332
  assert_source '"".bar'
333
333
  assert_source 'defined?(@foo).bar'
334
+ assert_source 'break.foo'
335
+ assert_source 'next.foo'
336
+ assert_source 'super(a).foo'
337
+ assert_source 'a || return'
338
+ assert_source 'super.foo'
339
+ assert_source 'nil.foo'
340
+ assert_source ':sym.foo'
341
+ assert_source '1.foo'
342
+ assert_source '1.0.foo'
343
+ assert_source '[].foo'
344
+ assert_source '{}.foo'
345
+ assert_source 'false.foo'
346
+ assert_source 'true.foo'
347
+ assert_source 'self.foo'
348
+ assert_source 'yield(a).foo'
349
+ assert_source 'yield.foo'
350
+ assert_source 'Foo::Bar.foo'
351
+ assert_source '::BAZ.foo'
352
+ assert_source 'array[i].foo'
353
+ assert_source '(array[i] = 1).foo'
354
+ assert_source 'array[1..2].foo'
355
+ assert_source '(a.attribute ||= foo).bar'
334
356
 
335
357
  assert_source <<-RUBY
336
358
  begin
@@ -349,16 +371,30 @@ describe Unparser do
349
371
  end.bar
350
372
  RUBY
351
373
 
352
- assert_source 'break.foo'
353
- assert_source 'next.foo'
354
- assert_source 'super(a).foo'
355
- assert_source 'super.foo'
356
- assert_source 'yield(a).foo'
357
- assert_source 'yield.foo'
358
- assert_source 'array[i].foo'
359
- assert_source '(array[i] = 1).foo'
360
- assert_source 'array[1..2].foo'
361
- assert_source '(a.attribute ||= foo).bar'
374
+ assert_source <<-RUBY
375
+ def self.foo
376
+ end.bar
377
+ RUBY
378
+
379
+ assert_source <<-RUBY
380
+ def foo
381
+ end.bar
382
+ RUBY
383
+
384
+ assert_source <<-RUBY
385
+ until foo
386
+ end.bar
387
+ RUBY
388
+
389
+ assert_source <<-RUBY
390
+ while foo
391
+ end.bar
392
+ RUBY
393
+
394
+ assert_source <<-RUBY
395
+ loop do
396
+ end.bar
397
+ RUBY
362
398
 
363
399
  assert_source <<-RUBY
364
400
  class Foo
@@ -827,7 +863,7 @@ describe Unparser do
827
863
  context 'class' do
828
864
  assert_source <<-RUBY
829
865
  class TestClass
830
- end
866
+ end # TestClass
831
867
  RUBY
832
868
 
833
869
  assert_source <<-RUBY
@@ -843,22 +879,22 @@ describe Unparser do
843
879
 
844
880
  assert_source <<-RUBY
845
881
  class SomeNameSpace::TestClass
846
- end
882
+ end # SomeNameSpace::TestClass
847
883
  RUBY
848
884
 
849
885
  assert_source <<-RUBY
850
886
  class Some::Name::Space::TestClass
851
- end
887
+ end # Some::Name::Space::TestClass
852
888
  RUBY
853
889
 
854
890
  assert_source <<-RUBY
855
891
  class TestClass < Object
856
- end
892
+ end # TestClass
857
893
  RUBY
858
894
 
859
895
  assert_source <<-RUBY
860
896
  class TestClass < SomeNameSpace::Object
861
- end
897
+ end # TestClass
862
898
  RUBY
863
899
 
864
900
  assert_source <<-RUBY
@@ -866,12 +902,12 @@ describe Unparser do
866
902
  def foo
867
903
  :bar
868
904
  end
869
- end
905
+ end # TestClass
870
906
  RUBY
871
907
 
872
908
  assert_source <<-RUBY
873
909
  class ::TestClass
874
- end
910
+ end # ::TestClass
875
911
  RUBY
876
912
  end
877
913
 
@@ -879,17 +915,17 @@ describe Unparser do
879
915
 
880
916
  assert_source <<-RUBY
881
917
  module TestModule
882
- end
918
+ end # TestModule
883
919
  RUBY
884
920
 
885
921
  assert_source <<-RUBY
886
922
  module SomeNameSpace::TestModule
887
- end
923
+ end # SomeNameSpace::TestModule
888
924
  RUBY
889
925
 
890
926
  assert_source <<-RUBY
891
927
  module Some::Name::Space::TestModule
892
- end
928
+ end # Some::Name::Space::TestModule
893
929
  RUBY
894
930
 
895
931
  assert_source <<-RUBY
@@ -897,7 +933,7 @@ describe Unparser do
897
933
  def foo
898
934
  :bar
899
935
  end
900
- end
936
+ end # TestModule
901
937
  RUBY
902
938
 
903
939
  end
@@ -975,10 +1011,10 @@ describe Unparser do
975
1011
  end
976
1012
 
977
1013
  context 'binary operator' do
978
- assert_source 'a || (break(foo))'
979
- assert_source '(break(foo)) || (a)'
980
- assert_source '(a || b).foo'
981
- assert_source 'a || (b || c)'
1014
+ assert_source 'a || (break(foo))'
1015
+ assert_source '(break(foo)) || a'
1016
+ assert_source '(a || b).foo'
1017
+ assert_source 'a || (b || c)'
982
1018
  end
983
1019
 
984
1020
  { :or => :'||', :and => :'&&' }.each do |word, symbol|
data/unparser.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'unparser'
5
- s.version = '0.1.1'
5
+ s.version = '0.1.2'
6
6
 
7
7
  s.authors = ['Markus Schirp']
8
8
  s.email = 'mbj@schir-dso.com'
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 0.1.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Markus Schirp
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-06 00:00:00.000000000 Z
11
+ date: 2013-09-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: parser
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: concord
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: adamantium
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: equalizer
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: abstract_type
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -184,27 +173,26 @@ files:
184
173
  homepage: http://github.com/mbj/unparser
185
174
  licenses:
186
175
  - MIT
176
+ metadata: {}
187
177
  post_install_message:
188
178
  rdoc_options: []
189
179
  require_paths:
190
180
  - lib
191
181
  required_ruby_version: !ruby/object:Gem::Requirement
192
- none: false
193
182
  requirements:
194
- - - ! '>='
183
+ - - '>='
195
184
  - !ruby/object:Gem::Version
196
185
  version: '0'
197
186
  required_rubygems_version: !ruby/object:Gem::Requirement
198
- none: false
199
187
  requirements:
200
- - - ! '>='
188
+ - - '>='
201
189
  - !ruby/object:Gem::Version
202
190
  version: '0'
203
191
  requirements: []
204
192
  rubyforge_project:
205
- rubygems_version: 1.8.23
193
+ rubygems_version: 2.0.2
206
194
  signing_key:
207
- specification_version: 3
195
+ specification_version: 4
208
196
  summary: Generate equivalent source for parser gem AST nodes
209
197
  test_files:
210
198
  - spec/spec_helper.rb