rubocop 0.91.0 → 0.91.1
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/README.md +1 -1
- data/config/default.yml +9 -1
- data/lib/rubocop.rb +1 -1
- data/lib/rubocop/comment_config.rb +9 -5
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/class_structure.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +4 -13
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +14 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -2
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +10 -1
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +7 -7
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +4 -18
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +2 -2
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +23 -3
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +2 -4
- data/lib/rubocop/cop/lint/identity_comparison.rb +5 -3
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +22 -12
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
- data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -5
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +3 -9
- data/lib/rubocop/cop/lint/useless_times.rb +11 -2
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +25 -16
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
- data/lib/rubocop/cop/mixin/rescue_node.rb +1 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -3
- data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
- data/lib/rubocop/cop/style/combinable_loops.rb +5 -10
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -8
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +15 -6
- data/lib/rubocop/cop/style/if_unless_modifier.rb +0 -4
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -6
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
- data/lib/rubocop/cop/style/multiline_when_then.rb +1 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +3 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +3 -0
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -9
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
- data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -3
- data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
- data/lib/rubocop/cop/style/redundant_return.rb +17 -17
- data/lib/rubocop/cop/style/redundant_self.rb +7 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +13 -24
- data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +4 -3
- data/lib/rubocop/cop/util.rb +0 -1
- data/lib/rubocop/directive_comment.rb +32 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +3 -3
- data/lib/rubocop/cop/tokens_util.rb +0 -84
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3c2093a4cd4b9f214ecef0ecf755abf1fcdcef137aaf5cd2c088537cfa3a7e6
|
4
|
+
data.tar.gz: e470d985cba7af81cfae61f82b5cc52fde7b8e1bceb1993af84db21bb370b592
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb916e735bfbdc7063f730d0a0407a3bb3037b2ccb1c0166b73fdc08e887f47f45aa95ab02bd2540404868c3afa48e77b3a2efaa0c93333fc61a6ae12c4ba275
|
7
|
+
data.tar.gz: b70b264424f19e87a194bbfe370c368806b398be3b6efba1f420ae980d3c0ac1c50d3fd736571bd1933aaa38d81b083a47abb7c10167d972667b2234ec3dba84
|
data/README.md
CHANGED
@@ -49,7 +49,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
|
|
49
49
|
might want to use a conservative version lock in your `Gemfile`:
|
50
50
|
|
51
51
|
```rb
|
52
|
-
gem 'rubocop', '~> 0.91.
|
52
|
+
gem 'rubocop', '~> 0.91.1', require: false
|
53
53
|
```
|
54
54
|
|
55
55
|
## Quickstart
|
data/config/default.yml
CHANGED
@@ -3283,11 +3283,16 @@ Style/IpAddresses:
|
|
3283
3283
|
Description: "Don't include literal IP addresses in code."
|
3284
3284
|
Enabled: false
|
3285
3285
|
VersionAdded: '0.58'
|
3286
|
-
VersionChanged: '0.
|
3286
|
+
VersionChanged: '0.91'
|
3287
3287
|
# Allow addresses to be permitted
|
3288
3288
|
AllowedAddresses:
|
3289
3289
|
- "::"
|
3290
3290
|
# :: is a valid IPv6 address, but could potentially be legitimately in code
|
3291
|
+
Exclude:
|
3292
|
+
- '**/*.gemfile'
|
3293
|
+
- '**/Gemfile'
|
3294
|
+
- '**/gems.rb'
|
3295
|
+
- '**/*.gemspec'
|
3291
3296
|
|
3292
3297
|
Style/KeywordParametersOrder:
|
3293
3298
|
Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.'
|
@@ -3988,6 +3993,8 @@ Style/SafeNavigation:
|
|
3988
3993
|
This cop transforms usages of a method call safeguarded by
|
3989
3994
|
a check for the existence of the object to
|
3990
3995
|
safe navigation (`&.`).
|
3996
|
+
Auto-correction is unsafe as it assumes the object will
|
3997
|
+
be `nil` or truthy, but never `false`.
|
3991
3998
|
Enabled: true
|
3992
3999
|
VersionAdded: '0.43'
|
3993
4000
|
VersionChanged: '0.77'
|
@@ -4000,6 +4007,7 @@ Style/SafeNavigation:
|
|
4000
4007
|
- presence
|
4001
4008
|
- try
|
4002
4009
|
- try!
|
4010
|
+
SafeAutoCorrect: false
|
4003
4011
|
|
4004
4012
|
Style/Sample:
|
4005
4013
|
Description: >-
|
data/lib/rubocop.rb
CHANGED
@@ -25,7 +25,6 @@ require_relative 'rubocop/string_interpreter'
|
|
25
25
|
require_relative 'rubocop/error'
|
26
26
|
require_relative 'rubocop/warning'
|
27
27
|
|
28
|
-
require_relative 'rubocop/cop/tokens_util'
|
29
28
|
require_relative 'rubocop/cop/util'
|
30
29
|
require_relative 'rubocop/cop/offense'
|
31
30
|
require_relative 'rubocop/cop/message_annotator'
|
@@ -615,6 +614,7 @@ require_relative 'rubocop/config_obsoletion'
|
|
615
614
|
require_relative 'rubocop/config_store'
|
616
615
|
require_relative 'rubocop/config_validator'
|
617
616
|
require_relative 'rubocop/target_finder'
|
617
|
+
require_relative 'rubocop/directive_comment'
|
618
618
|
require_relative 'rubocop/comment_config'
|
619
619
|
require_relative 'rubocop/magic_comment'
|
620
620
|
require_relative 'rubocop/result_cache'
|
@@ -41,12 +41,15 @@ module RuboCop
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def extra_enabled_comments
|
44
|
-
extra_enabled_comments_with_names(
|
44
|
+
extra_enabled_comments_with_names(
|
45
|
+
extras: Hash.new { |h, k| h[k] = [] },
|
46
|
+
names: Hash.new(0)
|
47
|
+
)
|
45
48
|
end
|
46
49
|
|
47
50
|
private
|
48
51
|
|
49
|
-
def extra_enabled_comments_with_names(extras
|
52
|
+
def extra_enabled_comments_with_names(extras:, names:)
|
50
53
|
each_directive do |comment, cop_names, disabled|
|
51
54
|
next unless comment_only_line?(comment.loc.expression.line)
|
52
55
|
|
@@ -190,18 +193,19 @@ module RuboCop
|
|
190
193
|
enabled_cops += 1
|
191
194
|
end
|
192
195
|
|
193
|
-
extras <<
|
196
|
+
extras[comment] << 'all' if enabled_cops.zero?
|
194
197
|
end
|
195
198
|
|
199
|
+
# Collect cops that have been disabled or enabled by name in a directive comment
|
200
|
+
# so that `Lint/RedundantCopEnableDirective` can register offenses correctly.
|
196
201
|
def handle_switch(cop_names, names, disabled, extras, comment)
|
197
202
|
cop_names.each do |name|
|
198
|
-
names[name] ||= 0
|
199
203
|
if disabled
|
200
204
|
names[name] += 1
|
201
205
|
elsif (names[name]).positive?
|
202
206
|
names[name] -= 1
|
203
207
|
else
|
204
|
-
extras <<
|
208
|
+
extras[comment] << name
|
205
209
|
end
|
206
210
|
end
|
207
211
|
end
|
@@ -105,7 +105,10 @@ module RuboCop
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def incorrect_style(when_node)
|
108
|
-
|
108
|
+
depth = indent_one_step? ? 'one step more than' : 'as deep as'
|
109
|
+
message = format(MSG, depth: depth, base: style)
|
110
|
+
|
111
|
+
add_offense(when_node.loc.keyword, message: message) do |corrector|
|
109
112
|
detect_incorrect_style(when_node)
|
110
113
|
|
111
114
|
whitespace = whitespace_range(when_node)
|
@@ -125,12 +128,6 @@ module RuboCop
|
|
125
128
|
end
|
126
129
|
end
|
127
130
|
|
128
|
-
def find_message(*)
|
129
|
-
depth = indent_one_step? ? 'one step more than' : 'as deep as'
|
130
|
-
|
131
|
-
format(MSG, depth: depth, base: style)
|
132
|
-
end
|
133
|
-
|
134
131
|
def base_column(case_node, base)
|
135
132
|
case base
|
136
133
|
when :case then case_node.location.keyword.column
|
@@ -169,7 +169,7 @@ module RuboCop
|
|
169
169
|
# Autocorrect by swapping between two nodes autocorrecting them
|
170
170
|
def autocorrect(corrector, node)
|
171
171
|
node_classification = classify(node)
|
172
|
-
previous =
|
172
|
+
previous = node.left_siblings.find do |sibling|
|
173
173
|
classification = classify(sibling)
|
174
174
|
!ignore?(classification) && node_classification != classification
|
175
175
|
end
|
@@ -95,7 +95,7 @@ module RuboCop
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def next_sibling_parent_empty_or_else?(node)
|
98
|
-
next_sibling = node.
|
98
|
+
next_sibling = node.right_sibling
|
99
99
|
return true if next_sibling.nil?
|
100
100
|
|
101
101
|
parent = next_sibling.parent
|
@@ -104,7 +104,7 @@ module RuboCop
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def next_sibling_empty_or_guard_clause?(node)
|
107
|
-
next_sibling = node.
|
107
|
+
next_sibling = node.right_sibling
|
108
108
|
return true if next_sibling.nil?
|
109
109
|
|
110
110
|
next_sibling.if_type? && contains_guard_clause?(next_sibling)
|
@@ -53,7 +53,6 @@ module RuboCop
|
|
53
53
|
#
|
54
54
|
class EmptyLineAfterMultilineCondition < Base
|
55
55
|
include RangeHelp
|
56
|
-
include RescueNode
|
57
56
|
extend AutoCorrector
|
58
57
|
|
59
58
|
MSG = 'Use empty line after multiline condition.'
|
@@ -62,7 +61,7 @@ module RuboCop
|
|
62
61
|
return if node.ternary?
|
63
62
|
|
64
63
|
if node.modifier_form?
|
65
|
-
check_condition(node.condition) if right_sibling
|
64
|
+
check_condition(node.condition) if node.right_sibling
|
66
65
|
else
|
67
66
|
check_condition(node.condition)
|
68
67
|
end
|
@@ -74,7 +73,7 @@ module RuboCop
|
|
74
73
|
alias on_until on_while
|
75
74
|
|
76
75
|
def on_while_post(node)
|
77
|
-
return unless right_sibling
|
76
|
+
return unless node.right_sibling
|
78
77
|
|
79
78
|
check_condition(node.condition)
|
80
79
|
end
|
@@ -92,10 +91,8 @@ module RuboCop
|
|
92
91
|
end
|
93
92
|
|
94
93
|
def on_rescue(node)
|
95
|
-
|
96
|
-
|
97
|
-
resbodies.each do |resbody|
|
98
|
-
rescued_exceptions = rescued_exceptions(resbody)
|
94
|
+
node.resbody_branches.each do |resbody|
|
95
|
+
rescued_exceptions = resbody.exceptions
|
99
96
|
next if !multiline_rescue_exceptions?(rescued_exceptions) ||
|
100
97
|
next_line_empty?(rescued_exceptions.last.last_line)
|
101
98
|
|
@@ -116,12 +113,6 @@ module RuboCop
|
|
116
113
|
processed_source[line].blank?
|
117
114
|
end
|
118
115
|
|
119
|
-
def right_sibling(node)
|
120
|
-
return unless node.parent
|
121
|
-
|
122
|
-
node.parent.children[node.sibling_index + 1]
|
123
|
-
end
|
124
|
-
|
125
116
|
def multiline_when_condition?(when_node)
|
126
117
|
when_node.conditions.first.first_line != when_node.conditions.last.last_line
|
127
118
|
end
|
@@ -84,14 +84,7 @@ module RuboCop
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def on_send(node)
|
87
|
-
return unless node
|
88
|
-
|
89
|
-
case style
|
90
|
-
when :around
|
91
|
-
return if empty_lines_around?(node)
|
92
|
-
when :only_before
|
93
|
-
return if allowed_only_before_style?(node)
|
94
|
-
end
|
87
|
+
return unless register_offense?(node)
|
95
88
|
|
96
89
|
message = message(node)
|
97
90
|
add_offense(node, message: message) do |corrector|
|
@@ -105,6 +98,19 @@ module RuboCop
|
|
105
98
|
|
106
99
|
private
|
107
100
|
|
101
|
+
def register_offense?(node)
|
102
|
+
return false unless node.bare_access_modifier? && !node.parent.block_type?
|
103
|
+
|
104
|
+
case style
|
105
|
+
when :around
|
106
|
+
return false if empty_lines_around?(node)
|
107
|
+
when :only_before
|
108
|
+
return false if allowed_only_before_style?(node)
|
109
|
+
end
|
110
|
+
|
111
|
+
true
|
112
|
+
end
|
113
|
+
|
108
114
|
def allowed_only_before_style?(node)
|
109
115
|
if node.special_modifier?
|
110
116
|
return true if processed_source[node.last_line] == 'end'
|
@@ -113,10 +113,9 @@ module RuboCop
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def keyword_locations_in_rescue(node)
|
116
|
-
_begin_body, *resbodies, _else_body = *node
|
117
116
|
[
|
118
117
|
node.loc.else,
|
119
|
-
*
|
118
|
+
*node.resbody_branches.map { |body| body.loc.keyword }
|
120
119
|
].compact
|
121
120
|
end
|
122
121
|
|
@@ -191,7 +191,16 @@ module RuboCop
|
|
191
191
|
end
|
192
192
|
|
193
193
|
def begin_end_alignment_style
|
194
|
-
|
194
|
+
# FIXME: Workaround for pending status for `Layout/BeginEndAlignment` cop
|
195
|
+
# When RuboCop 1.0 is released, please replace it with the following condition.
|
196
|
+
#
|
197
|
+
# config.for_cop('Layout/BeginEndAlignment')['Enabled'] &&
|
198
|
+
# config.for_cop('Layout/BeginEndAlignment')['EnforcedStyleAlignWith']
|
199
|
+
if config.for_all_cops['NewCops'] == 'enable' ||
|
200
|
+
config.for_cop('Layout/BeginEndAlignment')['Enabled'] &&
|
201
|
+
config.for_cop('Layout/BeginEndAlignment')['Enabled'] != 'pending'
|
202
|
+
config.for_cop('Layout/BeginEndAlignment')['EnforcedStyleAlignWith']
|
203
|
+
end
|
195
204
|
end
|
196
205
|
end
|
197
206
|
end
|
@@ -36,8 +36,8 @@ module RuboCop
|
|
36
36
|
MSG = 'Surrounding space %<type>s in default value assignment.'
|
37
37
|
|
38
38
|
def on_optarg(node)
|
39
|
-
|
40
|
-
arg, equals, value =
|
39
|
+
tokens = processed_source.tokens_within(node)
|
40
|
+
arg, equals, value = tokens.take(3)
|
41
41
|
check_optarg(arg, equals, value)
|
42
42
|
end
|
43
43
|
|
@@ -108,11 +108,11 @@ module RuboCop
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def left_array_bracket(node)
|
111
|
-
|
111
|
+
processed_source.tokens_within(node).find(&:left_array_bracket?)
|
112
112
|
end
|
113
113
|
|
114
114
|
def right_array_bracket(node)
|
115
|
-
|
115
|
+
processed_source.tokens_within(node).reverse.find(&:right_bracket?)
|
116
116
|
end
|
117
117
|
|
118
118
|
def empty_config
|
@@ -120,7 +120,7 @@ module RuboCop
|
|
120
120
|
end
|
121
121
|
|
122
122
|
def next_to_newline?(node, token)
|
123
|
-
|
123
|
+
processed_source.tokens_within(node)[index_for(node, token) + 1].line != token.line
|
124
124
|
end
|
125
125
|
|
126
126
|
def end_has_own_line?(token)
|
@@ -131,7 +131,7 @@ module RuboCop
|
|
131
131
|
end
|
132
132
|
|
133
133
|
def index_for(node, token)
|
134
|
-
|
134
|
+
processed_source.tokens_within(node).index(token)
|
135
135
|
end
|
136
136
|
|
137
137
|
def line_and_column_for(token)
|
@@ -153,7 +153,7 @@ module RuboCop
|
|
153
153
|
end
|
154
154
|
|
155
155
|
def next_to_comment?(node, token)
|
156
|
-
|
156
|
+
processed_source.tokens_within(node)[index_for(node, token) + 1].comment?
|
157
157
|
end
|
158
158
|
|
159
159
|
def compact_offenses(node, left, right, start_ok, end_ok)
|
@@ -184,9 +184,9 @@ module RuboCop
|
|
184
184
|
def multi_dimensional_array?(node, token, side: :right)
|
185
185
|
i = index_for(node, token)
|
186
186
|
if side == :right
|
187
|
-
|
187
|
+
processed_source.tokens_within(node)[i - 1].right_bracket?
|
188
188
|
else
|
189
|
-
|
189
|
+
processed_source.tokens_within(node)[i + 1].left_array_bracket?
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
@@ -72,29 +72,15 @@ module RuboCop
|
|
72
72
|
MSG = 'Space inside %<problem>s.'
|
73
73
|
|
74
74
|
def on_hash(node)
|
75
|
-
tokens = processed_source.
|
75
|
+
tokens = processed_source.tokens_within(node)
|
76
|
+
return unless tokens.first.left_brace? && tokens.last.right_curly_brace?
|
76
77
|
|
77
|
-
|
78
|
-
|
79
|
-
return if begin_index == end_index - 1
|
80
|
-
|
81
|
-
check(tokens[end_index - 1], tokens[end_index])
|
82
|
-
end
|
78
|
+
check(tokens[0], tokens[1])
|
79
|
+
check(tokens[-2], tokens[-1]) if tokens.size > 2
|
83
80
|
end
|
84
81
|
|
85
82
|
private
|
86
83
|
|
87
|
-
def hash_literal_with_braces(node)
|
88
|
-
tokens = processed_source.tokens
|
89
|
-
begin_index = index_of_first_token(node)
|
90
|
-
return unless tokens[begin_index].left_brace?
|
91
|
-
|
92
|
-
end_index = index_of_last_token(node)
|
93
|
-
return unless tokens[end_index].right_curly_brace?
|
94
|
-
|
95
|
-
yield begin_index, end_index
|
96
|
-
end
|
97
|
-
|
98
84
|
def check(token1, token2)
|
99
85
|
# No offense if line break inside.
|
100
86
|
return if token1.line < token2.line
|
@@ -66,7 +66,7 @@ module RuboCop
|
|
66
66
|
def on_send(node)
|
67
67
|
return if node.multiline?
|
68
68
|
|
69
|
-
tokens =
|
69
|
+
tokens = processed_source.tokens_within(node)
|
70
70
|
left_token = left_ref_bracket(node, tokens)
|
71
71
|
return unless left_token
|
72
72
|
|
@@ -98,7 +98,7 @@ module RuboCop
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def reference_brackets(node)
|
101
|
-
tokens =
|
101
|
+
tokens = processed_source.tokens_within(node)
|
102
102
|
left = left_ref_bracket(node, tokens)
|
103
103
|
[left, closing_bracket(tokens, left)]
|
104
104
|
end
|
@@ -54,8 +54,8 @@ module RuboCop
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def delimiters(begin_node)
|
57
|
-
left = processed_source.
|
58
|
-
right = processed_source.
|
57
|
+
left = processed_source.first_token_of(begin_node)
|
58
|
+
right = processed_source.last_token_of(begin_node)
|
59
59
|
[left, right]
|
60
60
|
end
|
61
61
|
end
|
@@ -6,8 +6,11 @@ module RuboCop
|
|
6
6
|
# Do not define constants within a block, since the block's scope does not
|
7
7
|
# isolate or namespace the constant in any way.
|
8
8
|
#
|
9
|
-
#
|
10
|
-
#
|
9
|
+
# If you are trying to define that constant once, define it outside of
|
10
|
+
# the block instead, or use a variable or method if defining the constant
|
11
|
+
# in the outer scope would be problematic.
|
12
|
+
#
|
13
|
+
# For meta-programming, use `const_set`.
|
11
14
|
#
|
12
15
|
# @example
|
13
16
|
# # bad
|
@@ -20,6 +23,14 @@ module RuboCop
|
|
20
23
|
# class TestRequest; end
|
21
24
|
# end
|
22
25
|
#
|
26
|
+
# # bad
|
27
|
+
# module M
|
28
|
+
# extend ActiveSupport::Concern
|
29
|
+
# included do
|
30
|
+
# LIST = []
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
#
|
23
34
|
# # good
|
24
35
|
# task :lint do
|
25
36
|
# files_to_lint = Dir['lib/*.rb']
|
@@ -28,9 +39,18 @@ module RuboCop
|
|
28
39
|
# # good
|
29
40
|
# describe 'making a request' do
|
30
41
|
# let(:test_request) { Class.new }
|
42
|
+
# # see also `stub_const` for RSpec
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# # good
|
46
|
+
# module M
|
47
|
+
# extend ActiveSupport::Concern
|
48
|
+
# included do
|
49
|
+
# const_set(:LIST, [])
|
50
|
+
# end
|
31
51
|
# end
|
32
52
|
class ConstantDefinitionInBlock < Base
|
33
|
-
MSG = 'Do not define constants within a block.'
|
53
|
+
MSG = 'Do not define constants this way within a block.'
|
34
54
|
|
35
55
|
def_node_matcher :constant_assigned_in_block?, <<~PATTERN
|
36
56
|
({^block_type? [^begin_type? ^^block_type?]} nil? ...)
|