rufo 0.15.1 → 0.16.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 +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +41 -19
- data/lib/rufo/erb_formatter.rb +1 -1
- data/lib/rufo/formatter.rb +351 -33
- data/lib/rufo/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a6b55f94b8276a2ca0dc8518aa98949e83f83a95adc25a039385cb6855bcbb1c
|
|
4
|
+
data.tar.gz: 03b7595cccdade48c215c3609726bd8a40a5ac72c66e6f64246e842a63f7729e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6c15b016ff6914844a2da86cf3af9ae257abdd9c421dfc4186d2eea39cfba919a2ac3ec489a1f539c59abd49452a5af511e2bca538adb7c62b346859bab3912b
|
|
7
|
+
data.tar.gz: aadada98b7acf84c40c147210655c54681d49b2d2079c76f6d44c19775676556cbf6545bc0754b4c037ba94478b31259f1236a464f60b15704f1e6ecbb98def7
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,28 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
12
12
|
|
|
13
13
|
### Added
|
|
14
14
|
|
|
15
|
+
## [0.16.1] - 2023-05-04
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Fix Bug: raises error while formatting pattern matching syntax ([#304](https://github.com/ruby-formatter/rufo/issues/304))
|
|
19
|
+
- Fix Bug: avoid inserting a unnecessary comma to end of heredoc which in array with method call ([#303](https://github.com/ruby-formatter/rufo/pull/303))
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
## [0.16.0] - 2023-04-02
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- Formats ERB files with configuration ([#275](https://github.com/ruby-formatter/rufo/issues/275))
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- Support for pattern matching syntax
|
|
36
|
+
|
|
15
37
|
## [0.15.1] - 2023-02-08
|
|
16
38
|
|
|
17
39
|
### Fixed
|
|
@@ -46,8 +68,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
46
68
|
|
|
47
69
|
### Added
|
|
48
70
|
|
|
49
|
-
- Support for partial argument forwarding. (
|
|
50
|
-
- Support for endless method. (
|
|
71
|
+
- Support for partial argument forwarding. ([#268](https://github.com/ruby-formatter/rufo/issues/268))
|
|
72
|
+
- Support for endless method. ([#271](https://github.com/ruby-formatter/rufo/issues/271))
|
|
51
73
|
- Add Ruby 3.2.0 to test runs on CI.
|
|
52
74
|
|
|
53
75
|
## [0.13.0] - 2021-05-07
|
|
@@ -72,7 +94,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
72
94
|
- File.read default encode UTF-8
|
|
73
95
|
- Handle case where the code is invalid but ripper does not raise an error.
|
|
74
96
|
- Removed implicit dependency on `rake`.
|
|
75
|
-
- Error when semicolon and then used in a case statement #230.
|
|
97
|
+
- Error when semicolon and then used in a case statement [#230](https://github.com/ruby-formatter/rufo/issues/230).
|
|
76
98
|
|
|
77
99
|
### Changed
|
|
78
100
|
|
|
@@ -163,22 +185,22 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
163
185
|
## [0.7.0] - 2019-04-28
|
|
164
186
|
|
|
165
187
|
### Fixed
|
|
166
|
-
- Argument align with splat (
|
|
188
|
+
- Argument align with splat ([#123](https://github.com/ruby-formatter/rufo/issues/123))
|
|
167
189
|
|
|
168
190
|
### Changed
|
|
169
191
|
|
|
170
192
|
### Added
|
|
171
|
-
- Support jbuilder files (
|
|
193
|
+
- Support jbuilder files ([#173](https://github.com/ruby-formatter/rufo/issues/173))
|
|
172
194
|
|
|
173
195
|
## [0.6.1] - 2019-04-27
|
|
174
196
|
|
|
175
197
|
### Fixed
|
|
176
|
-
- Fix bug: symbol literal like `:"foo"` in ruby 2.6.3 (
|
|
198
|
+
- Fix bug: symbol literal like `:"foo"` in ruby 2.6.3 ([#168](https://github.com/ruby-formatter/rufo/issues/168))
|
|
177
199
|
|
|
178
200
|
## [0.6.0] - 2019-03-04
|
|
179
201
|
|
|
180
202
|
### Fixed
|
|
181
|
-
- Fix odd indentation of nested one liner "if" statements (
|
|
203
|
+
- Fix odd indentation of nested one liner "if" statements ([#128](https://github.com/ruby-formatter/rufo/issues/128))
|
|
182
204
|
|
|
183
205
|
### Added
|
|
184
206
|
- Ignore `vendor` directories from files to be checked. This allows rufo to be run without any arguments against a directory both locally and on common CI tools without needing any configuration.
|
|
@@ -192,7 +214,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
192
214
|
|
|
193
215
|
### Fixed
|
|
194
216
|
|
|
195
|
-
- Fix bug: Rufo crashes on nested empty hash literal (
|
|
217
|
+
- Fix bug: Rufo crashes on nested empty hash literal ([#152](https://github.com/ruby-formatter/rufo/issues/152))
|
|
196
218
|
- Handle case where rufo would change formatting if run multiple times for hashes in some cases.
|
|
197
219
|
|
|
198
220
|
## [0.5.0] - 2019-02-09
|
|
@@ -210,7 +232,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
210
232
|
## [0.4.2] - 2019-01-22
|
|
211
233
|
|
|
212
234
|
### Fixed
|
|
213
|
-
- Fix bug: Rufo indents squiggly HEREDOC incorrectly causing bad formating (
|
|
235
|
+
- Fix bug: Rufo indents squiggly HEREDOC incorrectly causing bad formating ([#136](https://github.com/ruby-formatter/rufo/issues/136))
|
|
214
236
|
|
|
215
237
|
### Added
|
|
216
238
|
|
|
@@ -219,14 +241,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
219
241
|
## [0.4.1] - 2018-10-27
|
|
220
242
|
|
|
221
243
|
### Fixed
|
|
222
|
-
- Fix bug for double colon operator in method definition (
|
|
244
|
+
- Fix bug for double colon operator in method definition ([#120](https://github.com/ruby-formatter/rufo/issues/120))
|
|
223
245
|
|
|
224
246
|
## [0.4.0] - 2018-08-09
|
|
225
247
|
|
|
226
248
|
### Fixed
|
|
227
|
-
- Fix Bug: Rufo breaks HEREDOC syntax. (
|
|
228
|
-
- Fix Bug: formatter.rb:3700:in `block in adjust_other_alignments': undefined method `[]' for nil:NilClass (NoMethodError) (
|
|
229
|
-
- Fix Bug: Rufo keeps switching formatting on same file every time it runs (
|
|
249
|
+
- Fix Bug: Rufo breaks HEREDOC syntax. ([#88](https://github.com/ruby-formatter/rufo/issues/88)). This fixes heredoc within parens formatting causing bad formatting and subsequent syntax error.
|
|
250
|
+
- Fix Bug: formatter.rb:3700:in `block in adjust_other_alignments': undefined method `[]' for nil:NilClass (NoMethodError) ([#87](https://github.com/ruby-formatter/rufo/issues/87)). Check alignment target exists.
|
|
251
|
+
- Fix Bug: Rufo keeps switching formatting on same file every time it runs ([#86](https://github.com/ruby-formatter/rufo/issues/86)). Avoids re-indenting nested literal indents.
|
|
230
252
|
|
|
231
253
|
### Added
|
|
232
254
|
- Allow for simpler else_body node to suit new Ripper style in 2.6.0
|
|
@@ -238,7 +260,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
238
260
|
## [0.3.1] - 2018-04-12
|
|
239
261
|
|
|
240
262
|
### Fixed
|
|
241
|
-
- Fix `quote_style` config not being respected (
|
|
263
|
+
- Fix `quote_style` config not being respected ([#95](https://github.com/ruby-formatter/rufo/issues/95)).
|
|
242
264
|
|
|
243
265
|
## [0.3.0] - 2018-03-24
|
|
244
266
|
|
|
@@ -247,9 +269,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
247
269
|
- Normalize string quotes according to quote_style, which defaults to :double.
|
|
248
270
|
|
|
249
271
|
### Fixed
|
|
250
|
-
- Fix printing of extraneous trailing semicolons from inline classes, modules, methods (
|
|
251
|
-
- Fix unhandled white space between array getter/setters `x[0] [0]` (
|
|
252
|
-
- Fix comma printing for heredocs when inside a hash (
|
|
272
|
+
- Fix printing of extraneous trailing semicolons from inline classes, modules, methods ([#59](https://github.com/ruby-formatter/rufo/issues/59))
|
|
273
|
+
- Fix unhandled white space between array getter/setters `x[0] [0]` ([#62](https://github.com/ruby-formatter/rufo/issues/62))
|
|
274
|
+
- Fix comma printing for heredocs when inside a hash ([#61](https://github.com/ruby-formatter/rufo/issues/61))
|
|
253
275
|
- Fix array literals against changes to Ruby 2.5.0
|
|
254
276
|
|
|
255
277
|
## [0.2.0] - 2017-11-13
|
|
@@ -290,8 +312,8 @@ The following configuration options have been **removed**, and replaced with non
|
|
|
290
312
|
|
|
291
313
|
### Fixed
|
|
292
314
|
- Fix crash in Ruby <= 2.3.4, <= 2.4.1 in the presence of certain squiggly doc (`<<~`) with multiple embedded expressions. The real fix here is to upgrade Ruby to >= 2.3.5 / >= 2.4.2
|
|
293
|
-
- Fix dedent bug and bad formatting caused by comments within chained calls (
|
|
294
|
-
- Fix formatting bug for `for i, in [[1, 2]] ; x ; end` (
|
|
315
|
+
- Fix dedent bug and bad formatting caused by comments within chained calls ([#49](https://github.com/ruby-formatter/rufo/issues/49))
|
|
316
|
+
- Fix formatting bug for `for i, in [[1, 2]] ; x ; end` ([#45](https://github.com/ruby-formatter/rufo/issues/45))
|
|
295
317
|
|
|
296
318
|
## [0.1.0] - 2017-10-08
|
|
297
319
|
Beginning of logging changes!
|
data/lib/rufo/erb_formatter.rb
CHANGED
data/lib/rufo/formatter.rb
CHANGED
|
@@ -227,7 +227,7 @@ class Rufo::Formatter
|
|
|
227
227
|
when :@CHAR
|
|
228
228
|
# [:@CHAR, "?a", [1, 0]]
|
|
229
229
|
consume_token :on_CHAR
|
|
230
|
-
when :@
|
|
230
|
+
when :@backref, :@label, :@op
|
|
231
231
|
# [:@gvar, "$abc", [1, 0]]
|
|
232
232
|
# [:@backref, "$1", [1, 0]]
|
|
233
233
|
# [:@label, "foo:", [1, 3]]
|
|
@@ -287,6 +287,7 @@ class Rufo::Formatter
|
|
|
287
287
|
when :dyna_symbol
|
|
288
288
|
visit_quoted_symbol_literal(node)
|
|
289
289
|
when :@ident
|
|
290
|
+
consume_pin_op
|
|
290
291
|
consume_token :on_ident
|
|
291
292
|
when :var_ref, :var_field, :const_ref, :vcall, :fcall
|
|
292
293
|
# [:var_ref, exp]
|
|
@@ -300,10 +301,16 @@ class Rufo::Formatter
|
|
|
300
301
|
consume_token :on_kw
|
|
301
302
|
when :@ivar
|
|
302
303
|
# [:@ivar, "@foo", [1, 0]]
|
|
304
|
+
consume_pin_op
|
|
303
305
|
consume_token :on_ivar
|
|
304
306
|
when :@cvar
|
|
305
307
|
# [:@cvar, "@@foo", [1, 0]]
|
|
308
|
+
consume_pin_op
|
|
306
309
|
consume_token :on_cvar
|
|
310
|
+
when :@gvar
|
|
311
|
+
# [:@gvar, "$foo", [1, 0]]
|
|
312
|
+
consume_pin_op
|
|
313
|
+
consume_token :on_gvar
|
|
307
314
|
when :@const
|
|
308
315
|
# [:@const, "FOO", [1, 0]]
|
|
309
316
|
consume_token :on_const
|
|
@@ -377,7 +384,7 @@ class Rufo::Formatter
|
|
|
377
384
|
visit_until(node)
|
|
378
385
|
when :case
|
|
379
386
|
visit_case(node)
|
|
380
|
-
when :when
|
|
387
|
+
when :when, :in
|
|
381
388
|
visit_when(node)
|
|
382
389
|
when :unary
|
|
383
390
|
visit_unary(node)
|
|
@@ -470,6 +477,12 @@ class Rufo::Formatter
|
|
|
470
477
|
visit_end_node(node)
|
|
471
478
|
when :args_forward
|
|
472
479
|
consume_op("...")
|
|
480
|
+
when :aryptn
|
|
481
|
+
visit_array_pattern(node)
|
|
482
|
+
when :fndptn
|
|
483
|
+
visit_find_pattern(node)
|
|
484
|
+
when :hshptn
|
|
485
|
+
visit_hash_pattern(node)
|
|
473
486
|
else
|
|
474
487
|
bug "Unhandled node: #{node.first}"
|
|
475
488
|
end
|
|
@@ -587,8 +600,8 @@ class Rufo::Formatter
|
|
|
587
600
|
needs_comma = !comma? && trailing_commas
|
|
588
601
|
|
|
589
602
|
if inside_literal_elements_list && needs_comma
|
|
590
|
-
write ","
|
|
591
603
|
@last_was_heredoc = true
|
|
604
|
+
@end_of_heredoc_position = @output.length
|
|
592
605
|
end
|
|
593
606
|
|
|
594
607
|
@output << captured_output
|
|
@@ -1543,13 +1556,26 @@ class Rufo::Formatter
|
|
|
1543
1556
|
end
|
|
1544
1557
|
|
|
1545
1558
|
def visit_begin(node)
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1559
|
+
if op?("^")
|
|
1560
|
+
# ^(expression)
|
|
1561
|
+
#
|
|
1562
|
+
# [:begin, expression_node]
|
|
1563
|
+
consume_op "^"
|
|
1564
|
+
skip_space
|
|
1565
|
+
consume_token :on_lparen
|
|
1566
|
+
skip_space
|
|
1567
|
+
visit node[1]
|
|
1568
|
+
skip_space
|
|
1569
|
+
consume_token :on_rparen
|
|
1570
|
+
else
|
|
1571
|
+
# begin
|
|
1572
|
+
# body
|
|
1573
|
+
# end
|
|
1574
|
+
#
|
|
1575
|
+
# [:begin, [:bodystmt, body, rescue_body, else_body, ensure_body]]
|
|
1576
|
+
consume_keyword "begin"
|
|
1577
|
+
visit node[1]
|
|
1578
|
+
end
|
|
1553
1579
|
end
|
|
1554
1580
|
|
|
1555
1581
|
def visit_bodystmt(node)
|
|
@@ -1800,7 +1826,7 @@ class Rufo::Formatter
|
|
|
1800
1826
|
# Maybe a Ripper bug, but if there's something before a star
|
|
1801
1827
|
# then a star shouldn't be here... but if it is... handle it
|
|
1802
1828
|
# somehow...
|
|
1803
|
-
if
|
|
1829
|
+
if op?("*")
|
|
1804
1830
|
star = before
|
|
1805
1831
|
else
|
|
1806
1832
|
visit_comma_separated_list to_ary(before)
|
|
@@ -2353,7 +2379,7 @@ class Rufo::Formatter
|
|
|
2353
2379
|
token_column = current_token_column
|
|
2354
2380
|
|
|
2355
2381
|
closing_brace_token, _ = find_closing_brace_token
|
|
2356
|
-
need_space = need_space_for_hash?(node, closing_brace_token)
|
|
2382
|
+
need_space = need_space_for_hash?(node, node[1], closing_brace_token)
|
|
2357
2383
|
|
|
2358
2384
|
check :on_lbrace
|
|
2359
2385
|
write "{"
|
|
@@ -2733,7 +2759,7 @@ class Rufo::Formatter
|
|
|
2733
2759
|
visit_comma_separated_list exps
|
|
2734
2760
|
end
|
|
2735
2761
|
|
|
2736
|
-
def visit_literal_elements(elements, inside_hash: false, inside_array: false, token_column:)
|
|
2762
|
+
def visit_literal_elements(elements, inside_hash: false, inside_array: false, token_column:, keep_final_newline: false, &block)
|
|
2737
2763
|
base_column = @column
|
|
2738
2764
|
base_line = @line
|
|
2739
2765
|
needs_final_space = (inside_hash || inside_array) && space?
|
|
@@ -2770,6 +2796,7 @@ class Rufo::Formatter
|
|
|
2770
2796
|
wrote_comma = false
|
|
2771
2797
|
first_space = nil
|
|
2772
2798
|
|
|
2799
|
+
visitor = block_given? ? block : ->(elem) { visit elem }
|
|
2773
2800
|
elements.each_with_index do |elem, i|
|
|
2774
2801
|
@literal_elements_level = @node_level
|
|
2775
2802
|
|
|
@@ -2777,9 +2804,9 @@ class Rufo::Formatter
|
|
|
2777
2804
|
wrote_comma = false
|
|
2778
2805
|
|
|
2779
2806
|
if needs_trailing_comma
|
|
2780
|
-
indent(needed_indent) {
|
|
2807
|
+
indent(needed_indent) { visitor.call(elem) }
|
|
2781
2808
|
else
|
|
2782
|
-
|
|
2809
|
+
visitor.call(elem)
|
|
2783
2810
|
end
|
|
2784
2811
|
|
|
2785
2812
|
# We have to be careful not to aumatically write a heredoc on next_token,
|
|
@@ -2820,7 +2847,13 @@ class Rufo::Formatter
|
|
|
2820
2847
|
@literal_elements_level = nil
|
|
2821
2848
|
|
|
2822
2849
|
if needs_trailing_comma
|
|
2823
|
-
|
|
2850
|
+
if !wrote_comma && trailing_commas
|
|
2851
|
+
if @last_was_heredoc
|
|
2852
|
+
@output.insert(@end_of_heredoc_position, ",")
|
|
2853
|
+
else
|
|
2854
|
+
write ","
|
|
2855
|
+
end
|
|
2856
|
+
end
|
|
2824
2857
|
|
|
2825
2858
|
consume_end_of_line(first_space: first_space)
|
|
2826
2859
|
write_indent
|
|
@@ -2829,6 +2862,8 @@ class Rufo::Formatter
|
|
|
2829
2862
|
else
|
|
2830
2863
|
if needs_final_space
|
|
2831
2864
|
consume_space
|
|
2865
|
+
elsif keep_final_newline
|
|
2866
|
+
skip_space
|
|
2832
2867
|
else
|
|
2833
2868
|
skip_space_or_newline
|
|
2834
2869
|
end
|
|
@@ -2938,31 +2973,66 @@ class Rufo::Formatter
|
|
|
2938
2973
|
# [:case, cond, case_when]
|
|
2939
2974
|
_, cond, case_when = node
|
|
2940
2975
|
|
|
2941
|
-
|
|
2976
|
+
# If node is inline pattern matching, case_expression will be false
|
|
2977
|
+
case_expression = keyword?("case")
|
|
2978
|
+
if case_expression
|
|
2979
|
+
consume_keyword "case"
|
|
2980
|
+
end
|
|
2942
2981
|
|
|
2943
2982
|
if cond
|
|
2944
2983
|
consume_space
|
|
2945
2984
|
visit cond
|
|
2946
2985
|
end
|
|
2947
2986
|
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2987
|
+
if case_expression
|
|
2988
|
+
consume_end_of_line
|
|
2989
|
+
write_indent
|
|
2990
|
+
else
|
|
2991
|
+
consume_space
|
|
2992
|
+
end
|
|
2951
2993
|
visit case_when
|
|
2952
2994
|
|
|
2953
|
-
|
|
2954
|
-
|
|
2995
|
+
if case_expression
|
|
2996
|
+
write_indent
|
|
2997
|
+
consume_keyword "end"
|
|
2998
|
+
end
|
|
2955
2999
|
end
|
|
2956
3000
|
|
|
2957
3001
|
def visit_when(node)
|
|
2958
3002
|
# [:when, conds, body, next_exp]
|
|
2959
|
-
|
|
3003
|
+
# [:in, pattern, body, next_exp]
|
|
3004
|
+
kw, conds_or_pattern, body, next_exp = node
|
|
2960
3005
|
|
|
2961
|
-
|
|
3006
|
+
case kw
|
|
3007
|
+
when :when
|
|
3008
|
+
consume_keyword "when"
|
|
3009
|
+
when :in
|
|
3010
|
+
if current_token_kind == :on_op
|
|
3011
|
+
consume_op "=>"
|
|
3012
|
+
else
|
|
3013
|
+
consume_keyword "in"
|
|
3014
|
+
end
|
|
3015
|
+
end
|
|
2962
3016
|
consume_space
|
|
2963
3017
|
|
|
2964
3018
|
indent(@column) do
|
|
2965
|
-
|
|
3019
|
+
case kw
|
|
3020
|
+
when :when
|
|
3021
|
+
visit_comma_separated_list conds_or_pattern
|
|
3022
|
+
when :in
|
|
3023
|
+
parens = current_token_kind == :on_lparen
|
|
3024
|
+
if parens
|
|
3025
|
+
consume_token :on_lparen
|
|
3026
|
+
skip_space_or_newline
|
|
3027
|
+
end
|
|
3028
|
+
|
|
3029
|
+
visit conds_or_pattern
|
|
3030
|
+
|
|
3031
|
+
if parens
|
|
3032
|
+
skip_space_or_newline
|
|
3033
|
+
consume_token :on_rparen
|
|
3034
|
+
end
|
|
3035
|
+
end
|
|
2966
3036
|
skip_space
|
|
2967
3037
|
end
|
|
2968
3038
|
written_space = false
|
|
@@ -3020,12 +3090,15 @@ class Rufo::Formatter
|
|
|
3020
3090
|
end
|
|
3021
3091
|
end
|
|
3022
3092
|
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3093
|
+
# If node is inline pattern matching, body will be nil
|
|
3094
|
+
if body
|
|
3095
|
+
if inline
|
|
3096
|
+
indent do
|
|
3097
|
+
visit_exps body
|
|
3098
|
+
end
|
|
3099
|
+
else
|
|
3100
|
+
indent_body body
|
|
3026
3101
|
end
|
|
3027
|
-
else
|
|
3028
|
-
indent_body body
|
|
3029
3102
|
end
|
|
3030
3103
|
|
|
3031
3104
|
if next_exp
|
|
@@ -3056,6 +3129,232 @@ class Rufo::Formatter
|
|
|
3056
3129
|
end
|
|
3057
3130
|
end
|
|
3058
3131
|
|
|
3132
|
+
def visit_array_pattern(node)
|
|
3133
|
+
# [:aryptn, const_ref, pre_rest, rest, post_rest]
|
|
3134
|
+
_, const_ref, pre_rest, rest, post_rest = node
|
|
3135
|
+
|
|
3136
|
+
if const_ref
|
|
3137
|
+
return visit_constant_pattern(node)
|
|
3138
|
+
end
|
|
3139
|
+
|
|
3140
|
+
# pattern is [*]
|
|
3141
|
+
if !pre_rest && !post_rest && rest == [:var_field, nil]
|
|
3142
|
+
consume_token :on_lbracket
|
|
3143
|
+
skip_space_or_newline
|
|
3144
|
+
consume_op "*"
|
|
3145
|
+
skip_space_or_newline
|
|
3146
|
+
consume_token :on_rbracket
|
|
3147
|
+
return
|
|
3148
|
+
end
|
|
3149
|
+
|
|
3150
|
+
token_column = current_token_column
|
|
3151
|
+
|
|
3152
|
+
has_bracket = current_token_kind == :on_lbracket
|
|
3153
|
+
if has_bracket
|
|
3154
|
+
consume_token :on_lbracket
|
|
3155
|
+
skip_space
|
|
3156
|
+
end
|
|
3157
|
+
|
|
3158
|
+
write_comma = false
|
|
3159
|
+
if pre_rest
|
|
3160
|
+
visit_literal_elements pre_rest, inside_array: true, token_column: token_column, keep_final_newline: !has_bracket
|
|
3161
|
+
write_comma = true
|
|
3162
|
+
end
|
|
3163
|
+
|
|
3164
|
+
# pattern like `[a,]` will make `rest` as `[:var_field, nil]`
|
|
3165
|
+
if rest && ((var_name_node = rest[1]) || current_token_value == "*")
|
|
3166
|
+
if write_comma
|
|
3167
|
+
write ","
|
|
3168
|
+
consume_space
|
|
3169
|
+
else
|
|
3170
|
+
skip_space_or_newline
|
|
3171
|
+
end
|
|
3172
|
+
|
|
3173
|
+
consume_op "*"
|
|
3174
|
+
if var_name_node
|
|
3175
|
+
visit rest
|
|
3176
|
+
end
|
|
3177
|
+
end
|
|
3178
|
+
|
|
3179
|
+
if post_rest
|
|
3180
|
+
skip_space
|
|
3181
|
+
check :on_comma
|
|
3182
|
+
write ","
|
|
3183
|
+
consume_space
|
|
3184
|
+
next_token
|
|
3185
|
+
|
|
3186
|
+
visit_literal_elements post_rest, inside_array: true, token_column: token_column, keep_final_newline: !has_bracket
|
|
3187
|
+
end
|
|
3188
|
+
|
|
3189
|
+
skip_space
|
|
3190
|
+
if has_bracket
|
|
3191
|
+
consume_token :on_rbracket
|
|
3192
|
+
end
|
|
3193
|
+
end
|
|
3194
|
+
|
|
3195
|
+
def visit_constant_pattern(node)
|
|
3196
|
+
# [:aryptn, const_ref, args]
|
|
3197
|
+
_, const_ref, args = node
|
|
3198
|
+
|
|
3199
|
+
visit const_ref
|
|
3200
|
+
|
|
3201
|
+
parens = current_token_kind == :on_lparen
|
|
3202
|
+
if parens
|
|
3203
|
+
consume_token :on_lparen
|
|
3204
|
+
else
|
|
3205
|
+
consume_token :on_lbracket
|
|
3206
|
+
end
|
|
3207
|
+
|
|
3208
|
+
skip_space
|
|
3209
|
+
visit_comma_separated_list args
|
|
3210
|
+
|
|
3211
|
+
skip_space
|
|
3212
|
+
if parens
|
|
3213
|
+
consume_token :on_rparen
|
|
3214
|
+
else
|
|
3215
|
+
consume_token :on_rbracket
|
|
3216
|
+
end
|
|
3217
|
+
end
|
|
3218
|
+
|
|
3219
|
+
def visit_find_pattern(node)
|
|
3220
|
+
# [:fndptn, const_ref, pre, patterns, post]
|
|
3221
|
+
_, const_ref, pre, patterns, post = node
|
|
3222
|
+
|
|
3223
|
+
parens = if const_ref
|
|
3224
|
+
visit const_ref
|
|
3225
|
+
current_token_kind == :on_lparen
|
|
3226
|
+
else
|
|
3227
|
+
false
|
|
3228
|
+
end
|
|
3229
|
+
|
|
3230
|
+
if parens
|
|
3231
|
+
consume_token :on_lparen
|
|
3232
|
+
else
|
|
3233
|
+
consume_token :on_lbracket
|
|
3234
|
+
end
|
|
3235
|
+
|
|
3236
|
+
skip_space
|
|
3237
|
+
consume_op "*"
|
|
3238
|
+
if pre[1] # check pre has name or not
|
|
3239
|
+
visit pre
|
|
3240
|
+
end
|
|
3241
|
+
|
|
3242
|
+
patterns.each do |pattern|
|
|
3243
|
+
skip_space
|
|
3244
|
+
consume_token :on_comma
|
|
3245
|
+
consume_space
|
|
3246
|
+
visit pattern
|
|
3247
|
+
end
|
|
3248
|
+
|
|
3249
|
+
skip_space
|
|
3250
|
+
consume_token :on_comma
|
|
3251
|
+
consume_space
|
|
3252
|
+
consume_op "*"
|
|
3253
|
+
if post[1] # check post has name or not
|
|
3254
|
+
visit post
|
|
3255
|
+
end
|
|
3256
|
+
|
|
3257
|
+
skip_space
|
|
3258
|
+
if parens
|
|
3259
|
+
consume_token :on_rparen
|
|
3260
|
+
else
|
|
3261
|
+
consume_token :on_rbracket
|
|
3262
|
+
end
|
|
3263
|
+
end
|
|
3264
|
+
|
|
3265
|
+
def visit_hash_pattern(node)
|
|
3266
|
+
_, const_ref, elements, rest = node
|
|
3267
|
+
|
|
3268
|
+
if const_ref
|
|
3269
|
+
visit const_ref
|
|
3270
|
+
end
|
|
3271
|
+
|
|
3272
|
+
token_column = current_token_column
|
|
3273
|
+
|
|
3274
|
+
need_space = false
|
|
3275
|
+
expected_right_token = nil
|
|
3276
|
+
if const_ref
|
|
3277
|
+
if current_token_kind == :on_lparen
|
|
3278
|
+
consume_token :on_lparen
|
|
3279
|
+
expected_right_token = :on_rparen
|
|
3280
|
+
else
|
|
3281
|
+
consume_token :on_lbracket
|
|
3282
|
+
expected_right_token = :on_rbracket
|
|
3283
|
+
end
|
|
3284
|
+
elsif current_token_kind == :on_lbrace
|
|
3285
|
+
expected_right_token = :on_rbrace
|
|
3286
|
+
closing_brace_token, _ = find_closing_brace_token
|
|
3287
|
+
need_space = need_space_for_hash?(node, [*elements, rest].compact, closing_brace_token)
|
|
3288
|
+
|
|
3289
|
+
consume_token :on_lbrace
|
|
3290
|
+
brace_position = @output.length - 1
|
|
3291
|
+
consume_space if need_space
|
|
3292
|
+
end
|
|
3293
|
+
|
|
3294
|
+
# pattern is {}
|
|
3295
|
+
empty = !const_ref && !elements && !rest
|
|
3296
|
+
if empty
|
|
3297
|
+
consume_token :on_rbrace
|
|
3298
|
+
return
|
|
3299
|
+
end
|
|
3300
|
+
|
|
3301
|
+
# pattern is {**}
|
|
3302
|
+
empty = !const_ref && elements.empty? && !rest
|
|
3303
|
+
if empty
|
|
3304
|
+
consume_space
|
|
3305
|
+
consume_op "**"
|
|
3306
|
+
consume_space
|
|
3307
|
+
consume_token :on_rbrace
|
|
3308
|
+
return
|
|
3309
|
+
end
|
|
3310
|
+
|
|
3311
|
+
visit_literal_elements elements, inside_hash: true, token_column: token_column, keep_final_newline: expected_right_token.nil? do |element|
|
|
3312
|
+
key, value = element
|
|
3313
|
+
visit key
|
|
3314
|
+
if value
|
|
3315
|
+
consume_space
|
|
3316
|
+
visit value
|
|
3317
|
+
end
|
|
3318
|
+
end
|
|
3319
|
+
|
|
3320
|
+
if rest || op?("**") || comma?
|
|
3321
|
+
unless elements.empty?
|
|
3322
|
+
write ","
|
|
3323
|
+
end
|
|
3324
|
+
|
|
3325
|
+
skip_space_or_newline
|
|
3326
|
+
if rest || op?("**")
|
|
3327
|
+
consume_space
|
|
3328
|
+
consume_op "**"
|
|
3329
|
+
if rest
|
|
3330
|
+
visit rest
|
|
3331
|
+
end
|
|
3332
|
+
end
|
|
3333
|
+
end
|
|
3334
|
+
|
|
3335
|
+
unless expected_right_token.nil?
|
|
3336
|
+
skip_space
|
|
3337
|
+
|
|
3338
|
+
if expected_right_token == :on_rbrace
|
|
3339
|
+
# in some case, need_space_for_hash? might be unexpected behaviour for some patterns, example:
|
|
3340
|
+
# { a: 1,
|
|
3341
|
+
# ** }
|
|
3342
|
+
# so re-check need_space? at here, and insert a space in the missing position if needed.
|
|
3343
|
+
char_after_brace = @output[brace_position + 1]
|
|
3344
|
+
if !need_space && !["\n", " "].include?(char_after_brace)
|
|
3345
|
+
need_space = true
|
|
3346
|
+
@output.insert(brace_position + 1, " ")
|
|
3347
|
+
end
|
|
3348
|
+
end
|
|
3349
|
+
|
|
3350
|
+
check expected_right_token
|
|
3351
|
+
right = current_token_value
|
|
3352
|
+
write " " if need_space
|
|
3353
|
+
write right
|
|
3354
|
+
next_token
|
|
3355
|
+
end
|
|
3356
|
+
end
|
|
3357
|
+
|
|
3059
3358
|
def consume_space(want_preserve_whitespace: false)
|
|
3060
3359
|
first_space = skip_space
|
|
3061
3360
|
if want_preserve_whitespace && !newline? && !comment? && first_space
|
|
@@ -3407,6 +3706,13 @@ class Rufo::Formatter
|
|
|
3407
3706
|
end
|
|
3408
3707
|
end
|
|
3409
3708
|
|
|
3709
|
+
def consume_pin_op
|
|
3710
|
+
return unless op?("^")
|
|
3711
|
+
|
|
3712
|
+
consume_op "^"
|
|
3713
|
+
skip_space
|
|
3714
|
+
end
|
|
3715
|
+
|
|
3410
3716
|
def indent(value = nil)
|
|
3411
3717
|
if value
|
|
3412
3718
|
old_indent = @indent
|
|
@@ -3656,6 +3962,10 @@ class Rufo::Formatter
|
|
|
3656
3962
|
current_token_kind == :on_sp
|
|
3657
3963
|
end
|
|
3658
3964
|
|
|
3965
|
+
def op?(value)
|
|
3966
|
+
current_token_kind == :on_op && current_token_value == value
|
|
3967
|
+
end
|
|
3968
|
+
|
|
3659
3969
|
def void_exps?(node)
|
|
3660
3970
|
node.size == 1 && node[0].size == 1 && node[0][0] == :void_stmt
|
|
3661
3971
|
end
|
|
@@ -3887,8 +4197,8 @@ class Rufo::Formatter
|
|
|
3887
4197
|
end
|
|
3888
4198
|
|
|
3889
4199
|
# Check to see if need to add space inside hash literal braces.
|
|
3890
|
-
def need_space_for_hash?(node, closing_brace_token)
|
|
3891
|
-
return false
|
|
4200
|
+
def need_space_for_hash?(node, elements, closing_brace_token)
|
|
4201
|
+
return false if elements.nil? || elements.empty?
|
|
3892
4202
|
|
|
3893
4203
|
left_need_space = current_token_line == node_line(node, beginning: true)
|
|
3894
4204
|
right_need_space = closing_brace_token[0][0] == node_line(node, beginning: false)
|
|
@@ -3901,8 +4211,16 @@ class Rufo::Formatter
|
|
|
3901
4211
|
# get line of node, it is only used in visit_hash right now,
|
|
3902
4212
|
# so handling the following node types is enough.
|
|
3903
4213
|
case node.first
|
|
3904
|
-
when :hash, :string_literal, :symbol_literal, :symbol, :vcall, :string_content, :assoc_splat, :var_ref, :dyna_symbol
|
|
4214
|
+
when :hash, :string_literal, :symbol_literal, :symbol, :vcall, :string_content, :assoc_splat, :var_ref, :dyna_symbol, :var_field
|
|
3905
4215
|
node_line(node[1], beginning: beginning)
|
|
4216
|
+
when :hshptn
|
|
4217
|
+
_, _, elements, rest = node
|
|
4218
|
+
elem = if beginning
|
|
4219
|
+
(elements[0] && elements[0][0]) || rest
|
|
4220
|
+
else
|
|
4221
|
+
rest || elements.last[0]
|
|
4222
|
+
end
|
|
4223
|
+
node_line(elem, beginning: beginning)
|
|
3906
4224
|
when :assoc_new
|
|
3907
4225
|
# There's no line number info for empty strings or hashes.
|
|
3908
4226
|
if node[1] != EMPTY_STRING && node[1] != EMPTY_HASH
|
data/lib/rufo/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rufo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.16.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ary Borenszweig
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-05-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -210,7 +210,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
210
210
|
- !ruby/object:Gem::Version
|
|
211
211
|
version: '0'
|
|
212
212
|
requirements: []
|
|
213
|
-
rubygems_version: 3.
|
|
213
|
+
rubygems_version: 3.4.10
|
|
214
214
|
signing_key:
|
|
215
215
|
specification_version: 4
|
|
216
216
|
summary: Ruby code formatter
|