unparser 0.4.0 → 0.4.1

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: 52e96163f8fc7a9a3da3464e326997c9dc5a094225806e0f2fc72e0474a97026
4
- data.tar.gz: 719ac295c33e15c44cbe9bff91920536367b37409e71fb407f1fecef2cd69dbf
3
+ metadata.gz: 1a1bb0cdd1d53883d86ca04f7ef43abedd068cffbf9ba370a85debb33e260e73
4
+ data.tar.gz: 5cfbeb83a56f3d6d1b4d921c8257d7e26d653cc0732176b76523fe3c9d375d5c
5
5
  SHA512:
6
- metadata.gz: 661ff992d06f1c3f1ff05e66ecd789c08fc91432af9e082a036309a6d74bec83e99b58026f1e85080c86f2b8ab8d01de08bb8e743225e5204690670c9d0f280e
7
- data.tar.gz: 338124c08c6e241f70f587db3e149da9562dfd18550bae2e1f4d6afaa76f9e3b9d39dae37ca1d81e7ff97d50e246a2a56faa984edb4988c05e9e69d6880d12ba
6
+ metadata.gz: ceee1a92f66ede9bcc67e477ae4271c4b28b80e846f68f368a95f52cc0968a093fb9cc22f7502d84e2c2ff60b3807fa8f12a6e736c54247afef813a3e09724bf
7
+ data.tar.gz: 3be9bd24acdb9f195341660a9bf8bb85c34cf519102418fa4f19e747914c4421fdca6448903660ab6903fb6e5f3ef863c06ad0f40984021ba72265625ce322c2
@@ -1,4 +1,8 @@
1
- # v0.4.0 2018-12-01
1
+ # v0.4.0 2018-12-03
2
+
3
+ * Fix unparsing of `def foo(bar: bar())`
4
+
5
+ # v0.4.0 2018-12-03
2
6
 
3
7
  * Change to modern AST format.
4
8
  * Add experimental `Unparser.{parser,parse,parse_with_comments}`
data/Gemfile CHANGED
@@ -4,4 +4,4 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
- gem 'mutant', git: 'https://github.com/mbj/mutant', branch: 'change/to-modern-ast'
7
+ gem 'mutant', git: 'https://github.com/mbj/mutant'
@@ -1,7 +1,6 @@
1
1
  GIT
2
2
  remote: https://github.com/mbj/mutant
3
- revision: 6b36372385ec1bedc0d170470e65d7d33740769e
4
- branch: change/to-modern-ast
3
+ revision: fd6bfe89c6be85433d116b62d1b2407af3ff7804
5
4
  specs:
6
5
  mutant (0.8.20)
7
6
  abstract_type (~> 0.0.7)
@@ -17,7 +16,7 @@ GIT
17
16
  parser (~> 2.5.1)
18
17
  procto (~> 0.0.2)
19
18
  regexp_parser (~> 1.2)
20
- unparser (~> 0.3.0)
19
+ unparser (~> 0.4.0)
21
20
  mutant-rspec (0.8.20)
22
21
  mutant (~> 0.8.20)
23
22
  rspec-core (>= 3.4.0, < 4.0.0)
@@ -59,22 +58,22 @@ GEM
59
58
  equalizer (~> 0.0.9)
60
59
  descendants_tracker (0.0.4)
61
60
  thread_safe (~> 0.3, >= 0.3.1)
62
- devtools (0.1.21)
61
+ devtools (0.1.22)
63
62
  abstract_type (~> 0.0.7)
64
63
  adamantium (~> 0.2.0)
65
64
  anima (~> 0.3.0)
66
65
  concord (~> 0.1.5)
67
- flay (~> 2.10.0)
68
- flog (~> 4.6.1)
69
- mutant (~> 0.8.16)
70
- mutant-rspec (~> 0.8.16)
66
+ flay (~> 2.12.0)
67
+ flog (~> 4.6.2)
68
+ mutant (~> 0.8.19)
69
+ mutant-rspec (~> 0.8.19)
71
70
  procto (~> 0.0.3)
72
71
  rake (~> 12.3.0)
73
- reek (~> 5.0.2)
72
+ reek (~> 5.2.0)
74
73
  rspec (~> 3.8.0)
75
74
  rspec-core (~> 3.8.0)
76
75
  rspec-its (~> 1.2.0)
