rubocop 1.60.2 → 1.62.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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/output.css.erb +159 -0
  4. data/assets/output.html.erb +1 -160
  5. data/config/default.yml +41 -12
  6. data/lib/rubocop/cli/command/lsp.rb +2 -2
  7. data/lib/rubocop/cli.rb +6 -1
  8. data/lib/rubocop/config.rb +4 -0
  9. data/lib/rubocop/config_finder.rb +12 -2
  10. data/lib/rubocop/config_validator.rb +14 -5
  11. data/lib/rubocop/cop/autocorrect_logic.rb +6 -1
  12. data/lib/rubocop/cop/base.rb +17 -8
  13. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
  14. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +5 -13
  15. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
  16. data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
  17. data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
  18. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  19. data/lib/rubocop/cop/layout/end_alignment.rb +3 -1
  20. data/lib/rubocop/cop/layout/redundant_line_break.rb +3 -1
  21. data/lib/rubocop/cop/layout/space_before_block_braces.rb +19 -10
  22. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -1
  23. data/lib/rubocop/cop/lint/empty_conditional_body.rb +1 -1
  24. data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +14 -9
  25. data/lib/rubocop/cop/lint/rescue_type.rb +1 -3
  26. data/lib/rubocop/cop/lint/script_permission.rb +3 -3
  27. data/lib/rubocop/cop/lint/syntax.rb +1 -1
  28. data/lib/rubocop/cop/lint/to_enum_arguments.rb +7 -2
  29. data/lib/rubocop/cop/lint/void.rb +6 -1
  30. data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
  31. data/lib/rubocop/cop/registry.rb +1 -1
  32. data/lib/rubocop/cop/style/arguments_forwarding.rb +29 -8
  33. data/lib/rubocop/cop/style/case_like_if.rb +1 -1
  34. data/lib/rubocop/cop/style/commented_keyword.rb +5 -2
  35. data/lib/rubocop/cop/style/conditional_assignment.rb +4 -5
  36. data/lib/rubocop/cop/style/hash_syntax.rb +6 -2
  37. data/lib/rubocop/cop/style/inverse_methods.rb +8 -8
  38. data/lib/rubocop/cop/style/invertible_unless_condition.rb +10 -5
  39. data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +5 -8
  40. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +1 -1
  41. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -0
  42. data/lib/rubocop/cop/style/object_then.rb +5 -3
  43. data/lib/rubocop/cop/style/parallel_assignment.rb +1 -3
  44. data/lib/rubocop/cop/style/raise_args.rb +3 -0
  45. data/lib/rubocop/cop/style/redundant_argument.rb +2 -2
  46. data/lib/rubocop/cop/style/redundant_assignment.rb +10 -2
  47. data/lib/rubocop/cop/style/redundant_line_continuation.rb +17 -6
  48. data/lib/rubocop/cop/style/redundant_return.rb +6 -0
  49. data/lib/rubocop/cop/style/sample.rb +1 -3
  50. data/lib/rubocop/cops_documentation_generator.rb +4 -2
  51. data/lib/rubocop/formatter/html_formatter.rb +30 -10
  52. data/lib/rubocop/formatter/offense_count_formatter.rb +12 -2
  53. data/lib/rubocop/lsp/logger.rb +1 -1
  54. data/lib/rubocop/lsp/routes.rb +1 -1
  55. data/lib/rubocop/lsp/runtime.rb +1 -1
  56. data/lib/rubocop/lsp/server.rb +5 -2
  57. data/lib/rubocop/lsp/severity.rb +1 -1
  58. data/lib/rubocop/lsp.rb +29 -0
  59. data/lib/rubocop/magic_comment.rb +1 -1
  60. data/lib/rubocop/options.rb +11 -0
  61. data/lib/rubocop/path_util.rb +6 -2
  62. data/lib/rubocop/rspec/cop_helper.rb +8 -2
  63. data/lib/rubocop/rspec/expect_offense.rb +1 -1
  64. data/lib/rubocop/rspec/shared_contexts.rb +36 -17
  65. data/lib/rubocop/rspec/support.rb +2 -1
  66. data/lib/rubocop/runner.rb +9 -2
  67. data/lib/rubocop/target_finder.rb +84 -78
  68. data/lib/rubocop/target_ruby.rb +82 -80
  69. data/lib/rubocop/version.rb +18 -3
  70. metadata +9 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5baa438e333ac7dbae0d7481f0a512e950f9ef11014f09d78f360d3bc64d528
