rubocop 0.62.0 → 0.63.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/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/config/default.yml +38 -12
- data/lib/rubocop.rb +5 -1
- data/lib/rubocop/ast/builder.rb +2 -0
- data/lib/rubocop/ast/node/if_node.rb +29 -0
- data/lib/rubocop/ast/node/range_node.rb +11 -0
- data/lib/rubocop/ast/traversal.rb +3 -1
- data/lib/rubocop/config.rb +2 -0
- data/lib/rubocop/cop/cop.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -1
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +80 -0
- data/lib/rubocop/cop/{style → lint}/flip_flop.rb +4 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +22 -16
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +11 -4
- data/lib/rubocop/cop/mixin/nil_methods.rb +9 -3
- data/lib/rubocop/cop/mixin/trailing_comma.rb +41 -6
- data/lib/rubocop/cop/naming/constant_name.rb +10 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/performance/range_include.rb +3 -0
- data/lib/rubocop/cop/rails/belongs_to.rb +120 -0
- data/lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb +94 -0
- data/lib/rubocop/cop/rails/inverse_of.rb +4 -6
- data/lib/rubocop/cop/rails/link_to_blank.rb +37 -0
- data/lib/rubocop/cop/style/documentation_method.rb +6 -1
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +2 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +10 -2
- data/lib/rubocop/cop/style/regexp_literal.rb +4 -3
- data/lib/rubocop/cop/style/safe_navigation.rb +10 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -6
- data/lib/rubocop/cop/style/yoda_condition.rb +58 -21
- data/lib/rubocop/options.rb +10 -5
- data/lib/rubocop/target_finder.rb +8 -30
- data/lib/rubocop/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7aaecd68a4876e64c43f009e849b228a26805bfe
|
4
|
+
data.tar.gz: 68a8b80a3f44980737704d596a595548bc6cb086
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e2f5aacc075c83cc70ff025a59f4ed5201de381be89da00c93ed23fceb2a43d09960a653407ee6a040a68e9f6f199bed50342fdb413c84d3b22ee8ff0f840f08
|
7
|
+
data.tar.gz: c9883abe7b2d4221e7af6a36f3d9aeeeca51de1a36d558c2a55a6a5b33cad9948a53bd9eeda38e4565f56b1aed85b7e98c4d2a8e2d939cb53984ad9eaec63088
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -53,7 +53,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
|
|
53
53
|
might want to use a conservative version locking in your `Gemfile`:
|
54
54
|
|
55
55
|
```rb
|
56
|
-
gem 'rubocop', '~> 0.
|
56
|
+
gem 'rubocop', '~> 0.63.0', require: false
|
57
57
|
```
|
58
58
|
|
59
59
|
## Quickstart
|
@@ -217,5 +217,5 @@ RuboCop's changelog is available [here](CHANGELOG.md).
|
|
217
217
|
|
218
218
|
## Copyright
|
219
219
|
|
220
|
-
Copyright (c) 2012-
|
220
|
+
Copyright (c) 2012-2019 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for
|
221
221
|
further details.
|
data/config/default.yml
CHANGED
@@ -1191,6 +1191,12 @@ Lint/DeprecatedClassMethods:
|
|
1191
1191
|
Enabled: true
|
1192
1192
|
VersionAdded: '0.19'
|
1193
1193
|
|
1194
|
+
Lint/DisjunctiveAssignmentInConstructor:
|
1195
|
+
Description: 'In constructor, plain assignment is preferred over disjunctive.'
|
1196
|
+
Enabled: true
|
1197
|
+
Safe: false
|
1198
|
+
VersionAdded: '0.62'
|
1199
|
+
|
1194
1200
|
Lint/DuplicateCaseCondition:
|
1195
1201
|
Description: 'Do not repeat values in case conditionals.'
|
1196
1202
|
Enabled: true
|
@@ -1255,6 +1261,12 @@ Lint/ErbNewArguments:
|
|
1255
1261
|
Enabled: true
|
1256
1262
|
VersionAdded: '0.56'
|
1257
1263
|
|
1264
|
+
Lint/FlipFlop:
|
1265
|
+
Description: 'Checks for flip-flops'
|
1266
|
+
StyleGuide: '#no-flip-flops'
|
1267
|
+
Enabled: true
|
1268
|
+
VersionAdded: '0.16'
|
1269
|
+
|
1258
1270
|
Lint/FloatOutOfRange:
|
1259
1271
|
Description: >-
|
1260
1272
|
Catches floating-point literals too large or small for Ruby to
|
@@ -2074,6 +2086,7 @@ Performance/RangeInclude:
|
|
2074
2086
|
Reference: 'https://github.com/JuanitoFatas/fast-ruby#cover-vs-include-code'
|
2075
2087
|
Enabled: true
|
2076
2088
|
VersionAdded: '0.36'
|
2089
|
+
Safe: false
|
2077
2090
|
|
2078
2091
|
Performance/RedundantBlockCall:
|
2079
2092
|
Description: 'Use `yield` instead of `block.call`.'
|
@@ -2228,6 +2241,13 @@ Rails/AssertNot:
|
|
2228
2241
|
Include:
|
2229
2242
|
- '**/test/**/*'
|
2230
2243
|
|
2244
|
+
Rails/BelongsTo:
|
2245
|
+
Description: >-
|
2246
|
+
Use `optional: true` instead of `required: false` for
|
2247
|
+
`belongs_to` relations'
|
2248
|
+
Enabled: true
|
2249
|
+
VersionAdded: '0.62'
|
2250
|
+
|
2231
2251
|
Rails/Blank:
|
2232
2252
|
Description: 'Enforces use of `blank?`.'
|
2233
2253
|
Enabled: true
|
@@ -2384,6 +2404,14 @@ Rails/HttpStatus:
|
|
2384
2404
|
- numeric
|
2385
2405
|
- symbolic
|
2386
2406
|
|
2407
|
+
Rails/IgnoredSkipActionFilterOption:
|
2408
|
+
Description: 'Checks that `if` and `only` (or `except`) are not used together as options of `skip_*` action filter.'
|
2409
|
+
Reference: 'https://api.rubyonrails.org/classes/AbstractController/Callbacks/ClassMethods.html#method-i-_normalize_callback_options'
|
2410
|
+
Enabled: true
|
2411
|
+
VersionAdded: '0.63'
|
2412
|
+
Include:
|
2413
|
+
- app/controllers/**/*.rb
|
2414
|
+
|
2387
2415
|
Rails/InverseOf:
|
2388
2416
|
Description: 'Checks for associations where the inverse cannot be determined automatically.'
|
2389
2417
|
Enabled: true
|
@@ -3128,12 +3156,6 @@ Style/ExpandPathArguments:
|
|
3128
3156
|
Enabled: true
|
3129
3157
|
VersionAdded: '0.53'
|
3130
3158
|
|
3131
|
-
Style/FlipFlop:
|
3132
|
-
Description: 'Checks for flip flops'
|
3133
|
-
StyleGuide: '#no-flip-flops'
|
3134
|
-
Enabled: true
|
3135
|
-
VersionAdded: '0.16'
|
3136
|
-
|
3137
3159
|
Style/For:
|
3138
3160
|
Description: 'Checks use of for or each in multiline loops.'
|
3139
3161
|
StyleGuide: '#no-for-loops'
|
@@ -3174,7 +3196,7 @@ Style/FormatStringToken:
|
|
3174
3196
|
Style/FrozenStringLiteralComment:
|
3175
3197
|
Description: >-
|
3176
3198
|
Add the frozen_string_literal comment to the top of files
|
3177
|
-
to help transition
|
3199
|
+
to help transition to frozen string literals by default.
|
3178
3200
|
Enabled: true
|
3179
3201
|
VersionAdded: '0.36'
|
3180
3202
|
VersionChanged: '0.47'
|
@@ -4292,17 +4314,21 @@ Style/WordArray:
|
|
4292
4314
|
WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/'
|
4293
4315
|
|
4294
4316
|
Style/YodaCondition:
|
4295
|
-
Description: '
|
4317
|
+
Description: 'Forbid or enforce yoda conditions.'
|
4296
4318
|
Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions'
|
4297
4319
|
Enabled: true
|
4298
|
-
EnforcedStyle:
|
4320
|
+
EnforcedStyle: forbid_for_all_comparison_operators
|
4299
4321
|
SupportedStyles:
|
4300
4322
|
# check all comparison operators
|
4301
|
-
-
|
4323
|
+
- forbid_for_all_comparison_operators
|
4302
4324
|
# check only equality operators: `!=` and `==`
|
4303
|
-
-
|
4325
|
+
- forbid_for_equality_operators_only
|
4326
|
+
# enforce yoda for all comparison operators
|
4327
|
+
- require_for_all_comparison_operators
|
4328
|
+
# enforce yoda only for equality operators: `!=` and `==`
|
4329
|
+
- require_for_equality_operators_only
|
4304
4330
|
VersionAdded: '0.49'
|
4305
|
-
VersionChanged: '0.
|
4331
|
+
VersionChanged: '0.63'
|
4306
4332
|
|
4307
4333
|
Style/ZeroLengthPredicate:
|
4308
4334
|
Description: 'Use #empty? when testing for objects of length 0.'
|
data/lib/rubocop.rb
CHANGED
@@ -48,6 +48,7 @@ require_relative 'rubocop/ast/node/if_node'
|
|
48
48
|
require_relative 'rubocop/ast/node/keyword_splat_node'
|
49
49
|
require_relative 'rubocop/ast/node/or_node'
|
50
50
|
require_relative 'rubocop/ast/node/pair_node'
|
51
|
+
require_relative 'rubocop/ast/node/range_node'
|
51
52
|
require_relative 'rubocop/ast/node/regexp_node'
|
52
53
|
require_relative 'rubocop/ast/node/resbody_node'
|
53
54
|
require_relative 'rubocop/ast/node/send_node'
|
@@ -265,6 +266,7 @@ require_relative 'rubocop/cop/lint/boolean_symbol'
|
|
265
266
|
require_relative 'rubocop/cop/lint/circular_argument_reference'
|
266
267
|
require_relative 'rubocop/cop/lint/debugger'
|
267
268
|
require_relative 'rubocop/cop/lint/deprecated_class_methods'
|
269
|
+
require_relative 'rubocop/cop/lint/disjunctive_assignment_in_constructor'
|
268
270
|
require_relative 'rubocop/cop/lint/duplicate_case_condition'
|
269
271
|
require_relative 'rubocop/cop/lint/duplicate_methods'
|
270
272
|
require_relative 'rubocop/cop/lint/duplicated_key'
|
@@ -277,6 +279,7 @@ require_relative 'rubocop/cop/lint/empty_when'
|
|
277
279
|
require_relative 'rubocop/cop/lint/end_in_method'
|
278
280
|
require_relative 'rubocop/cop/lint/ensure_return'
|
279
281
|
require_relative 'rubocop/cop/lint/erb_new_arguments'
|
282
|
+
require_relative 'rubocop/cop/lint/flip_flop'
|
280
283
|
require_relative 'rubocop/cop/lint/float_out_of_range'
|
281
284
|
require_relative 'rubocop/cop/lint/format_parameter_mismatch'
|
282
285
|
require_relative 'rubocop/cop/lint/handle_exceptions'
|
@@ -436,7 +439,6 @@ require_relative 'rubocop/cop/style/end_block'
|
|
436
439
|
require_relative 'rubocop/cop/style/eval_with_location'
|
437
440
|
require_relative 'rubocop/cop/style/even_odd'
|
438
441
|
require_relative 'rubocop/cop/style/expand_path_arguments'
|
439
|
-
require_relative 'rubocop/cop/style/flip_flop'
|
440
442
|
require_relative 'rubocop/cop/style/for'
|
441
443
|
require_relative 'rubocop/cop/style/format_string'
|
442
444
|
require_relative 'rubocop/cop/style/format_string_token'
|
@@ -560,6 +562,7 @@ require_relative 'rubocop/cop/rails/active_support_aliases'
|
|
560
562
|
require_relative 'rubocop/cop/rails/application_job'
|
561
563
|
require_relative 'rubocop/cop/rails/application_record'
|
562
564
|
require_relative 'rubocop/cop/rails/assert_not'
|
565
|
+
require_relative 'rubocop/cop/rails/belongs_to'
|
563
566
|
require_relative 'rubocop/cop/rails/blank'
|
564
567
|
require_relative 'rubocop/cop/rails/bulk_change_table'
|
565
568
|
require_relative 'rubocop/cop/rails/create_table_with_timestamps'
|
@@ -577,6 +580,7 @@ require_relative 'rubocop/cop/rails/has_and_belongs_to_many'
|
|
577
580
|
require_relative 'rubocop/cop/rails/has_many_or_has_one_dependent'
|
578
581
|
require_relative 'rubocop/cop/rails/http_positional_arguments'
|
579
582
|
require_relative 'rubocop/cop/rails/http_status'
|
583
|
+
require_relative 'rubocop/cop/rails/ignored_skip_action_filter_option'
|
580
584
|
require_relative 'rubocop/cop/rails/inverse_of'
|
581
585
|
require_relative 'rubocop/cop/rails/lexically_scoped_action_filter'
|
582
586
|
require_relative 'rubocop/cop/rails/link_to_blank'
|
data/lib/rubocop/ast/builder.rb
CHANGED
@@ -141,6 +141,35 @@ module RuboCop
|
|
141
141
|
|
142
142
|
[condition, true_branch, false_branch]
|
143
143
|
end
|
144
|
+
|
145
|
+
# Returns an array of all the branches in the conditional statement.
|
146
|
+
#
|
147
|
+
# @return [Array<Node>] an array of branch nodes
|
148
|
+
def branches
|
149
|
+
branches = [if_branch]
|
150
|
+
|
151
|
+
return branches unless else_branch
|
152
|
+
|
153
|
+
other_branches = if elsif_conditional?
|
154
|
+
else_branch.branches
|
155
|
+
else
|
156
|
+
[else_branch]
|
157
|
+
end
|
158
|
+
branches.concat(other_branches)
|
159
|
+
end
|
160
|
+
|
161
|
+
# Calls the given block for each branch node in the conditional statement.
|
162
|
+
# If no block is given, an `Enumerator` is returned.
|
163
|
+
#
|
164
|
+
# @return [self] if a block is given
|
165
|
+
# @return [Enumerator] if no block is given
|
166
|
+
def each_branch
|
167
|
+
return branches.to_enum(__method__) unless block_given?
|
168
|
+
|
169
|
+
branches.each do |branch|
|
170
|
+
yield branch
|
171
|
+
end
|
172
|
+
end
|
144
173
|
end
|
145
174
|
end
|
146
175
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module AST
|
5
|
+
# A node extension for `irange` and `erange` nodes. This will be used in
|
6
|
+
# place of a plain node when the builder constructs the AST, making its
|
7
|
+
# methods available to all `irange` and `erange` nodes within RuboCop.
|
8
|
+
class RangeNode < Node
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -23,7 +23,7 @@ module RuboCop
|
|
23
23
|
preexe postexe match_current_line defined?
|
24
24
|
arg_expr].freeze
|
25
25
|
MANY_CHILD_NODES = %i[dstr dsym xstr regexp array hash pair
|
26
|
-
|
26
|
+
mlhs masgn or_asgn and_asgn
|
27
27
|
undef alias args super yield or and
|
28
28
|
while_post until_post iflipflop eflipflop
|
29
29
|
match_with_lvasgn begin kwbegin return].freeze
|
@@ -176,6 +176,8 @@ module RuboCop
|
|
176
176
|
alias on_ensure on_case
|
177
177
|
alias on_for on_case
|
178
178
|
alias on_when on_case
|
179
|
+
alias on_irange on_case
|
180
|
+
alias on_erange on_case
|
179
181
|
end
|
180
182
|
end
|
181
183
|
end
|
data/lib/rubocop/config.rb
CHANGED
@@ -26,6 +26,8 @@ module RuboCop
|
|
26
26
|
RUBY_VERSION_FILENAME = '.ruby-version'.freeze
|
27
27
|
DEFAULT_RAILS_VERSION = 5.0
|
28
28
|
OBSOLETE_COPS = {
|
29
|
+
'Style/FlipFlop' =>
|
30
|
+
'The `Style/FlipFlop` cop has been moved to `Lint/FlipFlop`.',
|
29
31
|
'Style/TrailingComma' =>
|
30
32
|
'The `Style/TrailingComma` cop no longer exists. Please use ' \
|
31
33
|
'`Style/TrailingCommaInArguments`, ' \
|
data/lib/rubocop/cop/cop.rb
CHANGED
@@ -218,7 +218,7 @@ module RuboCop
|
|
218
218
|
end
|
219
219
|
|
220
220
|
def enabled_line?(line_number)
|
221
|
-
return true
|
221
|
+
return true if @options[:ignore_disable_comments] || !@processed_source
|
222
222
|
|
223
223
|
@processed_source.comment_config.cop_enabled_at_line?(self, line_number)
|
224
224
|
end
|
@@ -33,10 +33,11 @@ module RuboCop
|
|
33
33
|
#
|
34
34
|
# # bad
|
35
35
|
# h = { a: { b: 2 } }
|
36
|
+
# foo = { { a: 1 } => { b: { c: 2 } } }
|
36
37
|
#
|
37
38
|
# # good
|
38
39
|
# h = { a: { b: 2 }}
|
39
|
-
#
|
40
|
+
# foo = {{ a: 1 } => { b: { c: 2 }}}
|
40
41
|
#
|
41
42
|
# @example EnforcedStyleForEmptyBraces: no_space (default)
|
42
43
|
# # The `no_space` EnforcedStyleForEmptyBraces style enforces that
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks constructors for disjunctive assignments that should
|
7
|
+
# be plain assignments.
|
8
|
+
#
|
9
|
+
# So far, this cop is only concerned with disjunctive assignment of
|
10
|
+
# instance variables.
|
11
|
+
#
|
12
|
+
# In ruby, an instance variable is nil until a value is assigned, so the
|
13
|
+
# disjunction is unnecessary. A plain assignment has the same effect.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# # bad
|
17
|
+
# def initialize
|
18
|
+
# @x ||= 1
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# def initialize
|
23
|
+
# @x = 1
|
24
|
+
# end
|
25
|
+
class DisjunctiveAssignmentInConstructor < Cop
|
26
|
+
MSG = 'Unnecessary disjunctive assignment. Use plain assignment.'.freeze
|
27
|
+
|
28
|
+
def on_def(node)
|
29
|
+
check(node)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def check(node)
|
35
|
+
return unless node.method_name == :initialize
|
36
|
+
|
37
|
+
check_body(node)
|
38
|
+
end
|
39
|
+
|
40
|
+
# @param [DefNode] node a constructor definition
|
41
|
+
def check_body(node)
|
42
|
+
body = node.body
|
43
|
+
case body.type
|
44
|
+
when :begin
|
45
|
+
check_body_lines(body.child_nodes)
|
46
|
+
else
|
47
|
+
check_body_lines([body])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param [Array] lines the logical lines of the constructor
|
52
|
+
def check_body_lines(lines)
|
53
|
+
lines.each do |line|
|
54
|
+
case line.type
|
55
|
+
when :or_asgn
|
56
|
+
check_disjunctive_assignment(line)
|
57
|
+
else
|
58
|
+
# Once we encounter something other than a disjunctive
|
59
|
+
# assignment, we cease our investigation, because we can't be
|
60
|
+
# certain that any future disjunctive assignments are offensive.
|
61
|
+
# You're off the case, detective!
|
62
|
+
break
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Add an offense if the LHS of the given disjunctive assignment is
|
68
|
+
# an instance variable.
|
69
|
+
#
|
70
|
+
# For now, we only care about assignments to instance variables.
|
71
|
+
#
|
72
|
+
# @param [Node] node a disjunctive assignment
|
73
|
+
def check_disjunctive_assignment(node)
|
74
|
+
lhs = node.child_nodes.first
|
75
|
+
add_offense(node, location: :operator) if lhs.ivasgn_type?
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -2,8 +2,9 @@
|
|
2
2
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
|
-
module
|
6
|
-
# This cop looks for uses of flip
|
5
|
+
module Lint
|
6
|
+
# This cop looks for uses of flip-flop operator.
|
7
|
+
# flip-flop operator is deprecated since Ruby 2.6.0.
|
7
8
|
#
|
8
9
|
# @example
|
9
10
|
# # bad
|
@@ -16,7 +17,7 @@ module RuboCop
|
|
16
17
|
# puts x if (x >= 5) && (x <= 10)
|
17
18
|
# end
|
18
19
|
class FlipFlop < Cop
|
19
|
-
MSG = 'Avoid the use of flip
|
20
|
+
MSG = 'Avoid the use of flip-flop operators.'.freeze
|
20
21
|
|
21
22
|
def on_iflipflop(node)
|
22
23
|
add_offense(node)
|
@@ -53,11 +53,7 @@ module RuboCop
|
|
53
53
|
return if rescue_modifier?(node)
|
54
54
|
|
55
55
|
_body, *rescues, _else = *node
|
56
|
-
rescued_groups = rescues
|
57
|
-
rescue_group, = *group
|
58
|
-
|
59
|
-
exceptions << evaluate_exceptions(rescue_group)
|
60
|
-
end
|
56
|
+
rescued_groups = rescued_groups_for(rescues)
|
61
57
|
|
62
58
|
rescue_group_rescues_multiple_levels = rescued_groups.any? do |group|
|
63
59
|
contains_multiple_levels_of_exceptions?(group)
|
@@ -72,17 +68,16 @@ module RuboCop
|
|
72
68
|
private
|
73
69
|
|
74
70
|
def offense_range(rescues)
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
range_between(first_rescue.loc.expression.begin_pos, end_pos)
|
71
|
+
shadowing_rescue = find_shadowing_rescue(rescues)
|
72
|
+
expression = shadowing_rescue.loc.expression
|
73
|
+
range_between(expression.begin_pos, expression.end_pos)
|
74
|
+
end
|
75
|
+
|
76
|
+
def rescued_groups_for(rescues)
|
77
|
+
rescues.map do |group|
|
78
|
+
rescue_group, = *group
|
79
|
+
evaluate_exceptions(rescue_group)
|
80
|
+
end
|
86
81
|
end
|
87
82
|
|
88
83
|
def contains_multiple_levels_of_exceptions?(group)
|
@@ -153,6 +148,17 @@ module RuboCop
|
|
153
148
|
klass.source
|
154
149
|
end.compact
|
155
150
|
end
|
151
|
+
|
152
|
+
def find_shadowing_rescue(rescues)
|
153
|
+
rescued_groups = rescued_groups_for(rescues)
|
154
|
+
rescued_groups.zip(rescues).each do |group, res|
|
155
|
+
return res if contains_multiple_levels_of_exceptions?(group)
|
156
|
+
end
|
157
|
+
|
158
|
+
rescued_groups.each_cons(2).with_index do |group_pair, i|
|
159
|
+
return rescues[i] unless sorted?(group_pair)
|
160
|
+
end
|
161
|
+
end
|
156
162
|
end
|
157
163
|
end
|
158
164
|
end
|