rufo 0.13.0 → 0.15.0
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/.github/workflows/ci.yml +60 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +2 -1
- data/CHANGELOG.md +28 -0
- data/README.md +3 -3
- data/bin/verify-sample-code +2 -0
- data/lib/rufo/erb_formatter.rb +39 -2
- data/lib/rufo/formatter.rb +83 -65
- data/lib/rufo/version.rb +1 -1
- data/rufo.gemspec +7 -6
- metadata +17 -16
- data/.circleci/config.yml +0 -101
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1862ef1cb223254a0b735f6af30b3364045bd1c8673ad2c34ccd381571174377
|
4
|
+
data.tar.gz: 38d6908494f4a93cc527e914281e44c329dbec4b82a3ca4873acbf188856a559
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8d78360444224de4502c9f727171e7df9e4ff3344e48b28475d0cf9d92f53d6807755542db05c99d3eaa54cde3f6c2cbe5b67c7b1583d3d5e4346b4c93c7afa
|
7
|
+
data.tar.gz: f62ce1f77275410744f235c74a2293d838a5dfe6110768f6434735cc935e7520d6bc0511496e9d5c5912a945a783ac989c990a8bc8b7f61bfffb05c7055f7008
|
@@ -0,0 +1,60 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
pull_request:
|
8
|
+
schedule:
|
9
|
+
- cron: '0 0 * * 0'
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
test:
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby_version: ['3.2', '3.1', '3.0', '2.7']
|
17
|
+
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v3
|
20
|
+
|
21
|
+
- name: Setup Ruby
|
22
|
+
uses: ruby/setup-ruby@v1
|
23
|
+
with:
|
24
|
+
ruby-version: ${{ matrix.ruby_version }}
|
25
|
+
bundler-cache: true
|
26
|
+
|
27
|
+
- name: Bundle update
|
28
|
+
run: |
|
29
|
+
bundle update
|
30
|
+
|
31
|
+
- name: Run test
|
32
|
+
run: |
|
33
|
+
bundle exec rspec --profile 10 \
|
34
|
+
--format RspecJunitFormatter \
|
35
|
+
--out test_results/rspec.xml \
|
36
|
+
--format progress
|
37
|
+
|
38
|
+
- name: Upload code coverage
|
39
|
+
uses: codecov/codecov-action@v3
|
40
|
+
with:
|
41
|
+
files: ./coverage/coverage.xml
|
42
|
+
|
43
|
+
- name: Run rubocop
|
44
|
+
run: |
|
45
|
+
bundle exec rake rubocop
|
46
|
+
|
47
|
+
- name: Run rufo
|
48
|
+
run: |
|
49
|
+
bundle exec rake rufo:run
|
50
|
+
|
51
|
+
- name: Verify rufo works against sample codebases
|
52
|
+
run: |
|
53
|
+
bin/verify-sample-code
|
54
|
+
|
55
|
+
- name: Save test results
|
56
|
+
uses: actions/upload-artifact@v3
|
57
|
+
if: always()
|
58
|
+
with:
|
59
|
+
name: coverage-ruby-${{ matrix.ruby_version }}
|
60
|
+
path: coverage
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -12,6 +12,34 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
12
12
|
|
13
13
|
### Added
|
14
14
|
|
15
|
+
## [0.15.0] - 2023-02-08
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
|
19
|
+
### Changed
|
20
|
+
|
21
|
+
### Added
|
22
|
+
|
23
|
+
- Support for anonymous block argument forwarding
|
24
|
+
- Support for valueless hash literals and keyword arguments
|
25
|
+
- Support for anonymous rest and rest keyword arguments forwarding
|
26
|
+
|
27
|
+
## [0.14.0] - 2023-01-25
|
28
|
+
|
29
|
+
### Fixed
|
30
|
+
|
31
|
+
- Correctly interpret erb scriptlets with more than one control-flow/block statement
|
32
|
+
|
33
|
+
### Changed
|
34
|
+
|
35
|
+
- Dropped support for Ruby 2.6 as it is end of life.
|
36
|
+
|
37
|
+
### Added
|
38
|
+
|
39
|
+
- Support for partial argument forwarding. (issue [268](https://github.com/ruby-formatter/rufo/issues/268))
|
40
|
+
- Support for endless method. (issue [271](https://github.com/ruby-formatter/rufo/issues/271))
|
41
|
+
- Add Ruby 3.2.0 to test runs on CI.
|
42
|
+
|
15
43
|
## [0.13.0] - 2021-05-07
|
16
44
|
|
17
45
|
### Fixed
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Rufo
|
2
2
|
|
3
|
-
[](https://github.com/ruby-formatter/rufo/actions/workflows/ci.yml)
|
4
4
|
[](https://rubygems.org/gems/rufo)
|
5
5
|
|
6
6
|
**Ru**by **fo**rmatter
|
@@ -12,7 +12,7 @@ Unlike the best known Ruby formatter [RuboCop](https://github.com/bbatsov/ruboco
|
|
12
12
|
|
13
13
|
RuboCop does much more than just format code though, so feel free to run them both!
|
14
14
|
|
15
|
-
Rufo supports all Ruby versions >= 2.
|
15
|
+
Rufo supports all Ruby versions >= 2.7.0.
|
16
16
|
|
17
17
|
## Installation
|
18
18
|
|
@@ -35,7 +35,7 @@ Or install it system wide with:
|
|
35
35
|
Once the gem is installed, enable format on save integration in your editor of choice with the following libraries:
|
36
36
|
|
37
37
|
- Atom: [rufo-atom](https://github.com/bmulvihill/rufo-atom) :construction:
|
38
|
-
- Emacs [emacs-rufo](https://github.com/aleandros/emacs-rufo) :construction: or [rufo.el](https://github.com/danielma/rufo.el)
|
38
|
+
- Emacs [emacs-rufo](https://github.com/aleandros/emacs-rufo) :construction: or [rufo.el](https://github.com/danielma/rufo.el) or [run rufo with reformatter](https://gist.github.com/kzkn/5c80c24d39e5e7b7881d55ad04605c5b)
|
39
39
|
- Sublime Text: [sublime-rufo](https://github.com/ruby-formatter/sublime-rufo)
|
40
40
|
- Vim: [rufo-vim](https://github.com/splattael/rufo-vim)
|
41
41
|
- Visual Studio Code: [vscode-rufo](https://marketplace.visualstudio.com/items?itemName=mbessey.vscode-rufo) or [rufo-vscode](https://marketplace.visualstudio.com/items?itemName=siliconsenthil.rufo-vscode)
|
data/bin/verify-sample-code
CHANGED
@@ -9,6 +9,8 @@ repos = {
|
|
9
9
|
"spec/rspec/core/metadata_spec.rb",
|
10
10
|
"spec/rspec/core/formatters/html_formatter_spec.rb",
|
11
11
|
"spec/rspec/core/formatters_spec.rb",
|
12
|
+
"spec/rspec/core/formatters/documentation_formatter_spec.rb",
|
13
|
+
"spec/rspec/core/formatters/progress_formatter_spec.rb"
|
12
14
|
].join(","),
|
13
15
|
},
|
14
16
|
}
|
data/lib/rufo/erb_formatter.rb
CHANGED
@@ -104,11 +104,48 @@ class Rufo::ErbFormatter
|
|
104
104
|
result.strip
|
105
105
|
end
|
106
106
|
|
107
|
+
def format_affix(affix, levels, type)
|
108
|
+
string = ""
|
109
|
+
case type
|
110
|
+
when :prefix
|
111
|
+
count = 0
|
112
|
+
while count < levels
|
113
|
+
count += 1
|
114
|
+
string += (" " * Rufo::Formatter::INDENT_SIZE * (count > 0 ? count - 1 : 0)) + affix
|
115
|
+
string += "\n" if count < levels
|
116
|
+
end
|
117
|
+
when :suffix
|
118
|
+
count = levels
|
119
|
+
while count > 0
|
120
|
+
count -= 1
|
121
|
+
string += "\n"
|
122
|
+
string += (" " * Rufo::Formatter::INDENT_SIZE * (count > 0 ? count - 1 : 0)) + affix
|
123
|
+
end
|
124
|
+
end
|
125
|
+
string
|
126
|
+
end
|
127
|
+
|
107
128
|
def determine_code_wrappers(code_str)
|
108
|
-
|
129
|
+
keywords = Ripper.lex("#{code_str}").filter { |lex_token| lex_token[1] == :on_kw }
|
130
|
+
lexical_tokens = keywords.filter { |lex_token| lex_token[2] != "when" }.map { |lex_token| lex_token[3].to_s }
|
131
|
+
state_tally = lexical_tokens.group_by(&:itself).transform_values(&:count)
|
132
|
+
beg_token = state_tally["BEG"] || state_tally["EXPR_BEG"] || 0
|
133
|
+
end_token = state_tally["END"] || state_tally["EXPR_END"] || 0
|
134
|
+
depth = beg_token - end_token
|
135
|
+
|
136
|
+
if depth > 0
|
137
|
+
affix = format_affix("end", depth.abs, :suffix)
|
138
|
+
return nil, affix if Ripper.sexp("#{code_str}#{affix}")
|
139
|
+
end
|
140
|
+
|
109
141
|
return nil, "}" if Ripper.sexp("#{code_str} }")
|
110
142
|
return "{", nil if Ripper.sexp("{ #{code_str}")
|
111
|
-
|
143
|
+
|
144
|
+
if depth < 0
|
145
|
+
affix = format_affix("begin", depth.abs, :prefix)
|
146
|
+
return affix, nil if Ripper.sexp("#{affix}#{code_str}")
|
147
|
+
end
|
148
|
+
|
112
149
|
return "begin\n", "\nend" if Ripper.sexp("begin\n#{code_str}\nend")
|
113
150
|
return "if a\n", "\nend" if Ripper.sexp("if a\n#{code_str}\nend")
|
114
151
|
return "case a\n", "\nend" if Ripper.sexp("case a\n#{code_str}\nend")
|
data/lib/rufo/formatter.rb
CHANGED
@@ -227,12 +227,11 @@ class Rufo::Formatter
|
|
227
227
|
when :@CHAR
|
228
228
|
# [:@CHAR, "?a", [1, 0]]
|
229
229
|
consume_token :on_CHAR
|
230
|
-
when :@gvar
|
230
|
+
when :@gvar, :@backref, :@label, :@op
|
231
231
|
# [:@gvar, "$abc", [1, 0]]
|
232
|
-
write node[1]
|
233
|
-
next_token
|
234
|
-
when :@backref
|
235
232
|
# [:@backref, "$1", [1, 0]]
|
233
|
+
# [:@label, "foo:", [1, 3]]
|
234
|
+
# [:@op, "*", [1, 1]]
|
236
235
|
write node[1]
|
237
236
|
next_token
|
238
237
|
when :@backtick
|
@@ -289,11 +288,12 @@ class Rufo::Formatter
|
|
289
288
|
visit_quoted_symbol_literal(node)
|
290
289
|
when :@ident
|
291
290
|
consume_token :on_ident
|
292
|
-
when :var_ref
|
291
|
+
when :var_ref, :var_field, :const_ref, :vcall, :fcall
|
293
292
|
# [:var_ref, exp]
|
294
|
-
visit node[1]
|
295
|
-
when :var_field
|
296
293
|
# [:var_field, exp]
|
294
|
+
# [:const_ref, [:@const, "Foo", [1, 8]]]
|
295
|
+
# [:vcall, exp]
|
296
|
+
# [:fcall, [:@ident, "foo", [1, 0]]]
|
297
297
|
visit node[1]
|
298
298
|
when :@kw
|
299
299
|
# [:@kw, "nil", [1, 0]]
|
@@ -307,9 +307,6 @@ class Rufo::Formatter
|
|
307
307
|
when :@const
|
308
308
|
# [:@const, "FOO", [1, 0]]
|
309
309
|
consume_token :on_const
|
310
|
-
when :const_ref
|
311
|
-
# [:const_ref, [:@const, "Foo", [1, 8]]]
|
312
|
-
visit node[1]
|
313
310
|
when :top_const_ref
|
314
311
|
# [:top_const_ref, [:@const, "Foo", [1, 2]]]
|
315
312
|
consume_op "::"
|
@@ -319,9 +316,7 @@ class Rufo::Formatter
|
|
319
316
|
# [:top_const_field, [:@const, "Foo", [1, 2]]]
|
320
317
|
consume_op "::"
|
321
318
|
visit node[1]
|
322
|
-
when :const_path_ref
|
323
|
-
visit_path(node)
|
324
|
-
when :const_path_field
|
319
|
+
when :const_path_ref, :const_path_field
|
325
320
|
visit_path(node)
|
326
321
|
when :assign
|
327
322
|
visit_assign(node)
|
@@ -341,12 +336,6 @@ class Rufo::Formatter
|
|
341
336
|
visit_suffix(node, "until")
|
342
337
|
when :rescue_mod
|
343
338
|
visit_suffix(node, "rescue")
|
344
|
-
when :vcall
|
345
|
-
# [:vcall, exp]
|
346
|
-
visit node[1]
|
347
|
-
when :fcall
|
348
|
-
# [:fcall, [:@ident, "foo", [1, 0]]]
|
349
|
-
visit node[1]
|
350
339
|
when :command
|
351
340
|
visit_command(node)
|
352
341
|
when :command_call
|
@@ -422,10 +411,6 @@ class Rufo::Formatter
|
|
422
411
|
visit_hash_key_value(node)
|
423
412
|
when :assoc_splat
|
424
413
|
visit_splat_inside_hash(node)
|
425
|
-
when :@label
|
426
|
-
# [:@label, "foo:", [1, 3]]
|
427
|
-
write node[1]
|
428
|
-
next_token
|
429
414
|
when :dot2
|
430
415
|
visit_range(node, true)
|
431
416
|
when :dot3
|
@@ -452,10 +437,6 @@ class Rufo::Formatter
|
|
452
437
|
consume_keyword "yield"
|
453
438
|
when :yield
|
454
439
|
visit_yield(node)
|
455
|
-
when :@op
|
456
|
-
# [:@op, "*", [1, 1]]
|
457
|
-
write node[1]
|
458
|
-
next_token
|
459
440
|
when :lambda
|
460
441
|
visit_lambda(node)
|
461
442
|
when :zsuper
|
@@ -1456,14 +1437,10 @@ class Rufo::Formatter
|
|
1456
1437
|
# check for ||
|
1457
1438
|
if empty_params && !local_params
|
1458
1439
|
# Don't write || as it's meaningless
|
1459
|
-
|
1460
|
-
|
1461
|
-
|
1462
|
-
|
1463
|
-
next_token
|
1464
|
-
else
|
1465
|
-
next_token
|
1466
|
-
end
|
1440
|
+
next_token
|
1441
|
+
skip_space_or_newline
|
1442
|
+
check :on_op
|
1443
|
+
next_token
|
1467
1444
|
return
|
1468
1445
|
end
|
1469
1446
|
|
@@ -1520,6 +1497,9 @@ class Rufo::Formatter
|
|
1520
1497
|
consume_op "&"
|
1521
1498
|
skip_space_or_newline
|
1522
1499
|
visit block_arg
|
1500
|
+
elsif current_token_kind == :on_op && current_token_value == "&"
|
1501
|
+
consume_op "&"
|
1502
|
+
skip_space_or_newline
|
1523
1503
|
end
|
1524
1504
|
end
|
1525
1505
|
|
@@ -1548,7 +1528,10 @@ class Rufo::Formatter
|
|
1548
1528
|
write_indent(base_column) if needs_indent
|
1549
1529
|
consume_op "*"
|
1550
1530
|
skip_space_or_newline
|
1551
|
-
|
1531
|
+
# The name of rest arguments might be omitted.
|
1532
|
+
if star
|
1533
|
+
visit star
|
1534
|
+
end
|
1552
1535
|
|
1553
1536
|
if post_args && !post_args.empty?
|
1554
1537
|
write_params_comma
|
@@ -1575,7 +1558,12 @@ class Rufo::Formatter
|
|
1575
1558
|
|
1576
1559
|
line = @line
|
1577
1560
|
|
1578
|
-
|
1561
|
+
endless = body[0].is_a?(Symbol)
|
1562
|
+
if endless
|
1563
|
+
visit body
|
1564
|
+
else
|
1565
|
+
indent_body body
|
1566
|
+
end
|
1579
1567
|
|
1580
1568
|
while rescue_body
|
1581
1569
|
# [:rescue, type, name, body, more_rescue]
|
@@ -1620,7 +1608,7 @@ class Rufo::Formatter
|
|
1620
1608
|
end
|
1621
1609
|
|
1622
1610
|
write_indent if @line != line
|
1623
|
-
consume_keyword "end"
|
1611
|
+
consume_keyword "end" unless endless
|
1624
1612
|
end
|
1625
1613
|
|
1626
1614
|
def visit_rescue_types(node)
|
@@ -1996,6 +1984,19 @@ class Rufo::Formatter
|
|
1996
1984
|
# [:@ident, "foo", [1, 6]],
|
1997
1985
|
# [:params, nil, nil, nil, nil, nil, nil, nil],
|
1998
1986
|
# [:bodystmt, [[:void_stmt]], nil, nil, nil]]
|
1987
|
+
#
|
1988
|
+
# OR For endless methods (in 3.0)
|
1989
|
+
# [:def,
|
1990
|
+
# [:@ident, "foo", [1, 6]],
|
1991
|
+
# nil,
|
1992
|
+
# [:string_literal, [:string_content, [:@tstring_content, "bar", [1, 11]
|
1993
|
+
# OR For endless methods (in 3.1)
|
1994
|
+
# [:def,
|
1995
|
+
# [:@ident, "foo", [1, 6]],
|
1996
|
+
# nil,
|
1997
|
+
# [:bodystmt,
|
1998
|
+
# [:string_literal, [:string_content, [:@tstring_content, "bar", [1, 11]
|
1999
|
+
|
1999
2000
|
_, name, params, body = node
|
2000
2001
|
|
2001
2002
|
consume_keyword "def"
|
@@ -2032,6 +2033,7 @@ class Rufo::Formatter
|
|
2032
2033
|
def visit_def_from_name(name, params, body)
|
2033
2034
|
visit name
|
2034
2035
|
|
2036
|
+
params = [] if params.nil?
|
2035
2037
|
params = params[1] if params[0] == :paren
|
2036
2038
|
|
2037
2039
|
skip_space
|
@@ -2072,6 +2074,7 @@ class Rufo::Formatter
|
|
2072
2074
|
end
|
2073
2075
|
write ")"
|
2074
2076
|
next_token
|
2077
|
+
skip_space
|
2075
2078
|
end
|
2076
2079
|
elsif !empty_params?(params)
|
2077
2080
|
if parens_in_def == :yes
|
@@ -2085,9 +2088,18 @@ class Rufo::Formatter
|
|
2085
2088
|
skip_space
|
2086
2089
|
end
|
2087
2090
|
|
2091
|
+
format_endless_method if current_token_kind == :on_op
|
2092
|
+
|
2088
2093
|
visit body
|
2089
2094
|
end
|
2090
2095
|
|
2096
|
+
def format_endless_method
|
2097
|
+
consume_space
|
2098
|
+
consume_op "="
|
2099
|
+
consume_space
|
2100
|
+
skip_space
|
2101
|
+
end
|
2102
|
+
|
2091
2103
|
def empty_params?(node)
|
2092
2104
|
_, a, b, c, d, e, f, g = node
|
2093
2105
|
!a && !b && !c && !d && !e && !f && !g
|
@@ -2143,6 +2155,7 @@ class Rufo::Formatter
|
|
2143
2155
|
when 0, [:excessed_comma]
|
2144
2156
|
write_params_comma
|
2145
2157
|
when [:args_forward]
|
2158
|
+
write_params_comma if needs_comma
|
2146
2159
|
consume_op "..."
|
2147
2160
|
else
|
2148
2161
|
# [:rest_param, [:@ident, "x", [1, 15]]]
|
@@ -2179,22 +2192,31 @@ class Rufo::Formatter
|
|
2179
2192
|
|
2180
2193
|
if double_star_param
|
2181
2194
|
write_params_comma if needs_comma
|
2182
|
-
|
2183
|
-
|
2195
|
+
case double_star_param
|
2196
|
+
when [:args_forward] # may be [:args_forward] in 3.1.0
|
2197
|
+
consume_op "..."
|
2198
|
+
else
|
2199
|
+
consume_op "**" # here
|
2200
|
+
skip_space_or_newline
|
2184
2201
|
|
2185
|
-
|
2186
|
-
|
2187
|
-
|
2188
|
-
|
2202
|
+
# A nameless double star comes as an... Integer? :-S
|
2203
|
+
visit double_star_param if double_star_param.is_a?(Array)
|
2204
|
+
skip_space_or_newline
|
2205
|
+
needs_comma = true
|
2206
|
+
end
|
2189
2207
|
end
|
2190
2208
|
|
2191
|
-
|
2209
|
+
# In 3.1.0 blockarg may be just a symbol `:&`
|
2210
|
+
if blockarg && blockarg.is_a?(Array)
|
2192
2211
|
# [:blockarg, [:@ident, "block", [1, 16]]]
|
2193
2212
|
write_params_comma if needs_comma
|
2194
2213
|
skip_space_or_newline
|
2195
2214
|
consume_op "&"
|
2196
2215
|
skip_space_or_newline
|
2197
|
-
|
2216
|
+
# Ruby 3.1 or above, block arg might be anonymous
|
2217
|
+
if blockarg[1]
|
2218
|
+
visit blockarg[1]
|
2219
|
+
end
|
2198
2220
|
end
|
2199
2221
|
end
|
2200
2222
|
|
@@ -2371,16 +2393,21 @@ class Rufo::Formatter
|
|
2371
2393
|
arrow = symbol || !(key[0] == :@label || key[0] == :dyna_symbol)
|
2372
2394
|
|
2373
2395
|
visit key
|
2374
|
-
consume_space
|
2375
2396
|
|
2376
2397
|
# Don't output `=>` for keys that are `label: value`
|
2377
2398
|
# or `"label": value`
|
2378
2399
|
if arrow
|
2379
|
-
consume_op "=>"
|
2380
2400
|
consume_space
|
2401
|
+
consume_op "=>"
|
2381
2402
|
end
|
2382
2403
|
|
2383
|
-
|
2404
|
+
if value.nil?
|
2405
|
+
# The value for the key is omitted.
|
2406
|
+
skip_space
|
2407
|
+
else
|
2408
|
+
consume_space
|
2409
|
+
visit value
|
2410
|
+
end
|
2384
2411
|
end
|
2385
2412
|
|
2386
2413
|
def visit_splat_inside_hash(node)
|
@@ -2389,7 +2416,11 @@ class Rufo::Formatter
|
|
2389
2416
|
# [:assoc_splat, exp]
|
2390
2417
|
consume_op "**"
|
2391
2418
|
skip_space_or_newline
|
2392
|
-
|
2419
|
+
exp = node[1]
|
2420
|
+
# The name of rest kwargs might be omitted.
|
2421
|
+
if exp
|
2422
|
+
visit exp
|
2423
|
+
end
|
2393
2424
|
end
|
2394
2425
|
|
2395
2426
|
def visit_range(node, inclusive)
|
@@ -3188,13 +3219,6 @@ class Rufo::Formatter
|
|
3188
3219
|
last_space = current_token
|
3189
3220
|
next_token
|
3190
3221
|
when :on_nl, :on_ignored_nl
|
3191
|
-
# I don't know why but sometimes a on_ignored_nl
|
3192
|
-
# can appear with nil as the "text", and that's wrong
|
3193
|
-
if current_token[2].nil?
|
3194
|
-
next_token
|
3195
|
-
next
|
3196
|
-
end
|
3197
|
-
|
3198
3222
|
if last == :newline
|
3199
3223
|
# If we pass through consecutive newlines, don't print them
|
3200
3224
|
# yet, but remember this fact
|
@@ -3529,7 +3553,7 @@ class Rufo::Formatter
|
|
3529
3553
|
end
|
3530
3554
|
|
3531
3555
|
def write_indent(indent = @indent)
|
3532
|
-
@output << " " * indent
|
3556
|
+
@output << (" " * indent)
|
3533
3557
|
@column += indent
|
3534
3558
|
end
|
3535
3559
|
|
@@ -3874,7 +3898,7 @@ class Rufo::Formatter
|
|
3874
3898
|
# get line of node, it is only used in visit_hash right now,
|
3875
3899
|
# so handling the following node types is enough.
|
3876
3900
|
case node.first
|
3877
|
-
when :hash, :string_literal, :symbol_literal, :symbol, :vcall, :string_content, :assoc_splat, :var_ref
|
3901
|
+
when :hash, :string_literal, :symbol_literal, :symbol, :vcall, :string_content, :assoc_splat, :var_ref, :dyna_symbol
|
3878
3902
|
node_line(node[1], beginning: beginning)
|
3879
3903
|
when :assoc_new
|
3880
3904
|
# There's no line number info for empty strings or hashes.
|
@@ -3887,12 +3911,6 @@ class Rufo::Formatter
|
|
3887
3911
|
end
|
3888
3912
|
when :assoclist_from_args
|
3889
3913
|
node_line(beginning ? node[1][0] : node[1].last, beginning: beginning)
|
3890
|
-
when :dyna_symbol
|
3891
|
-
if node[1][0].is_a?(Symbol)
|
3892
|
-
node_line(node[1], beginning: beginning)
|
3893
|
-
else
|
3894
|
-
node_line(node[1][0], beginning: beginning)
|
3895
|
-
end
|
3896
3914
|
when :@label, :@int, :@ident, :@tstring_content, :@kw
|
3897
3915
|
node[2][0]
|
3898
3916
|
end
|
data/lib/rufo/version.rb
CHANGED
data/rufo.gemspec
CHANGED
@@ -20,16 +20,17 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.bindir = "exe"
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
|
-
spec.required_ruby_version = ">= 2.
|
23
|
+
spec.required_ruby_version = ">= 2.7.0"
|
24
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", ">= 1.15"
|
26
|
-
spec.add_development_dependency "byebug", "~> 11.
|
27
|
+
spec.add_development_dependency "byebug", "~> 11.1.3"
|
27
28
|
spec.add_development_dependency "guard-rspec", "~> 4.0"
|
28
29
|
spec.add_development_dependency "rake", "~> 13.0"
|
29
30
|
spec.add_development_dependency "rexml", "~> 3.2.5"
|
30
31
|
spec.add_development_dependency "rspec", "~> 3.0"
|
31
|
-
spec.add_development_dependency "rspec_junit_formatter", "~> 0.
|
32
|
-
spec.add_development_dependency "rubocop", "~>
|
33
|
-
spec.add_development_dependency "simplecov", "~> 0.
|
34
|
-
spec.add_development_dependency "simplecov-cobertura", "~>
|
32
|
+
spec.add_development_dependency "rspec_junit_formatter", "~> 0.6.0"
|
33
|
+
spec.add_development_dependency "rubocop", "~> 1.44.1"
|
34
|
+
spec.add_development_dependency "simplecov", "~> 0.22.0"
|
35
|
+
spec.add_development_dependency "simplecov-cobertura", "~> 2.1"
|
35
36
|
end
|
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.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ary Borenszweig
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 11.
|
33
|
+
version: 11.1.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 11.
|
40
|
+
version: 11.1.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: guard-rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,56 +100,56 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
103
|
+
version: 0.6.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
110
|
+
version: 0.6.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rubocop
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: 1.44.1
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: 1.44.1
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: simplecov
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.22.0
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.22.0
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: simplecov-cobertura
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: '2.1'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: '2.1'
|
153
153
|
description: Fast and unobtrusive Ruby code formatter
|
154
154
|
email:
|
155
155
|
- asterite@gmail.com
|
@@ -158,8 +158,8 @@ executables:
|
|
158
158
|
extensions: []
|
159
159
|
extra_rdoc_files: []
|
160
160
|
files:
|
161
|
-
- ".circleci/config.yml"
|
162
161
|
- ".github/PULL_REQUEST_TEMPLATE.md"
|
162
|
+
- ".github/workflows/ci.yml"
|
163
163
|
- ".gitignore"
|
164
164
|
- ".rspec"
|
165
165
|
- ".rubocop.yml"
|
@@ -193,7 +193,8 @@ files:
|
|
193
193
|
homepage: https://github.com/ruby-formatter/rufo
|
194
194
|
licenses:
|
195
195
|
- MIT
|
196
|
-
metadata:
|
196
|
+
metadata:
|
197
|
+
rubygems_mfa_required: 'true'
|
197
198
|
post_install_message:
|
198
199
|
rdoc_options: []
|
199
200
|
require_paths:
|
@@ -202,14 +203,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
202
203
|
requirements:
|
203
204
|
- - ">="
|
204
205
|
- !ruby/object:Gem::Version
|
205
|
-
version: 2.
|
206
|
+
version: 2.7.0
|
206
207
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
208
|
requirements:
|
208
209
|
- - ">="
|
209
210
|
- !ruby/object:Gem::Version
|
210
211
|
version: '0'
|
211
212
|
requirements: []
|
212
|
-
rubygems_version: 3.
|
213
|
+
rubygems_version: 3.4.1
|
213
214
|
signing_key:
|
214
215
|
specification_version: 4
|
215
216
|
summary: Ruby code formatter
|
data/.circleci/config.yml
DELETED
@@ -1,101 +0,0 @@
|
|
1
|
-
"-": &dockerbuild
|
2
|
-
steps:
|
3
|
-
- checkout
|
4
|
-
|
5
|
-
# Which version of ruby?
|
6
|
-
- run:
|
7
|
-
name: Which ruby?
|
8
|
-
command: ruby --version | tee ruby-version-for-ci.txt
|
9
|
-
|
10
|
-
# Which version of bundler?
|
11
|
-
- run:
|
12
|
-
name: Which bundler?
|
13
|
-
command: bundle -v
|
14
|
-
|
15
|
-
# Restore bundle cache
|
16
|
-
- restore_cache:
|
17
|
-
keys:
|
18
|
-
- bundler-packages-v2-{{ checksum "ruby-version-for-ci.txt" }}-{{ checksum "rufo.gemspec" }}-{{ checksum "bin/verify-sample-code" }}
|
19
|
-
|
20
|
-
- run:
|
21
|
-
name: Bundle Install
|
22
|
-
command: bundle check || bundle install
|
23
|
-
|
24
|
-
- run:
|
25
|
-
name: Run rspec
|
26
|
-
command: |
|
27
|
-
bundle exec rspec --profile 10 \
|
28
|
-
--format RspecJunitFormatter \
|
29
|
-
--out test_results/rspec.xml \
|
30
|
-
--format progress
|
31
|
-
- run:
|
32
|
-
name: Upload code coverage
|
33
|
-
command: bash <(curl -s https://codecov.io/bash) -f 'coverage/coverage.xml'
|
34
|
-
- run:
|
35
|
-
name: Run RuboCop
|
36
|
-
command: |
|
37
|
-
bundle exec rake rubocop
|
38
|
-
- run:
|
39
|
-
name: Run Rufo
|
40
|
-
command: |
|
41
|
-
bundle exec rake rufo:run
|
42
|
-
|
43
|
-
- run:
|
44
|
-
name: Verify rufo works against sample codebases
|
45
|
-
command: |
|
46
|
-
bin/verify-sample-code
|
47
|
-
|
48
|
-
# Store bundle cache
|
49
|
-
- save_cache:
|
50
|
-
key: bundler-packages-v2-{{ checksum "ruby-version-for-ci.txt" }}-{{ checksum "rufo.gemspec" }}-{{ checksum "bin/verify-sample-code" }}
|
51
|
-
paths:
|
52
|
-
- vendor/bundle
|
53
|
-
- Gemfile.lock
|
54
|
-
|
55
|
-
# Save test results for timing analysis
|
56
|
-
- store_test_results:
|
57
|
-
path: test_results
|
58
|
-
|
59
|
-
version: 2
|
60
|
-
jobs:
|
61
|
-
build-3-0-1:
|
62
|
-
<<: *dockerbuild
|
63
|
-
docker:
|
64
|
-
- image: circleci/ruby:3.0.1
|
65
|
-
environment:
|
66
|
-
BUNDLE_JOBS: "3"
|
67
|
-
BUNDLE_RETRY: "3"
|
68
|
-
BUNDLE_PATH: /home/circleci/project/vendor/bundle
|
69
|
-
build-2-7-3:
|
70
|
-
<<: *dockerbuild
|
71
|
-
docker:
|
72
|
-
- image: circleci/ruby:2.7.3
|
73
|
-
environment:
|
74
|
-
BUNDLE_JOBS: "3"
|
75
|
-
BUNDLE_RETRY: "3"
|
76
|
-
BUNDLE_PATH: /home/circleci/project/vendor/bundle
|
77
|
-
build-2-6-7:
|
78
|
-
<<: *dockerbuild
|
79
|
-
docker:
|
80
|
-
- image: circleci/ruby:2.6.7
|
81
|
-
environment:
|
82
|
-
BUNDLE_JOBS: "3"
|
83
|
-
BUNDLE_RETRY: "3"
|
84
|
-
BUNDLE_PATH: /home/circleci/project/vendor/bundle
|
85
|
-
build-2-6-1:
|
86
|
-
<<: *dockerbuild
|
87
|
-
docker:
|
88
|
-
- image: circleci/ruby:2.6.1
|
89
|
-
environment:
|
90
|
-
BUNDLE_JOBS: "3"
|
91
|
-
BUNDLE_RETRY: "3"
|
92
|
-
BUNDLE_PATH: vendor/bundle
|
93
|
-
|
94
|
-
workflows:
|
95
|
-
version: 2
|
96
|
-
test:
|
97
|
-
jobs:
|
98
|
-
- build-3-0-1
|
99
|
-
- build-2-7-3
|
100
|
-
- build-2-6-7
|
101
|
-
- build-2-6-1
|