77
- rubocop (~> 0.59.0)
76
+ rubocop (~> 0.60.0)
78
77
  simplecov (~> 0.16.1)
79
78
  yard (~> 0.9.16)
80
79
  yardstick (~> 0.9.9)
@@ -82,7 +81,7 @@ GEM
82
81
  docile (1.3.1)
83
82
  equalizer (0.0.11)
84
83
  erubis (2.7.0)
85
- flay (2.10.0)
84
+ flay (2.12.0)
86
85
  erubis (~> 2.7.0)
87
86
  path_expander (~> 1.0)
88
87
  ruby_parser (~> 3.0)
@@ -114,7 +113,7 @@ GEM
114
113
  procto (0.0.3)
115
114
  rainbow (3.0.0)
116
115
  rake (12.3.1)
117
- reek (5.0.2)
116
+ reek (5.2.0)
118
117
  codeclimate-engine-rb (~> 0.4.0)
119
118
  kwalify (~> 0.7.0)
120
119
  parser (>= 2.5.0.0, < 2.6, != 2.5.1.1)
@@ -136,14 +135,14 @@ GEM
136
135
  diff-lcs (>= 1.2.0, < 2.0)
137
136
  rspec-support (~> 3.8.0)
138
137
  rspec-support (3.8.0)
139
- rubocop (0.59.2)
138
+ rubocop (0.60.0)
140
139
  jaro_winkler (~> 1.5.1)
141
140
  parallel (~> 1.10)
142
141
  parser (>= 2.5, != 2.5.1.1)
143
142
  powerpack (~> 0.1)
144
143
  rainbow (>= 2.2.2, < 4.0)
145
144
  ruby-progressbar (~> 1.7)
146
- unicode-display_width (~> 1.0, >= 1.0.1)
145
+ unicode-display_width (~> 1.4.0)
147
146
  ruby-progressbar (1.10.0)
148
147
  ruby_parser (3.11.0)
149
148
  sexp_processor (~> 4.9)
@@ -1,3 +1,3 @@
1
1
  ---
2
2
  threshold: 13
3
- total_score: 640
3
+ total_score: 645
@@ -116,3 +116,7 @@ Lint/BooleanSymbol:
116
116
 
117
117
  Style/AccessModifierDeclarations:
118
118
  Enabled: false
119
+
120
+ Layout/AlignHash:
121
+ EnforcedColonStyle: table
122
+ EnforcedHashRocketStyle: table
@@ -117,7 +117,6 @@ require 'unparser/emitter/send/unary'
117
117
  require 'unparser/emitter/send/binary'
118
118
  require 'unparser/emitter/send/regular'
119
119
  require 'unparser/emitter/send/conditional'
120
- require 'unparser/emitter/send/arguments'
121
120
  require 'unparser/emitter/send/attribute_assignment'
122
121
  require 'unparser/emitter/block'
123
122
  require 'unparser/emitter/assignment'
@@ -13,10 +13,16 @@ module Unparser
13
13
  CLOSE_NODES = (RESET_NODES + INHERIT_NODES).freeze
14
14
 
15
15
  # Nodes that assign a local variable
16
- #
17
- # FIXME: Kwargs are missing.
18
- #
19
- ASSIGN_NODES = %i[arg lvasgn optarg procarg0 restarg].freeze
16
+ ASSIGN_NODES =
17
+ %i[
18
+ arg
19
+ kwarg
20
+ kwoptarg
21
+ lvasgn
22
+ optarg
23
+ procarg0
24
+ restarg
25
+ ].to_set.freeze
20
26
 
21
27
  # Test for local variable inherited scope reset
22
28
  #
@@ -100,7 +100,7 @@ module Unparser
100
100
  include Terminated
101
101
 
102
102
  MAP = {
103
- blockarg: T_AMP,
103
+ blockarg: T_AMP,
104
104
  kwrestarg: T_DSPLAT
105
105
  }.freeze
106
106
 
@@ -159,13 +159,52 @@ module Unparser
159
159
  # @api private
160
160
  #
161
161
  def emit_arguments
162
- if arguments.empty? && receiver.nil? && local_variable_clash?
163
- write('()')
162
+ if arguments.empty?
163
+ write('()') if receiver.nil? && avoid_clash?
164
164
  else