4
- data.tar.gz: bfba21f2555729c81554baad4910a35088fef9ba39538402e54841fdff1c8d8f
3
+ metadata.gz: 71f9543fd4a2366245df52234cec7a2492a2e4df631fec99e466de8b82cde5d7
4
+ data.tar.gz: 99bf7b324f099186e5918469d3fd5d954e91317cb572e96f48a253c4d4ace709
5
5
  SHA512:
6
- metadata.gz: 247eadb99d0c3d9f46067a707a0511433567fea2326ded958381c55cabe9a24ef6c2328e6d4ab901454a6af60cba185d5f87364fc9c1399684bbf3a657ef383b
7
- data.tar.gz: 675be6aba0374927f8bf17df0d1dc51d4fc7a05431981d164ae62715fd9008b8ae6208b50f4b509afadb4622a0b19e0bf5d4c650aa203407ece15e9d88ebe031
6
+ metadata.gz: a0128453654e2f6c5b5000c70931edb3dcccc2d1eb54c08b4e1af6ea393f7192ad0aeaaf9c07a136138fee6be7702caa22cdd3e0f3a46a25a6508102ac0759a1
7
+ data.tar.gz: 989aade51c2112e02b3d4e130b99d1096116fca3a8cc0d47e8c25de8eea419afb242969f9a48c7a8d04ab1b9a8563dc138b65e9b364d89758ebcdd3444147893
data/README.md CHANGED
@@ -53,7 +53,7 @@ To prevent an unwanted RuboCop update you might want to use a conservative versi
53
53
  in your `Gemfile`:
54
54
 
55
55
  ```rb
56
- gem 'rubocop', '~> 1.60', require: false
56
+ gem 'rubocop', '~> 1.62', require: false
57
57
  ```
58
58
 
59
59
  See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details.
