rufo 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rufo.rb +1 -0
- data/lib/rufo/backport.rb +29 -0
- data/lib/rufo/formatter.rb +83 -25
- data/lib/rufo/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c3067349b8d78ecb9c824cb5ffd701e036532ff
|
4
|
+
data.tar.gz: 27c3b81f7a251b93d318dd84fed77b136dbcb420
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bc69a1bf16c36c68f025a9593c00bc085cfeb004f0fcd2a7faafb2b289f07bd6d4d15d645dcaca7cb5fde6acf8e8c0050a5a0ccb8ccbd0382e853416ce442c3
|
7
|
+
data.tar.gz: b15595976259d23deeb7e2ef774e527ccfd1c95ef1880cdd6ec4ae05bf60e1e787d0334beaa36b01d7c7e0c1b7e87a9810837e13f860f0314357243a2531e1e4
|
data/lib/rufo.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Rufo::Backport
|
2
|
+
# Implement Enumerable#chunk_while
|
3
|
+
# if it's not available in the current Ruby version
|
4
|
+
def self.chunk_while(array)
|
5
|
+
results = []
|
6
|
+
current = []
|
7
|
+
first = true
|
8
|
+
last = nil
|
9
|
+
|
10
|
+
array.each do |elem|
|
11
|
+
if first
|
12
|
+
current << elem
|
13
|
+
first = false
|
14
|
+
else
|
15
|
+
if yield(last, elem)
|
16
|
+
current << elem
|
17
|
+
else
|
18
|
+
results << current
|
19
|
+
current = [elem]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
last = elem
|
23
|
+
end
|
24
|
+
|
25
|
+
results << current unless current.empty?
|
26
|
+
|
27
|
+
results
|
28
|
+
end
|
29
|
+
end
|
data/lib/rufo/formatter.rb
CHANGED
@@ -106,10 +106,15 @@ class Rufo::Formatter
|
|
106
106
|
# [:void_stmt]
|
107
107
|
skip_space_or_newline
|
108
108
|
when :@int
|
109
|
-
#
|
109
|
+
# Integer literal
|
110
110
|
#
|
111
111
|
# [:@int, "123", [1, 0]]
|
112
112
|
consume_token :on_int
|
113
|
+
when :@float
|
114
|
+
# Float literal
|
115
|
+
#
|
116
|
+
# [:@int, "123.45", [1, 0]]
|
117
|
+
consume_token :on_float
|
113
118
|
when :@gvar
|
114
119
|
# [:@gvar, "$abc", [1, 0]]
|
115
120
|
write node[1]
|
@@ -118,7 +123,7 @@ class Rufo::Formatter
|
|
118
123
|
# [:@backref, "$1", [1, 0]]
|
119
124
|
write node[1]
|
120
125
|
next_token
|
121
|
-
when :string_literal
|
126
|
+
when :string_literal, :xstring_literal
|
122
127
|
visit_string_literal node
|
123
128
|
when :string_concat
|
124
129
|
visit_string_concat node
|
@@ -141,6 +146,8 @@ class Rufo::Formatter
|
|
141
146
|
visit_string_interpolation node
|
142
147
|
when :symbol_literal
|
143
148
|
visit_symbol_literal(node)
|
149
|
+
when :symbol
|
150
|
+
visit_symbol(node)
|
144
151
|
when :dyna_symbol
|
145
152
|
visit_quoted_symbol_literal(node)
|
146
153
|
when :@ident
|
@@ -306,6 +313,10 @@ class Rufo::Formatter
|
|
306
313
|
visit_super(node)
|
307
314
|
when :defined
|
308
315
|
visit_defined(node)
|
316
|
+
when :alias
|
317
|
+
visit_alias(node)
|
318
|
+
when :mlhs_add_star
|
319
|
+
visit_mlhs_add_star(node)
|
309
320
|
else
|
310
321
|
bug "Unhandled node: #{node.first}"
|
311
322
|
end
|
@@ -379,6 +390,8 @@ class Rufo::Formatter
|
|
379
390
|
@heredocs << [@current_call, node, tilde]
|
380
391
|
return
|
381
392
|
end
|
393
|
+
elsif current_token_kind == :on_backtick
|
394
|
+
consume_token :on_backtick
|
382
395
|
else
|
383
396
|
consume_token :on_tstring_beg
|
384
397
|
end
|
@@ -393,9 +406,12 @@ class Rufo::Formatter
|
|
393
406
|
end
|
394
407
|
|
395
408
|
def visit_string_literal_end(node)
|
396
|
-
|
409
|
+
inner = node[1]
|
410
|
+
inner = inner[1..-1] unless node[0] == :xstring_literal
|
411
|
+
visit_exps(inner, false, false)
|
397
412
|
|
398
|
-
|
413
|
+
case current_token_kind
|
414
|
+
when :on_heredoc_end
|
399
415
|
heredoc, tilde = @current_heredoc
|
400
416
|
if heredoc && tilde
|
401
417
|
write_indent
|
@@ -404,6 +420,8 @@ class Rufo::Formatter
|
|
404
420
|
write current_token_value.rstrip
|
405
421
|
end
|
406
422
|
next_token
|
423
|
+
when :on_backtick
|
424
|
+
consume_token :on_backtick
|
407
425
|
else
|
408
426
|
consume_token :on_tstring_end
|
409
427
|
end
|
@@ -432,8 +450,19 @@ class Rufo::Formatter
|
|
432
450
|
# :foo
|
433
451
|
#
|
434
452
|
# [:symbol_literal, [:symbol, [:@ident, "foo", [1, 1]]]]
|
453
|
+
#
|
454
|
+
# A symbol literal not necessarily begins with `:`.
|
455
|
+
# For example, an `alias foo bar` will treat `foo`
|
456
|
+
# a as symbol_literal but without a `:symbol` child.
|
457
|
+
visit node[1]
|
458
|
+
end
|
459
|
+
|
460
|
+
def visit_symbol(node)
|
461
|
+
# :foo
|
462
|
+
#
|
463
|
+
# [:symbol, [:@ident, "foo", [1, 1]]]
|
435
464
|
consume_token :on_symbeg
|
436
|
-
visit_exps node[1
|
465
|
+
visit_exps node[1..-1], false, false
|
437
466
|
end
|
438
467
|
|
439
468
|
def visit_quoted_symbol_literal(node)
|
@@ -586,7 +615,7 @@ class Rufo::Formatter
|
|
586
615
|
# exp rescue handler
|
587
616
|
#
|
588
617
|
# [:if_mod, cond, body]
|
589
|
-
_,
|
618
|
+
_, body, cond = node
|
590
619
|
|
591
620
|
visit body
|
592
621
|
consume_space
|
@@ -1052,9 +1081,10 @@ class Rufo::Formatter
|
|
1052
1081
|
end
|
1053
1082
|
|
1054
1083
|
def visit_comma_separated_list(nodes, inside_call = false)
|
1055
|
-
#
|
1056
|
-
|
1057
|
-
|
1084
|
+
# When there's *x inside a left hand side assignment
|
1085
|
+
# or a case when, it comes as [:op, ...]
|
1086
|
+
if nodes[0].is_a?(Symbol)
|
1087
|
+
visit nodes
|
1058
1088
|
return
|
1059
1089
|
end
|
1060
1090
|
|
@@ -1358,10 +1388,12 @@ class Rufo::Formatter
|
|
1358
1388
|
|
1359
1389
|
if rest_param
|
1360
1390
|
# [:rest_param, [:@ident, "x", [1, 15]]]
|
1391
|
+
_, rest = rest_param
|
1392
|
+
|
1361
1393
|
write_params_comma if needs_comma
|
1362
1394
|
consume_op "*"
|
1363
1395
|
skip_space_or_newline
|
1364
|
-
visit
|
1396
|
+
visit rest if rest
|
1365
1397
|
needs_comma = true
|
1366
1398
|
end
|
1367
1399
|
|
@@ -1392,7 +1424,9 @@ class Rufo::Formatter
|
|
1392
1424
|
write_params_comma if needs_comma
|
1393
1425
|
consume_op "**"
|
1394
1426
|
skip_space_or_newline
|
1395
|
-
|
1427
|
+
|
1428
|
+
# A nameless double star comes as an... Integer? :-S
|
1429
|
+
visit double_star_param if double_star_param.is_a?(Array)
|
1396
1430
|
skip_space_or_newline
|
1397
1431
|
needs_comma = true
|
1398
1432
|
end
|
@@ -1461,7 +1495,7 @@ class Rufo::Formatter
|
|
1461
1495
|
# For %W it seems elements appear inside other arrays
|
1462
1496
|
# for some reason, so we flatten them
|
1463
1497
|
if elements[0].is_a?(Array) && elements[0][0].is_a?(Array)
|
1464
|
-
elements = elements.flat_map
|
1498
|
+
elements = elements.flat_map { |x| x }
|
1465
1499
|
end
|
1466
1500
|
|
1467
1501
|
write current_token_value.strip
|
@@ -1631,21 +1665,26 @@ class Rufo::Formatter
|
|
1631
1665
|
|
1632
1666
|
skip_space
|
1633
1667
|
|
1634
|
-
|
1635
|
-
|
1636
|
-
|
1637
|
-
|
1638
|
-
|
1668
|
+
# Sometimes args comes with an array...
|
1669
|
+
if args && args[0].is_a?(Array)
|
1670
|
+
visit_literal_elements args
|
1671
|
+
else
|
1672
|
+
if newline? || comment?
|
1673
|
+
needed_indent = next_indent
|
1674
|
+
if args
|
1675
|
+
consume_end_of_line
|
1676
|
+
write_indent(needed_indent)
|
1677
|
+
else
|
1678
|
+
skip_space_or_newline
|
1679
|
+
end
|
1639
1680
|
else
|
1640
|
-
|
1681
|
+
needed_indent = column
|
1641
1682
|
end
|
1642
|
-
else
|
1643
|
-
needed_indent = column
|
1644
|
-
end
|
1645
1683
|
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1684
|
+
if args
|
1685
|
+
indent(needed_indent) do
|
1686
|
+
visit args
|
1687
|
+
end
|
1649
1688
|
end
|
1650
1689
|
end
|
1651
1690
|
|
@@ -1856,6 +1895,17 @@ class Rufo::Formatter
|
|
1856
1895
|
end
|
1857
1896
|
end
|
1858
1897
|
|
1898
|
+
def visit_alias(node)
|
1899
|
+
# [:alias, from, to]
|
1900
|
+
_, from, to = node
|
1901
|
+
|
1902
|
+
consume_keyword "alias"
|
1903
|
+
consume_space
|
1904
|
+
visit from
|
1905
|
+
consume_space
|
1906
|
+
visit to
|
1907
|
+
end
|
1908
|
+
|
1859
1909
|
def visit_literal_elements(elements)
|
1860
1910
|
base_column = @column
|
1861
1911
|
|
@@ -2498,7 +2548,7 @@ class Rufo::Formatter
|
|
2498
2548
|
elements.reject! { |l, c, indent, id, off, ignore| ignore == :ignore }
|
2499
2549
|
|
2500
2550
|
# Chunk comments that are in consecutive lines
|
2501
|
-
chunks = elements
|
2551
|
+
chunks = chunk_while(elements) do |(l1, c1, i1, id1), (l2, c2, i2, id2)|
|
2502
2552
|
l1 + 1 == l2 && i1 == i2 && id1 == id2
|
2503
2553
|
end
|
2504
2554
|
|
@@ -2526,6 +2576,14 @@ class Rufo::Formatter
|
|
2526
2576
|
@output = lines.join
|
2527
2577
|
end
|
2528
2578
|
|
2579
|
+
def chunk_while(array, &block)
|
2580
|
+
if array.respond_to?(:chunk_while)
|
2581
|
+
array.chunk_while(&block)
|
2582
|
+
else
|
2583
|
+
Rufo::Backport.chunk_while(array, &block)
|
2584
|
+
end
|
2585
|
+
end
|
2586
|
+
|
2529
2587
|
def result
|
2530
2588
|
@output
|
2531
2589
|
end
|
data/lib/rufo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rufo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ary Borenszweig
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- bin/setup
|
73
73
|
- exe/rufo
|
74
74
|
- lib/rufo.rb
|
75
|
+
- lib/rufo/backport.rb
|
75
76
|
- lib/rufo/command.rb
|
76
77
|
- lib/rufo/formatter.rb
|
77
78
|
- lib/rufo/version.rb
|