rufo 0.17.0 → 0.18.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 +1 -1
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +21 -0
- data/bin/verify-sample-code +2 -3
- data/lib/rufo/formatter.rb +9 -70
- data/lib/rufo/parser.rb +44 -0
- data/lib/rufo/version.rb +1 -1
- data/rufo.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2239283a440e83e68074430ba36c303f94701858ff8983394bf6eda08f588089
|
4
|
+
data.tar.gz: 141195447e27a7cc31b98f66b919142ffa46c49c5221617dcf9b3a6c3d25a306
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f71537f4b5741d60dc0b23ed49cff278708ce2d58901b07765be00c34ec87e6a9cba70963fe3e60beaa2bcf9281b03e15535f3b7df76b1cb81235dc18e3616b
|
7
|
+
data.tar.gz: '091c1fe438ad222e6958b5016543882a21e943cde22b56f7a10cc67baf356ae43d3d54646a7576530711e224ae915227c647c6d95c6d51709814432416036d00'
|
data/.github/workflows/ci.yml
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -12,6 +12,27 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
12
12
|
|
13
13
|
### Added
|
14
14
|
|
15
|
+
## [0.18.0] - 2024-05-30
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
- Fix error when formatting ERB ([#319](https://github.com/ruby-formatter/rufo/issues/319))
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
- Dropped support for Ruby 2.7 as it is end of life.
|
22
|
+
|
23
|
+
### Added
|
24
|
+
|
25
|
+
## [0.17.1] - 2024-02-03
|
26
|
+
|
27
|
+
### Fixed
|
28
|
+
- Fix incorrect indentation methods call with splat ([#320](https://github.com/ruby-formatter/rufo/pull/320))
|
29
|
+
|
30
|
+
### Changed
|
31
|
+
- Remove unused internal methods from `Rufo::Formatter` ([#321](https://github.com/ruby-formatter/rufo/pull/321))
|
32
|
+
- This change may affect behavior with versions of Ruby not currently supported by Rufo (< 2.7)
|
33
|
+
|
34
|
+
### Added
|
35
|
+
|
15
36
|
## [0.17.0] - 2024-01-06
|
16
37
|
|
17
38
|
### Fixed
|
data/bin/verify-sample-code
CHANGED
data/lib/rufo/formatter.rb
CHANGED
@@ -18,6 +18,7 @@ class Rufo::Formatter
|
|
18
18
|
|
19
19
|
@tokens = Rufo::Parser.lex(code).reverse!
|
20
20
|
@sexp = Rufo::Parser.sexp(code)
|
21
|
+
@sexp ||= Rufo::Parser.sexp_unparsable_code(code)
|
21
22
|
|
22
23
|
# sexp being nil means that the code is not valid.
|
23
24
|
# Parse the code so we get better error messages.
|
@@ -396,8 +397,6 @@ class Rufo::Formatter
|
|
396
397
|
visit_module(node)
|
397
398
|
when :mrhs_new_from_args
|
398
399
|
visit_mrhs_new_from_args(node)
|
399
|
-
when :mlhs_paren
|
400
|
-
visit_mlhs_paren(node)
|
401
400
|
when :mlhs
|
402
401
|
visit_mlhs(node)
|
403
402
|
when :mrhs_add_star
|
@@ -457,8 +456,6 @@ class Rufo::Formatter
|
|
457
456
|
visit_alias(node)
|
458
457
|
when :undef
|
459
458
|
visit_undef(node)
|
460
|
-
when :mlhs_add_star
|
461
|
-
visit_mlhs_add_star(node)
|
462
459
|
when :rest_param
|
463
460
|
visit_rest_param(node)
|
464
461
|
when :kwrest_param
|
@@ -906,26 +903,6 @@ class Rufo::Formatter
|
|
906
903
|
end
|
907
904
|
end
|
908
905
|
|
909
|
-
def indentable_value?(value)
|
910
|
-
return unless current_token_kind == :on_kw
|
911
|
-
|
912
|
-
case current_token_value
|
913
|
-
when "if", "unless", "case"
|
914
|
-
true
|
915
|
-
when "begin"
|
916
|
-
# Only indent if it's begin/rescue
|
917
|
-
return false unless value[0] == :begin
|
918
|
-
|
919
|
-
body = value[1]
|
920
|
-
return false unless body[0] == :bodystmt
|
921
|
-
|
922
|
-
_, _, rescue_body, else_body, ensure_body = body
|
923
|
-
rescue_body || else_body || ensure_body
|
924
|
-
else
|
925
|
-
false
|
926
|
-
end
|
927
|
-
end
|
928
|
-
|
929
906
|
def current_comment_aligned_to_previous_one?
|
930
907
|
@last_comment &&
|
931
908
|
@last_comment[0][0] + 1 == current_token_line &&
|
@@ -1541,7 +1518,8 @@ class Rufo::Formatter
|
|
1541
1518
|
|
1542
1519
|
skip_space
|
1543
1520
|
|
1544
|
-
write_params_comma
|
1521
|
+
# Disable indentation in write_params_comma to avoid double indentation with write_indent
|
1522
|
+
write_params_comma(with_indent: !needs_indent) if comma?
|
1545
1523
|
write_indent(base_column) if needs_indent
|
1546
1524
|
consume_op "*"
|
1547
1525
|
skip_space_or_newline
|
@@ -1551,7 +1529,8 @@ class Rufo::Formatter
|
|
1551
1529
|
end
|
1552
1530
|
|
1553
1531
|
if post_args && !post_args.empty?
|
1554
|
-
write_params_comma
|
1532
|
+
# Disable indentation in write_params_comma to avoid double indentation with visit_comma_separated_list
|
1533
|
+
write_params_comma(with_indent: !needs_indent)
|
1555
1534
|
visit_comma_separated_list post_args, needs_indent: needs_indent, base_column: base_column
|
1556
1535
|
end
|
1557
1536
|
end
|
@@ -1659,23 +1638,10 @@ class Rufo::Formatter
|
|
1659
1638
|
end
|
1660
1639
|
end
|
1661
1640
|
|
1662
|
-
def visit_mlhs_paren(node)
|
1663
|
-
# [:mlhs_paren,
|
1664
|
-
# [[:mlhs_paren, [:@ident, "x", [1, 12]]]]
|
1665
|
-
# ]
|
1666
|
-
_, args = node
|
1667
|
-
|
1668
|
-
visit_mlhs_or_mlhs_paren(args)
|
1669
|
-
end
|
1670
|
-
|
1671
1641
|
def visit_mlhs(node)
|
1672
1642
|
# [:mlsh, *args]
|
1673
1643
|
_, *args = node
|
1674
1644
|
|
1675
|
-
visit_mlhs_or_mlhs_paren(args)
|
1676
|
-
end
|
1677
|
-
|
1678
|
-
def visit_mlhs_or_mlhs_paren(args)
|
1679
1645
|
# Sometimes a paren comes, some times not, so act accordingly.
|
1680
1646
|
has_paren = current_token_kind == :on_lparen
|
1681
1647
|
if has_paren
|
@@ -1819,35 +1785,6 @@ class Rufo::Formatter
|
|
1819
1785
|
end
|
1820
1786
|
end
|
1821
1787
|
|
1822
|
-
def visit_mlhs_add_star(node)
|
1823
|
-
# [:mlhs_add_star, before, star, after]
|
1824
|
-
_, before, star, after = node
|
1825
|
-
|
1826
|
-
if before && !before.empty?
|
1827
|
-
# Maybe a Ripper bug, but if there's something before a star
|
1828
|
-
# then a star shouldn't be here... but if it is... handle it
|
1829
|
-
# somehow...
|
1830
|
-
if op?("*")
|
1831
|
-
star = before
|
1832
|
-
else
|
1833
|
-
visit_comma_separated_list to_ary(before)
|
1834
|
-
write_params_comma
|
1835
|
-
end
|
1836
|
-
end
|
1837
|
-
|
1838
|
-
consume_op "*"
|
1839
|
-
|
1840
|
-
if star
|
1841
|
-
skip_space_or_newline
|
1842
|
-
visit star
|
1843
|
-
end
|
1844
|
-
|
1845
|
-
if after && !after.empty?
|
1846
|
-
write_params_comma
|
1847
|
-
visit_comma_separated_list after
|
1848
|
-
end
|
1849
|
-
end
|
1850
|
-
|
1851
1788
|
def visit_rest_param(node)
|
1852
1789
|
# [:rest_param, name]
|
1853
1790
|
|
@@ -2250,12 +2187,14 @@ class Rufo::Formatter
|
|
2250
2187
|
end
|
2251
2188
|
end
|
2252
2189
|
|
2253
|
-
def write_params_comma
|
2190
|
+
def write_params_comma(with_indent: true)
|
2254
2191
|
skip_space
|
2255
2192
|
check :on_comma
|
2256
2193
|
write ","
|
2257
2194
|
next_token
|
2258
|
-
|
2195
|
+
|
2196
|
+
indent_size = with_indent ? @indent : 0
|
2197
|
+
skip_space_or_newline_using_setting(:one, indent_size)
|
2259
2198
|
end
|
2260
2199
|
|
2261
2200
|
def visit_array(node)
|
data/lib/rufo/parser.rb
CHANGED
@@ -10,4 +10,48 @@ class Rufo::Parser < Ripper
|
|
10
10
|
def on_parse_error(msg)
|
11
11
|
raise ::Rufo::SyntaxError.new(msg, lineno)
|
12
12
|
end
|
13
|
+
|
14
|
+
def self.sexp_unparsable_code(code)
|
15
|
+
code_type = detect_unparsable_code_type(code)
|
16
|
+
|
17
|
+
case code_type
|
18
|
+
when :yield
|
19
|
+
extract_original_code_sexp(
|
20
|
+
"def __rufo_dummy; #{code}; end",
|
21
|
+
->(exp) { exp => [:def, *, [:bodystmt, exps, *]]; exps }
|
22
|
+
)
|
23
|
+
when :next, :break, :redo
|
24
|
+
extract_original_code_sexp(
|
25
|
+
"loop do; #{code}; end",
|
26
|
+
->(exp) { exp => [:method_add_block, *, [:do_block, nil, [:bodystmt, [[:void_stmt], *exps], *]]]; exps }
|
27
|
+
)
|
28
|
+
when :retry
|
29
|
+
extract_original_code_sexp(
|
30
|
+
"begin; rescue; #{code}; end",
|
31
|
+
->(exp) { exp => [:begin, [:bodystmt, Array, [:rescue, nil, nil, exps, *], *]]; exps }
|
32
|
+
)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.detect_unparsable_code_type(code)
|
37
|
+
tokens = self.lex(code)
|
38
|
+
token = tokens.find { |_, kind| kind != :on_sp && kind != :on_ignored_nl }
|
39
|
+
|
40
|
+
case token
|
41
|
+
in [_, :on_kw, "yield" | "next" | "break" | "retry" | "redo" => kw, _]
|
42
|
+
kw.to_sym
|
43
|
+
else
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.extract_original_code_sexp(decorated_code, extractor)
|
49
|
+
sexp = self.sexp(decorated_code)
|
50
|
+
return nil unless sexp
|
51
|
+
|
52
|
+
# [:program, [exp]]
|
53
|
+
exp = sexp[1][0]
|
54
|
+
code_exps = extractor.call(exp)
|
55
|
+
[:program, code_exps]
|
56
|
+
end
|
13
57
|
end
|
data/lib/rufo/version.rb
CHANGED
data/rufo.gemspec
CHANGED
@@ -20,7 +20,7 @@ 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 = ">=
|
23
|
+
spec.required_ruby_version = ">= 3.0.0"
|
24
24
|
spec.metadata["rubygems_mfa_required"] = "true"
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", ">= 1.15"
|
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.18.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: 2024-
|
11
|
+
date: 2024-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -203,14 +203,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
203
203
|
requirements:
|
204
204
|
- - ">="
|
205
205
|
- !ruby/object:Gem::Version
|
206
|
-
version:
|
206
|
+
version: 3.0.0
|
207
207
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
208
|
requirements:
|
209
209
|
- - ">="
|
210
210
|
- !ruby/object:Gem::Version
|
211
211
|
version: '0'
|
212
212
|
requirements: []
|
213
|
-
rubygems_version: 3.
|
213
|
+
rubygems_version: 3.5.3
|
214
214
|
signing_key:
|
215
215
|
specification_version: 4
|
216
216
|
summary: Ruby code formatter
|