@@ -0,0 +1,159 @@
1
+ * {
2
+ -webkit-box-sizing: border-box;
3
+ -moz-box-sizing: border-box;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body, html {
8
+ font-size: 62.5%;
9
+ }
10
+ body {
11
+ background-color: #ecedf0;
12
+ font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
13
+ margin: 0;
14
+ }
15
+ code {
16
+ font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
17
+ font-size: 85%;
18
+ }
19
+ #header {
20
+ background: #f9f9f9;
21
+ color: #333;
22
+ border-bottom: 3px solid #ccc;
23
+ height: 50px;
24
+ padding: 0;
25
+ }
26
+ #header .logo {
27
+ float: left;
28
+ margin: 5px 12px 7px 20px;
29
+ width: 38px;
30
+ height: 38px;
31
+ }
32
+ #header .title {
33
+ display: inline-block;
34
+ float: left;
35
+ height: 50px;
36
+ font-size: 2.4rem;
37
+ letter-spacing: normal;
38
+ line-height: 50px;
39
+ margin: 0;
40
+ }
41
+
42
+ .information, #offenses {
43
+ width: 100%;
44
+ padding: 20px;
45
+ color: #333;
46
+ }
47
+ #offenses {
48
+ padding: 0 20px;
49
+ }
50
+
51
+ .information .infobox {
52
+ border-left: 3px solid;
53
+ border-radius: 4px;
54
+ background-color: #fff;
55
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
56
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
57
+ padding: 15px;
58
+ border-color: #0088cc;
59
+ font-size: 1.4rem;
60
+ }
61
+ .information .infobox .info-title {
62
+ font-size: 1.8rem;
63
+ line-height: 2.2rem;
64
+ margin: 0 0 0.5em;
65
+ }
66
+ .information .offenses-list li {
67
+ line-height: 1.8rem
68
+ }
69
+ .information .offenses-list {
70
+ padding-left: 20px;
71
+ margin-bottom: 0;
72
+ }
73
+
74
+ #offenses .offense-box {
75
+ border-radius: 4px;
76
+ margin-bottom: 20px;
77
+ background-color: #fff;
78
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
79
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
80
+ }
81
+ .fixed .box-title {
82
+ position: fixed;
83
+ top: 0;
84
+ z-index: 10;
85
+ width: 100%;
86
+ }
87
+ .box-title-placeholder {
88
+ display: none;
89
+ }
90
+ .fixed .box-title-placeholder {
91
+ display: block;
92
+ }
93
+ #offenses .offense-box .box-title h3, #offenses .offense-box .box-title-placeholder h3 {
94
+ color: #33353f;
95
+ background-color: #f6f6f6;
96
+ font-size: 2rem;
97
+ line-height: 2rem;
98
+ display: block;
99
+ padding: 15px;
100
+ border-radius: 5px;
101
+ margin: 0;
102
+ }
103
+ #offenses .offense-box .offense-reports {
104
+ padding: 0 15px;
105
+ }
106
+ #offenses .offense-box .offense-reports .report {
107
+ border-bottom: 1px dotted #ddd;
108
+ padding: 15px 0px;
109
+ position: relative;
110
+ font-size: 1.3rem;
111
+ }
112
+ #offenses .offense-box .offense-reports .report:last-child {
113
+ border-bottom: none;
114
+ }
115
+ #offenses .offense-box .offense-reports .report pre code {
116
+ display: block;
117
+ background: #000;
118
+ color: #fff;
119
+ padding: 10px 15px;
120
+ border-radius: 5px;
121
+ line-height: 1.6rem;
122
+ }
123
+ #offenses .offense-box .offense-reports .report .location {
124
+ font-weight: bold;
125
+ }
126
+ #offenses .offense-box .offense-reports .report .message code {
127
+ padding: 0.3em;
128
+ background-color: rgba(0,0,0,0.07);
129
+ border-radius: 3px;
130
+ }
131
+ .severity {
132
+ text-transform: capitalize;
133
+ font-weight: bold;
134
+ }
135
+ .highlight {
136
+ padding: 2px;
137
+ border-radius: 2px;
138
+ font-weight: bold;
139
+ }
140
+ <%- SEVERITY_COLORS.each do |severity, color| %>
141
+ .severity.<%= severity %> {
142
+ color: <%= color %>;
143
+ }
144
+ .highlight.<%= severity %> {
145
+ background-color: <%= color.fade_out(0.4) %>;
146
+ border: 1px solid <%= color.fade_out(0.6) %>;
147
+ }
148
+ <%- end %>
149
+ footer {
150
+ margin-bottom: 20px;
151
+ margin-right: 20px;
152
+ font-size: 1.3rem;
153
+ color: #777;
154
+ text-align: right;
155
+ }
156
+ .extra-code {
157
+ color: #ED9C28
158
+ }
159
+
@@ -3,168 +3,9 @@
3
3
  <head>
4
4
  <meta charset='UTF-8' />
5
5
  <title>RuboCop Inspection Report</title>
6
- <%# TODO: Clean up the messy markup and style definitions. %>
7
6
  <style>