165
- run(Arguments, n(:arguments, arguments))
165
+ normal_arguments
166
166
  end
167
167
  end
168
168
 
169
+ # Emit normal arguments
170
+ #
171
+ # @return [undefined]
172
+ #
173
+ # @api private
174
+ #
175
+ def normal_arguments
176
+ parentheses do
177
+ delimited_plain(effective_arguments)
178
+ end
179
+ end
180
+
181
+ # The effective arguments
182
+ #
183
+ # @return [Parser::AST::Node]
184
+ #
185
+ # @api private
186
+ #
187
+ def effective_arguments
188
+ last = arguments.length - 1
189
+ arguments.each_with_index.map do |argument, index|
190
+ if last.equal?(index) && argument.type.equal?(:hash) && argument.children.any?
191
+ argument.updated(:hash_body)
192
+ else
193
+ argument
194
+ end
195
+ end
196
+ end
197
+
198
+ # Test if clash with local variable or constant needs to be avoided
199
+ #
200
+ # @return [Boolean]
201
+ #
202
+ # @api private
203
+ #
204
+ def avoid_clash?
205
+ local_variable_clash? || parses_as_constant?
206
+ end
207
+
169
208
  # Test for local variable clash
170
209
  #
171
210
  # @return [Boolean]
@@ -185,6 +224,15 @@ module Unparser
185
224
  string_selector[NON_ASSIGN_RANGE]
186
225
  end
187
226
 
227
+ # Test if selector parses as constant
228
+ #
229
+ # @return [Boolean]
230
+ #
231
+ # @api private
232
+ #
233
+ def parses_as_constant?
234
+ Unparser.parse(selector.to_s).type.equal?(:const)
235
+ end
188
236
  end # Send
189
237
  end # Emitter
190
238
  end # Unparser
@@ -597,6 +597,10 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
597
597
  end.baz
598
598
  RUBY
599
599
 
600
+ assert_source <<~'RUBY'
601
+ FOO()
602
+ RUBY
603
+
600
604
  assert_terminated '(1..2).max'
601
605
  assert_terminated '1..2.max'
602
606
  assert_unterminated 'a || return'
@@ -1239,6 +1243,16 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
1239
1243
  end
1240
1244
  RUBY
1241
1245
 
1246
+ assert_source <<~'RUBY'
1247
+ def foo(bar: bar)
1248
+ end
1249
+ RUBY
1250
+
1251
+ assert_source <<~'RUBY'
1252
+ def foo(bar: bar())
1253
+ end
1254
+ RUBY
1255
+
1242
1256
  assert_source <<~'RUBY'
1243
1257
  def foo(*)
1244
1258
  bar
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = 'unparser'
3
- gem.version = '0.4.0'
3
+ gem.version = '0.4.1'
4
4
 
5
5
  gem.authors = ['Markus Schirp']
6
6
  gem.email = 'mbj@schirp-dso.com'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
@@ -235,7 +235,6 @@ files:
235
235
  - lib/unparser/emitter/retry.rb
236
236
  - lib/unparser/emitter/root.rb
237
237
  - lib/unparser/emitter/send.rb
238
- - lib/unparser/emitter/send/arguments.rb
239
238
  - lib/unparser/emitter/send/attribute_assignment.rb
240
239
  - lib/unparser/emitter/send/binary.rb
241
240
  - lib/unparser/emitter/send/conditional.rb
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Unparser
4
- class Emitter
5
- class Send
6
- # Emitter for arguments of send nodes
7
- class Arguments < Emitter
8
-
9
- private
10
-
11
- # Perform dispatch
12
- #
13
- # @return [undefined]
14
- #
15
- # @api private
16
- #
17
- def dispatch
18
- return if children.empty?
19
-
20
- parentheses do
21
- delimited_plain(effective_arguments)
22
- end
23
- end
24
-
25
- # Return effective arguments
26
- #
27
- # @return [Parser::AST::Node]
28
- #
29
- # @api private
30
- #
31
- def effective_arguments
32
- last = children.length - 1
33
- children.each_with_index.map do |argument, index|
34
- if last.equal?(index) && argument.type.equal?(:hash) && argument.children.any?
35
- argument.updated(:hash_body)
36
- else
37
- argument
38
- end
39
- end
40
- end
41
-
42
- end # Arguments
43
- end # Send
44
- end # Emitter
45
- end # Unparser