rubocop 0.83.0 → 0.84.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/README.md +2 -2
- data/config/default.yml +20 -3
- data/lib/rubocop.rb +6 -59
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cli/command/show_cops.rb +2 -6
- data/lib/rubocop/config.rb +1 -3
- data/lib/rubocop/config_loader.rb +3 -9
- data/lib/rubocop/config_loader_resolver.rb +2 -6
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
- data/lib/rubocop/cop/corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -6
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +62 -4
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +0 -2
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -6
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -3
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +2 -6
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -6
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +4 -2
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +133 -0
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -6
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +11 -3
- data/lib/rubocop/cop/lint/percent_string_array.rb +1 -3
- data/lib/rubocop/cop/lint/suppressed_exception.rb +12 -1
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -3
- data/lib/rubocop/cop/migration/department_name.rb +5 -9
- data/lib/rubocop/cop/mixin/alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/array_min_size.rb +2 -6
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +4 -12
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -3
- data/lib/rubocop/cop/mixin/surrounding_space.rb +1 -3
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -3
- data/lib/rubocop/cop/naming/file_name.rb +1 -3
- data/lib/rubocop/cop/registry.rb +2 -6
- data/lib/rubocop/cop/severity.rb +1 -3
- data/lib/rubocop/cop/style/and_or.rb +2 -2
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
- data/lib/rubocop/cop/style/conditional_assignment.rb +1 -3
- data/lib/rubocop/cop/style/double_negation.rb +41 -4
- data/lib/rubocop/cop/style/empty_literal.rb +1 -3
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +2 -4
- data/lib/rubocop/cop/style/hash_syntax.rb +12 -5
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
- data/lib/rubocop/cop/style/one_line_conditional.rb +2 -6
- data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
- data/lib/rubocop/cop/style/safe_navigation.rb +2 -6
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
- data/lib/rubocop/cop/style/special_global_vars.rb +2 -6
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -3
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +2 -6
- data/lib/rubocop/cop/variable_force.rb +3 -9
- data/lib/rubocop/cop/variable_force/branch.rb +2 -6
- data/lib/rubocop/cop/variable_force/variable.rb +2 -6
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/formatter/base_formatter.rb +0 -4
- data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
- data/lib/rubocop/formatter/formatter_set.rb +1 -3
- data/lib/rubocop/options.rb +2 -8
- data/lib/rubocop/remote_config.rb +1 -3
- data/lib/rubocop/result_cache.rb +1 -3
- data/lib/rubocop/rspec/cop_helper.rb +1 -3
- data/lib/rubocop/rspec/expect_offense.rb +3 -9
- data/lib/rubocop/rspec/shared_contexts.rb +54 -16
- data/lib/rubocop/runner.rb +8 -10
- data/lib/rubocop/target_finder.rb +2 -6
- data/lib/rubocop/version.rb +5 -3
- metadata +19 -56
- data/lib/rubocop/ast/builder.rb +0 -85
- data/lib/rubocop/ast/node.rb +0 -637
- data/lib/rubocop/ast/node/alias_node.rb +0 -24
- data/lib/rubocop/ast/node/and_node.rb +0 -29
- data/lib/rubocop/ast/node/args_node.rb +0 -29
- data/lib/rubocop/ast/node/array_node.rb +0 -70
- data/lib/rubocop/ast/node/block_node.rb +0 -121
- data/lib/rubocop/ast/node/break_node.rb +0 -17
- data/lib/rubocop/ast/node/case_match_node.rb +0 -56
- data/lib/rubocop/ast/node/case_node.rb +0 -56
- data/lib/rubocop/ast/node/class_node.rb +0 -31
- data/lib/rubocop/ast/node/def_node.rb +0 -82
- data/lib/rubocop/ast/node/defined_node.rb +0 -17
- data/lib/rubocop/ast/node/ensure_node.rb +0 -17
- data/lib/rubocop/ast/node/float_node.rb +0 -12
- data/lib/rubocop/ast/node/for_node.rb +0 -53
- data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
- data/lib/rubocop/ast/node/hash_node.rb +0 -109
- data/lib/rubocop/ast/node/if_node.rb +0 -175
- data/lib/rubocop/ast/node/int_node.rb +0 -12
- data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
- data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -269
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
- data/lib/rubocop/ast/node/module_node.rb +0 -24
- data/lib/rubocop/ast/node/or_node.rb +0 -29
- data/lib/rubocop/ast/node/pair_node.rb +0 -63
- data/lib/rubocop/ast/node/range_node.rb +0 -18
- data/lib/rubocop/ast/node/regexp_node.rb +0 -33
- data/lib/rubocop/ast/node/resbody_node.rb +0 -24
- data/lib/rubocop/ast/node/retry_node.rb +0 -17
- data/lib/rubocop/ast/node/return_node.rb +0 -24
- data/lib/rubocop/ast/node/self_class_node.rb +0 -24
- data/lib/rubocop/ast/node/send_node.rb +0 -17
- data/lib/rubocop/ast/node/str_node.rb +0 -16
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/symbol_node.rb +0 -12
- data/lib/rubocop/ast/node/until_node.rb +0 -35
- data/lib/rubocop/ast/node/when_node.rb +0 -53
- data/lib/rubocop/ast/node/while_node.rb +0 -35
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -202
- data/lib/rubocop/node_pattern.rb +0 -887
- data/lib/rubocop/processed_source.rb +0 -213
- data/lib/rubocop/token.rb +0 -114
@@ -167,9 +167,7 @@ module RuboCop
|
|
167
167
|
checked_variable, matching_receiver, method =
|
168
168
|
extract_common_parts(receiver, variable)
|
169
169
|
|
170
|
-
if receiver && LOGIC_JUMP_KEYWORDS.include?(receiver.type)
|
171
|
-
matching_receiver = nil
|
172
|
-
end
|
170
|
+
matching_receiver = nil if receiver && LOGIC_JUMP_KEYWORDS.include?(receiver.type)
|
173
171
|
|
174
172
|
[checked_variable, matching_receiver, receiver, method]
|
175
173
|
end
|
@@ -221,9 +219,7 @@ module RuboCop
|
|
221
219
|
return true if unsafe_method?(method)
|
222
220
|
|
223
221
|
method.each_ancestor(:send).any? do |ancestor|
|
224
|
-
unless config.for_cop('Lint/SafeNavigationChain')['Enabled']
|
225
|
-
break true
|
226
|
-
end
|
222
|
+
break true unless config.for_cop('Lint/SafeNavigationChain')['Enabled']
|
227
223
|
|
228
224
|
break true if unsafe_method?(ancestor)
|
229
225
|
break true if nil_methods.include?(ancestor.method_name)
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
|
20
20
|
MSG = 'Prefer ary[n..] over ary[n..-1].'
|
21
21
|
|
22
|
-
def_node_matcher :range_till_minus_one?, '(irange
|
22
|
+
def_node_matcher :range_till_minus_one?, '(irange !nil? (int -1))'
|
23
23
|
|
24
24
|
def on_send(node)
|
25
25
|
return unless node.method?(:[]) && node.arguments.count == 1
|
@@ -181,13 +181,9 @@ module RuboCop
|
|
181
181
|
parent_type = node.parent&.type
|
182
182
|
preferred_name = preferred_names(global_var).first
|
183
183
|
|
184
|
-
unless %i[dstr xstr regexp].include?(parent_type)
|
185
|
-
return preferred_name.to_s
|
186
|
-
end
|
184
|
+
return preferred_name.to_s unless %i[dstr xstr regexp].include?(parent_type)
|
187
185
|
|
188
|
-
if style == :use_english_names
|
189
|
-
return english_name_replacement(preferred_name, node)
|
190
|
-
end
|
186
|
+
return english_name_replacement(preferred_name, node) if style == :use_english_names
|
191
187
|
|
192
188
|
"##{preferred_name}"
|
193
189
|
end
|
@@ -199,9 +199,7 @@ module RuboCop
|
|
199
199
|
# Ruby allows no space between the question mark and parentheses.
|
200
200
|
# If we remove the parentheses, we need to add a space or we'll
|
201
201
|
# generate invalid code.
|
202
|
-
unless whitespace_after?(condition)
|
203
|
-
corrector.insert_after(condition.loc.end, ' ')
|
204
|
-
end
|
202
|
+
corrector.insert_after(condition.loc.end, ' ') unless whitespace_after?(condition)
|
205
203
|
end
|
206
204
|
end
|
207
205
|
|
@@ -122,13 +122,9 @@ module RuboCop
|
|
122
122
|
|
123
123
|
return unless first_offense
|
124
124
|
|
125
|
-
if unused_variables_only?(first_offense, variables)
|
126
|
-
return unused_range(node.type, mlhs_node, right)
|
127
|
-
end
|
125
|
+
return unused_range(node.type, mlhs_node, right) if unused_variables_only?(first_offense, variables)
|
128
126
|
|
129
|
-
if Util.parentheses?(mlhs_node)
|
130
|
-
return range_for_parentheses(first_offense, mlhs_node)
|
131
|
-
end
|
127
|
+
return range_for_parentheses(first_offense, mlhs_node) if Util.parentheses?(mlhs_node)
|
132
128
|
|
133
129
|
range_between(first_offense.source_range.begin_pos,
|
134
130
|
node.loc.operator.begin_pos)
|
@@ -152,9 +152,7 @@ module RuboCop
|
|
152
152
|
def process_variable_assignment(node)
|
153
153
|
name = node.children.first
|
154
154
|
|
155
|
-
unless variable_table.variable_exist?(name)
|
156
|
-
variable_table.declare_variable(name, node)
|
157
|
-
end
|
155
|
+
variable_table.declare_variable(name, node) unless variable_table.variable_exist?(name)
|
158
156
|
|
159
157
|
# Need to scan rhs before assignment so that we can mark previous
|
160
158
|
# assignments as referenced if rhs has referencing to the variable
|
@@ -211,9 +209,7 @@ module RuboCop
|
|
211
209
|
|
212
210
|
name = asgn_node.children.first
|
213
211
|
|
214
|
-
unless variable_table.variable_exist?(name)
|
215
|
-
variable_table.declare_variable(name, asgn_node)
|
216
|
-
end
|
212
|
+
variable_table.declare_variable(name, asgn_node) unless variable_table.variable_exist?(name)
|
217
213
|
|
218
214
|
# The following statements:
|
219
215
|
#
|
@@ -369,9 +365,7 @@ module RuboCop
|
|
369
365
|
AssignmentReference.new(node)
|
370
366
|
when *OPERATOR_ASSIGNMENT_TYPES
|
371
367
|
asgn_node = node.children.first
|
372
|
-
if asgn_node.lvasgn_type?
|
373
|
-
VariableReference.new(asgn_node.children.first)
|
374
|
-
end
|
368
|
+
VariableReference.new(asgn_node.children.first) if asgn_node.lvasgn_type?
|
375
369
|
end
|
376
370
|
end
|
377
371
|
|
@@ -81,9 +81,7 @@ module RuboCop
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def each_ancestor(include_self: false, &block)
|
84
|
-
unless block_given?
|
85
|
-
return to_enum(__method__, include_self: include_self)
|
86
|
-
end
|
84
|
+
return to_enum(__method__, include_self: include_self) unless block_given?
|
87
85
|
|
88
86
|
yield self if include_self
|
89
87
|
scan_ancestors(&block)
|
@@ -111,9 +109,7 @@ module RuboCop
|
|
111
109
|
return false if may_jump_to_other_branch?
|
112
110
|
|
113
111
|
other.each_ancestor(include_self: true) do |other_ancestor|
|
114
|
-
if control_node.equal?(other_ancestor.control_node)
|
115
|
-
return !child_node.equal?(other_ancestor.child_node)
|
116
|
-
end
|
112
|
+
return !child_node.equal?(other_ancestor.child_node) if control_node.equal?(other_ancestor.control_node)
|
117
113
|
end
|
118
114
|
|
119
115
|
if parent
|
@@ -47,9 +47,7 @@ module RuboCop
|
|
47
47
|
@assignments.reverse_each do |assignment|
|
48
48
|
next if consumed_branches.include?(assignment.branch)
|
49
49
|
|
50
|
-
unless assignment.run_exclusively_with?(reference)
|
51
|
-
assignment.reference!(node)
|
52
|
-
end
|
50
|
+
assignment.reference!(node) unless assignment.run_exclusively_with?(reference)
|
53
51
|
|
54
52
|
# Modifier if/unless conditions are special. Assignments made in
|
55
53
|
# them do not put the assigned variable in scope to the left of the
|
@@ -60,9 +58,7 @@ module RuboCop
|
|
60
58
|
|
61
59
|
break if !assignment.branch || assignment.branch == reference.branch
|
62
60
|
|
63
|
-
unless assignment.branch.may_run_incompletely?
|
64
|
-
consumed_branches << assignment.branch
|
65
|
-
end
|
61
|
+
consumed_branches << assignment.branch unless assignment.branch.may_run_incompletely?
|
66
62
|
end
|
67
63
|
end
|
68
64
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Ext
|
5
|
+
# Extensions to AST::ProcessedSource for our cached comment_config
|
6
|
+
module ProcessedSource
|
7
|
+
def comment_config
|
8
|
+
@comment_config ||= CommentConfig.new(self)
|
9
|
+
end
|
10
|
+
|
11
|
+
def disabled_line_ranges
|
12
|
+
comment_config.cop_disabled_line_ranges
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
RuboCop::ProcessedSource.include RuboCop::Ext::ProcessedSource
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable Layout/LineLength
|
4
|
-
|
5
3
|
module RuboCop
|
6
4
|
module Formatter
|
7
5
|
# Abstract base class for formatter, implements all public API methods.
|
@@ -41,8 +39,6 @@ module RuboCop
|
|
41
39
|
# * `#finished`
|
42
40
|
#
|
43
41
|
class BaseFormatter
|
44
|
-
# rubocop:enable Layout/LineLength
|
45
|
-
|
46
42
|
# @api public
|
47
43
|
#
|
48
44
|
# @!attribute [r] output
|
@@ -59,9 +59,7 @@ module RuboCop
|
|
59
59
|
def command
|
60
60
|
command = 'rubocop --auto-gen-config'
|
61
61
|
|
62
|
-
if @options[:auto_gen_only_exclude]
|
63
|
-
command += ' --auto-gen-only-exclude'
|
64
|
-
end
|
62
|
+
command += ' --auto-gen-only-exclude' if @options[:auto_gen_only_exclude]
|
65
63
|
|
66
64
|
if @exclude_limit_option
|
67
65
|
command +=
|
@@ -70,9 +68,7 @@ module RuboCop
|
|
70
68
|
end
|
71
69
|
command += ' --no-offense-counts' if @options[:no_offense_counts]
|
72
70
|
|
73
|
-
if @options[:no_auto_gen_timestamp]
|
74
|
-
command += ' --no-auto-gen-timestamp'
|
75
|
-
end
|
71
|
+
command += ' --no-auto-gen-timestamp' if @options[:no_auto_gen_timestamp]
|
76
72
|
|
77
73
|
command
|
78
74
|
end
|
@@ -116,14 +112,10 @@ module RuboCop
|
|
116
112
|
end
|
117
113
|
|
118
114
|
def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
|
119
|
-
if @show_offense_counts
|
120
|
-
output_buffer.puts "# Offense count: #{offense_count}"
|
121
|
-
end
|
115
|
+
output_buffer.puts "# Offense count: #{offense_count}" if @show_offense_counts
|
122
116
|
|
123
117
|
cop_class = Cop::Cop.registry.find_by_cop_name(cop_name)
|
124
|
-
if cop_class&.new&.support_autocorrect?
|
125
|
-
output_buffer.puts '# Cop supports --auto-correct.'
|
126
|
-
end
|
118
|
+
output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.new&.support_autocorrect?
|
127
119
|
|
128
120
|
default_cfg = default_config(cop_name)
|
129
121
|
return unless default_cfg
|
@@ -87,9 +87,7 @@ module RuboCop
|
|
87
87
|
|
88
88
|
raise %(No formatter for "#{specified_key}") if matching_keys.empty?
|
89
89
|
|
90
|
-
if matching_keys.size > 1
|
91
|
-
raise %(Cannot determine formatter for "#{specified_key}")
|
92
|
-
end
|
90
|
+
raise %(Cannot determine formatter for "#{specified_key}") if matching_keys.size > 1
|
93
91
|
|
94
92
|
BUILTIN_FORMATTERS_FOR_KEYS[matching_keys.first]
|
95
93
|
end
|
data/lib/rubocop/options.rb
CHANGED
@@ -275,12 +275,8 @@ module RuboCop
|
|
275
275
|
raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot ' \
|
276
276
|
'be used with --only.'
|
277
277
|
end
|
278
|
-
if except_syntax?
|
279
|
-
|
280
|
-
end
|
281
|
-
unless boolean_or_empty_cache?
|
282
|
-
raise OptionArgumentError, '-C/--cache argument must be true or false'
|
283
|
-
end
|
278
|
+
raise OptionArgumentError, 'Syntax checking cannot be turned off.' if except_syntax?
|
279
|
+
raise OptionArgumentError, '-C/--cache argument must be true or false' unless boolean_or_empty_cache?
|
284
280
|
|
285
281
|
if display_only_fail_level_offenses_with_autocorrect?
|
286
282
|
raise OptionArgumentError, '--autocorrect cannot be used with ' \
|
@@ -381,7 +377,6 @@ module RuboCop
|
|
381
377
|
# This module contains help texts for command line options.
|
382
378
|
module OptionsHelp
|
383
379
|
MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
|
384
|
-
# rubocop:disable Layout/LineLength
|
385
380
|
FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
|
386
381
|
|
387
382
|
TEXT = {
|
@@ -468,6 +463,5 @@ module RuboCop
|
|
468
463
|
'reports. This is useful for editor integration.'],
|
469
464
|
init: 'Generate a .rubocop.yml file in the current directory.'
|
470
465
|
}.freeze
|
471
|
-
# rubocop:enable Layout/LineLength
|
472
466
|
end
|
473
467
|
end
|
@@ -56,9 +56,7 @@ module RuboCop
|
|
56
56
|
def generate_request(uri)
|
57
57
|
request = Net::HTTP::Get.new(uri.request_uri)
|
58
58
|
|
59
|
-
if cache_path_exists?
|
60
|
-
request['If-Modified-Since'] = File.stat(cache_path).mtime.rfc2822
|
61
|
-
end
|
59
|
+
request['If-Modified-Since'] = File.stat(cache_path).mtime.rfc2822 if cache_path_exists?
|
62
60
|
|
63
61
|
yield request
|
64
62
|
end
|
data/lib/rubocop/result_cache.rb
CHANGED
@@ -40,9 +40,7 @@ module RuboCop
|
|
40
40
|
# Add 1 to half the number of files, so that we remove the file if
|
41
41
|
# there's only 1 left.
|
42
42
|
remove_count = 1 + files.length / 2
|
43
|
-
if verbose
|
44
|
-
puts "Removing the #{remove_count} oldest files from #{cache_root}"
|
45
|
-
end
|
43
|
+
puts "Removing the #{remove_count} oldest files from #{cache_root}" if verbose
|
46
44
|
sorted = files.sort_by { |path| File.mtime(path) }
|
47
45
|
remove_files(sorted, dirs, remove_count)
|
48
46
|
rescue Errno::ENOENT
|
@@ -57,9 +57,7 @@ module CopHelper
|
|
57
57
|
|
58
58
|
source = new_source
|
59
59
|
cnt += 1
|
60
|
-
if cnt > RuboCop::Runner::MAX_ITERATIONS
|
61
|
-
raise RuboCop::Runner::InfiniteCorrectionLoop.new(file, [])
|
62
|
-
end
|
60
|
+
raise RuboCop::Runner::InfiniteCorrectionLoop.new(file, []) if cnt > RuboCop::Runner::MAX_ITERATIONS
|
63
61
|
end
|
64
62
|
end
|
65
63
|
|
@@ -88,9 +88,7 @@ module RuboCop
|
|
88
88
|
@processed_source = parse_source(expected_annotations.plain_source,
|
89
89
|
file)
|
90
90
|
|
91
|
-
unless @processed_source.valid_syntax?
|
92
|
-
raise 'Error parsing example code'
|
93
|
-
end
|
91
|
+
raise 'Error parsing example code' unless @processed_source.valid_syntax?
|
94
92
|
|
95
93
|
_investigate(cop, @processed_source)
|
96
94
|
actual_annotations =
|
@@ -101,9 +99,7 @@ module RuboCop
|
|
101
99
|
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
102
100
|
|
103
101
|
def expect_correction(correction)
|
104
|
-
unless @processed_source
|
105
|
-
raise '`expect_correction` must follow `expect_offense`'
|
106
|
-
end
|
102
|
+
raise '`expect_correction` must follow `expect_offense`' unless @processed_source
|
107
103
|
|
108
104
|
corrector =
|
109
105
|
RuboCop::Cop::Corrector.new(@processed_source.buffer, cop.corrections)
|
@@ -113,9 +109,7 @@ module RuboCop
|
|
113
109
|
end
|
114
110
|
|
115
111
|
def expect_no_corrections
|
116
|
-
unless @processed_source
|
117
|
-
raise '`expect_no_corrections` must follow `expect_offense`'
|
118
|
-
end
|
112
|
+
raise '`expect_no_corrections` must follow `expect_offense`' unless @processed_source
|
119
113
|
|
120
114
|
return if cop.corrections.empty?
|
121
115
|
|
@@ -38,28 +38,66 @@ RSpec.shared_context 'isolated environment', :isolated_environment do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
#
|
42
|
-
RSpec.shared_context 'config', :config do
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
raise '`config` must be used in `describe SomeCopClass do .. end`'
|
47
|
-
end
|
41
|
+
# This context assumes nothing and defines `cop`, among others.
|
42
|
+
RSpec.shared_context 'config', :config do # rubocop:disable Metrics/BlockLength
|
43
|
+
### Meant to be overriden at will
|
44
|
+
|
45
|
+
let(:source) { 'code = {some: :ruby}' }
|
48
46
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
.default_configuration[cop_name]
|
55
|
-
.merge('Enabled' => true) # in case it is 'pending'
|
56
|
-
.merge(cop_config)
|
47
|
+
let(:cop_class) do
|
48
|
+
if described_class.is_a?(Class) && described_class < RuboCop::Cop::Cop
|
49
|
+
described_class
|
50
|
+
else
|
51
|
+
RuboCop::Cop::Cop
|
57
52
|
end
|
53
|
+
end
|
54
|
+
|
55
|
+
let(:cop_config) { {} }
|
56
|
+
|
57
|
+
let(:other_cops) { {} }
|
58
|
+
|
59
|
+
let(:cop_options) { {} }
|
60
|
+
|
61
|
+
### Utilities
|
62
|
+
|
63
|
+
def source_range(range, buffer: source_buffer)
|
64
|
+
Parser::Source::Range.new(buffer, range.begin,
|
65
|
+
range.exclude_end? ? range.end : range.end + 1)
|
66
|
+
end
|
58
67
|
|
59
|
-
|
68
|
+
### Usefull intermediary steps (less likely to be overriden)
|
69
|
+
|
70
|
+
let(:processed_source) { parse_source(source, 'test') }
|
71
|
+
|
72
|
+
let(:source_buffer) { processed_source.buffer }
|
73
|
+
|
74
|
+
let(:all_cops_config) do
|
75
|
+
rails = { 'TargetRubyVersion' => ruby_version }
|
76
|
+
rails['TargetRailsVersion'] = rails_version if rails_version
|
77
|
+
rails
|
78
|
+
end
|
79
|
+
|
80
|
+
let(:cur_cop_config) do
|
81
|
+
RuboCop::ConfigLoader
|
82
|
+
.default_configuration.for_cop(cop_class)
|
83
|
+
.merge({
|
84
|
+
'Enabled' => true, # in case it is 'pending'
|
85
|
+
'AutoCorrect' => true # in case defaults set it to false
|
86
|
+
})
|
87
|
+
.merge(cop_config)
|
88
|
+
end
|
89
|
+
|
90
|
+
let(:config) do
|
91
|
+
hash = { 'AllCops' => all_cops_config,
|
92
|
+
cop_class.cop_name => cur_cop_config }.merge!(other_cops)
|
60
93
|
|
61
94
|
RuboCop::Config.new(hash, "#{Dir.pwd}/.rubocop.yml")
|
62
95
|
end
|
96
|
+
|
97
|
+
let(:cop) do
|
98
|
+
cop_class.new(config, cop_options)
|
99
|
+
.tap { |cop| cop.processed_source = processed_source }
|
100
|
+
end
|
63
101
|
end
|
64
102
|
|
65
103
|
RSpec.shared_context 'mock console output' do
|
data/lib/rubocop/runner.rb
CHANGED
@@ -80,9 +80,7 @@ module RuboCop
|
|
80
80
|
# OPTIMIZE: Calling `ResultCache.cleanup` takes time. This optimization
|
81
81
|
# mainly targets editors that integrates RuboCop. When RuboCop is run
|
82
82
|
# by an editor, it should be inspecting only one file.
|
83
|
-
if files.size > 1 && cached_run?
|
84
|
-
ResultCache.cleanup(@config_store, @options[:debug])
|
85
|
-
end
|
83
|
+
ResultCache.cleanup(@config_store, @options[:debug]) if files.size > 1 && cached_run?
|
86
84
|
formatter_set.finished(inspected_files.freeze)
|
87
85
|
formatter_set.close_output_files
|
88
86
|
end
|
@@ -206,9 +204,7 @@ module RuboCop
|
|
206
204
|
end
|
207
205
|
|
208
206
|
def file_finished(file, offenses)
|
209
|
-
if @options[:display_only_fail_level_offenses]
|
210
|
-
offenses = offenses.select { |o| considered_failure?(o) }
|
211
|
-
end
|
207
|
+
offenses = offenses.select { |o| considered_failure?(o) } if @options[:display_only_fail_level_offenses]
|
212
208
|
formatter_set.file_finished(file, offenses)
|
213
209
|
end
|
214
210
|
|
@@ -288,9 +284,7 @@ module RuboCop
|
|
288
284
|
def check_for_infinite_loop(processed_source, offenses)
|
289
285
|
checksum = processed_source.checksum
|
290
286
|
|
291
|
-
if @processed_sources.include?(checksum)
|
292
|
-
raise InfiniteCorrectionLoop.new(processed_source.path, offenses)
|
293
|
-
end
|
287
|
+
raise InfiniteCorrectionLoop.new(processed_source.path, offenses) if @processed_sources.include?(checksum)
|
294
288
|
|
295
289
|
@processed_sources << checksum
|
296
290
|
end
|
@@ -367,7 +361,11 @@ module RuboCop
|
|
367
361
|
if @options[:stdin]
|
368
362
|
ProcessedSource.new(@options[:stdin], ruby_version, file)
|
369
363
|
else
|
370
|
-
|
364
|
+
begin
|
365
|
+
ProcessedSource.from_file(file, ruby_version)
|
366
|
+
rescue Errno::ENOENT
|
367
|
+
raise RuboCop::Error, "No such file or directory: #{file}"
|
368
|
+
end
|
371
369
|
end
|
372
370
|
end
|
373
371
|
|