8
- * {
9
- -webkit-box-sizing: border-box;
10
- -moz-box-sizing: border-box;
11
- box-sizing: border-box;
12
- }
13
-
14
- body, html {
15
- font-size: 62.5%;
16
- }
17
- body {
18
- background-color: #ecedf0;
19
- font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
20
- margin: 0;
21
- }
22
- code {
23
- font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
24
- font-size: 85%;
25
- }
26
- #header {
27
- background: #f9f9f9;
28
- color: #333;
29
- border-bottom: 3px solid #ccc;
30
- height: 50px;
31
- padding: 0;
32
- }
33
- #header .logo {
34
- float: left;
35
- margin: 5px 12px 7px 20px;
36
- width: 38px;
37
- height: 38px;
38
- }
39
- #header .title {
40
- display: inline-block;
41
- float: left;
42
- height: 50px;
43
- font-size: 2.4rem;
44
- letter-spacing: normal;
45
- line-height: 50px;
46
- margin: 0;
47
- }
48
-
49
- .information, #offenses {
50
- width: 100%;
51
- padding: 20px;
52
- color: #333;
53
- }
54
- #offenses {
55
- padding: 0 20px;
56
- }
57
-
58
- .information .infobox {
59
- border-left: 3px solid;
60
- border-radius: 4px;
61
- background-color: #fff;
62
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
63
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
64
- padding: 15px;
65
- border-color: #0088cc;
66
- font-size: 1.4rem;
67
- }
68
- .information .infobox .info-title {
69
- font-size: 1.8rem;
70
- line-height: 2.2rem;
71
- margin: 0 0 0.5em;
72
- }
73
- .information .offenses-list li {
74
- line-height: 1.8rem
75
- }
76
- .information .offenses-list {
77
- padding-left: 20px;
78
- margin-bottom: 0;
79
- }
80
-
81
- #offenses .offense-box {
82
- border-radius: 4px;
83
- margin-bottom: 20px;
84
- background-color: #fff;
85
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
86
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
87
- }
88
- .fixed .box-title {
89
- position: fixed;
90
- top: 0;
91
- z-index: 10;
92
- width: 100%;
93
- }
94
- .box-title-placeholder {
95
- display: none;
96
- }
97
- .fixed .box-title-placeholder {
98
- display: block;
99
- }
100
- #offenses .offense-box .box-title h3, #offenses .offense-box .box-title-placeholder h3 {
101
- color: #33353f;
102
- background-color: #f6f6f6;
103
- font-size: 2rem;
104
- line-height: 2rem;
105
- display: block;
106
- padding: 15px;
107
- border-radius: 5px;
108
- margin: 0;
109
- }
110
- #offenses .offense-box .offense-reports {
111
- padding: 0 15px;
112
- }
113
- #offenses .offense-box .offense-reports .report {
114
- border-bottom: 1px dotted #ddd;
115
- padding: 15px 0px;
116
- position: relative;
117
- font-size: 1.3rem;
118
- }
119
- #offenses .offense-box .offense-reports .report:last-child {
120
- border-bottom: none;
121
- }
122
- #offenses .offense-box .offense-reports .report pre code {
123
- display: block;
124
- background: #000;
125
- color: #fff;
126
- padding: 10px 15px;
127
- border-radius: 5px;
128
- line-height: 1.6rem;
129
- }
130
- #offenses .offense-box .offense-reports .report .location {
131
- font-weight: bold;
132
- }
133
- #offenses .offense-box .offense-reports .report .message code {
134
- padding: 0.3em;
135
- background-color: rgba(0,0,0,0.07);
136
- border-radius: 3px;
137
- }
138
- .severity {
139
- text-transform: capitalize;
140
- font-weight: bold;
141
- }
142
- .highlight {
143
- padding: 2px;
144
- border-radius: 2px;
145
- font-weight: bold;
146
- }
147
- <%- SEVERITY_COLORS.each do |severity, color| %>
148
- .severity.<%= severity %> {
149
- color: <%= color %>;
150
- }
151
- .highlight.<%= severity %> {
152
- background-color: <%= color.fade_out(0.4) %>;
153
- border: 1px solid <%= color.fade_out(0.6) %>;
154
- }
155
- <%- end %>
156
- footer {
157
- margin-bottom: 20px;
158
- margin-right: 20px;
159
- font-size: 1.3rem;
160
- color: #777;
161
- text-align: right;
162
- }
163
- .extra-code {
164
- color: #ED9C28
165
- }
7
+ <%= render_css %>
166
8
  </style>
167
-
168
9
  <script>
