rufo 0.17.0 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|