169
10
  (function() {
170
11
  // floating headers. requires classList support.
data/config/default.yml CHANGED
@@ -144,6 +144,12 @@ AllCops:
144
144
  # Ruby version is still unresolved, RuboCop will use the oldest officially
145
145
  # supported Ruby version (currently Ruby 2.7).
146
146
  TargetRubyVersion: ~
147
+ # You can specify the parser engine. There are two options available:
148
+ # - `parser_whitequark` ... https://github.com/whitequark/parser
149
+ # - `parser_prism` ... https://github.com/ruby/prism (`Prism::Translation::Parser`)
150
+ # By default, `parser` is used. For the `TargetRubyVersion` value, `parser` can be specified for versions `2.0` and above.
151
+ # `parser_prism` can be specified for versions `3.3` and above. `parser_prism` is faster but still considered experimental.
152
+ ParserEngine: parser_whitequark
147
153
  # Determines if a notification for extension libraries should be shown when
148
154
  # rubocop is run. Keys are the name of the extension, and values are an array
149
155
  # of gems in the Gemfile that the extension is suggested for, if not already
@@ -556,7 +562,9 @@ Layout/ElseAlignment:
556
562
  Layout/EmptyComment:
557
563
  Description: 'Checks empty comment.'
558
564
  Enabled: true
565
+ AutoCorrect: contextual
559
566
  VersionAdded: '0.53'
567
+ VersionChanged: '1.61'
560
568
  AllowBorderComment: true
561
569
  AllowMarginComment: true
562
570
 
@@ -1825,16 +1833,18 @@ Lint/EmptyClass:
1825
1833
  Lint/EmptyConditionalBody:
1826
1834
  Description: 'Checks for the presence of `if`, `elsif` and `unless` branches without a body.'
1827
1835
  Enabled: true
1836
+ AutoCorrect: contextual
1828
1837
  SafeAutoCorrect: false
1829
1838
  AllowComments: true
1830
1839
  VersionAdded: '0.89'
1831
- VersionChanged: '1.34'
1840
+ VersionChanged: '1.61'
1832
1841
 
1833
1842
  Lint/EmptyEnsure:
1834
1843
  Description: 'Checks for empty ensure block.'
1835
1844
  Enabled: true
1845
+ AutoCorrect: contextual
1836
1846
  VersionAdded: '0.10'
1837
- VersionChanged: '0.48'
1847
+ VersionChanged: '1.61'
1838
1848
 
1839
1849
  Lint/EmptyExpression:
1840
1850
  Description: 'Checks for empty expressions.'
@@ -1856,8 +1866,9 @@ Lint/EmptyInPattern:
1856
1866
  Lint/EmptyInterpolation:
1857
1867
  Description: 'Checks for empty string interpolation.'
1858
1868
  Enabled: true
1869
+ AutoCorrect: contextual
1859
1870
  VersionAdded: '0.20'
1860
- VersionChanged: '0.45'
1871
+ VersionChanged: '1.61'
1861
1872
 
1862
1873
  Lint/EmptyWhen:
1863
1874
  Description: 'Checks for `when` branches with empty bodies.'
@@ -2395,7 +2406,9 @@ Lint/TopLevelReturnWithArgument:
2395
2406
  Lint/TrailingCommaInAttributeDeclaration:
2396
2407
  Description: 'Checks for trailing commas in attribute declarations.'
2397
2408
  Enabled: true
2409
+ AutoCorrect: contextual
2398
2410
  VersionAdded: '0.90'
2411
+ VersionChanged: '1.61'
2399
2412
 
2400
2413
  Lint/TripleQuotes:
2401
2414
  Description: 'Checks for useless triple quote constructs.'
@@ -2455,8 +2468,9 @@ Lint/UnusedBlockArgument:
2455
2468
  Description: 'Checks for unused block arguments.'
2456
2469
  StyleGuide: '#underscore-unused-vars'
2457
2470
  Enabled: true
2471
+ AutoCorrect: contextual
2458
2472
  VersionAdded: '0.21'
2459
- VersionChanged: '0.22'
2473
+ VersionChanged: '1.61'
2460
2474
  IgnoreEmptyBlocks: true
2461
2475
  AllowUnusedKeywordArguments: false
2462
2476
 
@@ -2464,8 +2478,9 @@ Lint/UnusedMethodArgument:
2464
2478
  Description: 'Checks for unused method arguments.'
2465
2479
  StyleGuide: '#underscore-unused-vars'
2466
2480
  Enabled: true
2481
+ AutoCorrect: contextual
2467
2482
  VersionAdded: '0.21'
2468
- VersionChanged: '0.81'
2483
+ VersionChanged: '1.61'
2469
2484
  AllowUnusedKeywordArguments: false
2470
2485
  IgnoreEmptyMethods: true
2471
2486
  IgnoreNotImplementedMethods: true
@@ -2489,8 +2504,9 @@ Lint/UriRegexp:
2489
2504
  Lint/UselessAccessModifier:
2490
2505
  Description: 'Checks for useless access modifiers.'
2491
2506
  Enabled: true
2507
+ AutoCorrect: contextual
2492
2508
  VersionAdded: '0.20'
2493
- VersionChanged: '0.83'
2509
+ VersionChanged: '1.61'
2494
2510
  ContextCreatingMethods: []
2495
2511
  MethodCreatingMethods: []
2496
2512
 
@@ -2498,8 +2514,9 @@ Lint/UselessAssignment:
2498
2514
  Description: 'Checks for useless assignment to a local variable.'
2499
2515
  StyleGuide: '#underscore-unused-vars'
2500
2516
  Enabled: true
2517
+ AutoCorrect: contextual
2501
2518
  VersionAdded: '0.11'
2502
- VersionChanged: '1.51'
2519
+ VersionChanged: '1.61'
2503
2520
  SafeAutoCorrect: false
2504
2521
 
2505
2522
  Lint/UselessElseWithoutRescue:
@@ -2511,8 +2528,9 @@ Lint/UselessElseWithoutRescue:
2511
2528
  Lint/UselessMethodDefinition:
2512
2529
  Description: 'Checks for useless method definitions.'
2513
2530
  Enabled: true
2531
+ AutoCorrect: contextual
2514
2532
  VersionAdded: '0.90'
2515
- VersionChanged: '0.91'
2533
+ VersionChanged: '1.61'
2516
2534
  Safe: false
2517
2535
 
2518
2536
  Lint/UselessRescue:
@@ -2535,13 +2553,17 @@ Lint/UselessSetterCall:
2535
2553
  Lint/UselessTimes:
2536
2554
  Description: 'Checks for useless `Integer#times` calls.'
2537
2555
  Enabled: true
2538
- VersionAdded: '0.91'
2539
2556
  Safe: false
2557
+ AutoCorrect: contextual
2558
+ VersionAdded: '0.91'
2559
+ VersionChanged: '1.61'
2540
2560
 
2541
2561
  Lint/Void:
2542
2562
  Description: 'Possible use of operator/literal/variable in void context.'
2543
2563
  Enabled: true
2564
+ AutoCorrect: contextual
2544
2565
  VersionAdded: '0.9'
2566
+ VersionChanged: '1.61'
2545
2567
  CheckForMethodsWithNoSideEffects: false
2546
2568
 
2547
2569
  #################### Metrics ###############################
@@ -3701,8 +3723,9 @@ Style/EmptyCaseCondition:
3701
3723
  Style/EmptyElse:
3702
3724
  Description: 'Avoid empty else-clauses.'
3703
3725
  Enabled: true
3726
+ AutoCorrect: contextual
3704
3727
  VersionAdded: '0.28'
3705
- VersionChanged: '0.32'
3728
+ VersionChanged: '1.61'
3706
3729
  EnforcedStyle: both
3707
3730
  # empty - warn only on empty `else`
3708
3731
  # nil - warn on `else` with nil in it
@@ -3716,7 +3739,9 @@ Style/EmptyElse:
3716
3739
  Style/EmptyHeredoc:
3717
3740
  Description: 'Checks for using empty heredoc to reduce redundancy.'
3718
3741
  Enabled: pending
3742
+ AutoCorrect: contextual
3719
3743
  VersionAdded: '1.32'
3744
+ VersionChanged: '1.61'
3720
3745
 
3721
3746
  Style/EmptyLambdaParameter:
3722
3747
  Description: 'Omit parens for empty lambda parameters.'
@@ -3734,7 +3759,9 @@ Style/EmptyMethod:
3734
3759
  Description: 'Checks the formatting of empty method definitions.'
3735
3760
  StyleGuide: '#no-single-line-methods'
3736
3761
  Enabled: true
3762
+ AutoCorrect: contextual
3737
3763
  VersionAdded: '0.46'
3764
+ VersionChanged: '1.61'
3738
3765
  EnforcedStyle: compact
3739
3766
  SupportedStyles:
3740
3767
  - compact
@@ -4835,8 +4862,9 @@ Style/RaiseArgs:
4835
4862
  Description: 'Checks the arguments passed to raise/fail.'
4836
4863
  StyleGuide: '#exception-class-messages'
4837
4864
  Enabled: true
4865
+ Safe: false
4838
4866
  VersionAdded: '0.14'
4839
- VersionChanged: '1.2'
4867
+ VersionChanged: '1.61'
4840
4868
  EnforcedStyle: exploded
4841
4869
  SupportedStyles:
4842
4870
  - compact # raise Exception.new(msg)
@@ -4977,10 +5005,11 @@ Style/RedundantHeredocDelimiterQuotes:
4977
5005
  Style/RedundantInitialize:
4978
5006
  Description: 'Checks for redundant `initialize` methods.'
4979
5007
  Enabled: pending
5008
+ AutoCorrect: contextual
4980
5009
  Safe: false
4981
5010
  AllowComments: true
4982
5011
  VersionAdded: '1.27'
4983
- VersionChanged: '1.28'
5012
+ VersionChanged: '1.61'
4984
5013
 
4985
5014
  Style/RedundantInterpolation:
4986
5015
  Description: 'Checks for strings that are just an interpolated expression.'
@@ -7,11 +7,11 @@ module RuboCop
7
7
  module Command
8
8
  # Start Language Server Protocol of RuboCop.
9
9
  # @api private
10
- class Lsp < Base
10
+ class LSP < Base
11
11
  self.command_name = :lsp
12
12
 
13
13
  def run
14
- RuboCop::Lsp::Server.new(@config_store).start
14
+ RuboCop::LSP::Server.new(@config_store).start
15
15
  end
16
16
  end
17
17
  end
data/lib/rubocop/cli.rb CHANGED
@@ -12,7 +12,7 @@ module RuboCop
12
12
  STATUS_INTERRUPTED = Signal.list['INT'] + 128
13
13
  DEFAULT_PARALLEL_OPTIONS = %i[
14
14
  color config debug display_style_guide display_time display_only_fail_level_offenses
15
- display_only_failed except extra_details fail_level fix_layout format
15
+ display_only_failed editor_mode except extra_details fail_level fix_layout format
16
16
  ignore_disable_comments lint only only_guide_cops require safe
17
17
  autocorrect safe_autocorrect autocorrect_all
18
18
  ].freeze
@@ -151,6 +151,7 @@ module RuboCop
151
151
 
152
152
  def act_on_options
153
153
  set_options_to_config_loader
154
+ handle_editor_mode
154
155
 
155
156
  @config_store.options_config = @options[:config] if @options[:config]
156
157
  @config_store.force_default_config! if @options[:force_default_config]
@@ -174,6 +175,10 @@ module RuboCop
174
175
  ConfigLoader.ignore_unrecognized_cops = @options[:ignore_unrecognized_cops]
175
176
  end
176
177
 
178
+ def handle_editor_mode
179
+ RuboCop::LSP.enable if @options[:editor_mode]
180
+ end
181
+
177
182
  # rubocop:disable Metrics/CyclomaticComplexity
178
183
  def handle_exiting_options
179
184
  return unless Options::EXITING_OPTIONS.any? { |o| @options.key? o }
@@ -244,6 +244,10 @@ module RuboCop
244
244
  end
245
245
  end
246
246
 
247
+ def parser_engine
248
+ @parser_engine ||= for_all_cops.fetch('ParserEngine', :parser_whitequark).to_sym
249
+ end
250
+
247
251
  def target_rails_version
248
252
  @target_rails_version ||=
249
253
  if for_all_cops['TargetRailsVersion']
@@ -17,8 +17,8 @@ module RuboCop
17
17
  attr_writer :project_root
18
18
 
19
19
  def find_config_path(target_dir)
20
- find_project_dotfile(target_dir) || find_user_dotfile || find_user_xdg_config ||
21
- DEFAULT_FILE
20
+ find_project_dotfile(target_dir) || find_project_root_dot_config ||
21
+ find_user_dotfile || find_user_xdg_config || DEFAULT_FILE
22
22
  end
23
23
 
24
24
  # Returns the path RuboCop inferred as the root of the project. No file
@@ -41,6 +41,16 @@ module RuboCop
41
41
  find_file_upwards(DOTFILE, target_dir, project_root)
42
42
  end
43
43
 
44
+ def find_project_root_dot_config
45
+ return unless project_root
46
+
47
+ dotfile = File.join(project_root, '.config', DOTFILE)
48
+ return dotfile if File.exist?(dotfile)
49
+
50
+ xdg_config = File.join(project_root, '.config', 'rubocop', XDG_CONFIG)
51
+ xdg_config if File.exist?(xdg_config)
52
+ end
53
+
44
54
  def find_user_dotfile
45
55
  return unless ENV.key?('HOME')
46
56
 
@@ -18,6 +18,7 @@ module RuboCop
18
18
  # @api private
19
19
  CONFIG_CHECK_KEYS = %w[Enabled Safe SafeAutoCorrect AutoCorrect].to_set.freeze
20
20
  CONFIG_CHECK_DEPARTMENTS = %w[pending override_department].freeze
21
+ CONFIG_CHECK_AUTOCORRECTS = %w[always contextual disabled].freeze
21
22
  private_constant :CONFIG_CHECK_KEYS, :CONFIG_CHECK_DEPARTMENTS
22
23
 
23
24
  def_delegators :@config, :smart_loaded_path, :for_all_cops
@@ -248,23 +249,31 @@ module RuboCop
248
249
  end
249
250
  end
250
251
 
252
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
251
253
  def check_cop_config_value(hash, parent = nil)
252
254
  hash.each do |key, value|
253
255
  check_cop_config_value(value, key) if value.is_a?(Hash)
254
256
 
255
257
  next unless CONFIG_CHECK_KEYS.include?(key) && value.is_a?(String)
256
258
 
257
- next if key == 'Enabled' && CONFIG_CHECK_DEPARTMENTS.include?(value)
259
+ if key == 'Enabled' && !CONFIG_CHECK_DEPARTMENTS.include?(value)
260
+ supposed_values = 'a boolean'
261
+ elsif key == 'AutoCorrect' && !CONFIG_CHECK_AUTOCORRECTS.include?(value)
262
+ supposed_values = '`always`, `contextual`, `disabled`, or a boolean'
263
+ else
264
+ next
265
+ end
258
266
 
259
- raise ValidationError, msg_not_boolean(parent, key, value)
267
+ raise ValidationError, param_error_message(parent, key, value, supposed_values)
260
268
  end
261
269
  end
270
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
262
271
 
263
272
  # FIXME: Handling colors in exception messages like this is ugly.
264
- def msg_not_boolean(parent, key, value)
273
+ def param_error_message(parent, key, value, supposed_values)
265
274
  "#{Rainbow('').reset}" \
266
- "Property #{Rainbow(key).yellow} of cop #{Rainbow(parent).yellow} " \
267
- "is supposed to be a boolean and #{Rainbow(value).yellow} is not."
275
+ "Property #{Rainbow(key).yellow} of #{Rainbow(parent).yellow} cop " \
276
+ "is supposed to be #{supposed_values} and #{Rainbow(value).yellow} is not."
268
277
  end
269
278
  end
270
279
  end
@@ -32,7 +32,12 @@ module RuboCop
32
32
  # allow turning off autocorrect on a cop by cop basis
33
33
  return true unless cop_config
34
34
 
35
- return false if cop_config['AutoCorrect'] == false
35
+ # `false` is the same as `disabled` for backward compatibility.
36
+ return false if ['disabled', false].include?(cop_config['AutoCorrect'])
37
+
38
+ # When LSP is enabled, it is considered as editing source code,
39
+ # and autocorrection with `AutoCorrect: contextual` will not be performed.
40
+ return false if contextual_autocorrect? && LSP.enabled?
36
41
 
37
42
  # :safe_autocorrect is a derived option based on several command-line
38
43
  # arguments - see RuboCop::Options#add_autocorrection_options