rubocop 0.86.0 → 0.87.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 +46 -4
- data/lib/rubocop.rb +8 -1
- data/lib/rubocop/cli.rb +0 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +40 -5
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/config_loader.rb +21 -62
- data/lib/rubocop/config_obsoletion.rb +0 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +13 -23
- data/lib/rubocop/cop/base.rb +399 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +48 -50
- data/lib/rubocop/cop/cop.rb +85 -236
- data/lib/rubocop/cop/corrector.rb +38 -115
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
- data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
- data/lib/rubocop/cop/layout/class_structure.rb +2 -37
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -8
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +4 -0
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +0 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +19 -25
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +4 -4
- data/lib/rubocop/cop/lint/interpolation_check.rb +13 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +8 -3
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +27 -23
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +8 -0
- data/lib/rubocop/cop/lint/syntax.rb +11 -26
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +22 -0
- data/lib/rubocop/cop/metrics/class_length.rb +25 -2
- data/lib/rubocop/cop/metrics/method_length.rb +23 -0
- data/lib/rubocop/cop/metrics/module_length.rb +25 -2
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/code_length.rb +4 -0
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -2
- data/lib/rubocop/cop/mixin/too_many_lines.rb +3 -13
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +4 -2
- data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +27 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +140 -0
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +145 -0
- data/lib/rubocop/cop/style/class_vars.rb +21 -0
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +5 -5
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -0
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -5
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +4 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +14 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +26 -7
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +7 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +2 -2
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +1 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +2 -2
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/zero_length_predicate.rb +2 -2
- data/lib/rubocop/cop/team.rb +97 -81
- data/lib/rubocop/cop/utils/format_string.rb +1 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -3
- data/lib/rubocop/options.rb +15 -8
- data/lib/rubocop/rake_task.rb +6 -9
- data/lib/rubocop/rspec/cop_helper.rb +4 -4
- data/lib/rubocop/rspec/expect_offense.rb +22 -17
- data/lib/rubocop/rspec/shared_contexts.rb +7 -7
- data/lib/rubocop/runner.rb +31 -29
- data/lib/rubocop/target_ruby.rb +1 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +16 -7
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
@@ -34,10 +34,11 @@ module RuboCop
|
|
34
34
|
\[ # Literal [
|
35
35
|
(?!\#\{) # Not (the start of) an interpolation
|
36
36
|
(?: # Either...
|
37
|
-
|
37
|
+
\\[^b] | # Any escaped character except b (which would change behaviour)
|
38
38
|
[^.*+?{}()|$] | # or one that doesn't require escaping outside the character class
|
39
39
|
\\[upP]\{[^}]+\} # or a unicode code-point or property
|
40
40
|
)
|
41
|
+
(?<!\\) # No \-prefix (i.e. not escaped)
|
41
42
|
\] # Literal ]
|
42
43
|
)
|
43
44
|
/x.freeze
|
@@ -111,7 +111,7 @@ module RuboCop
|
|
111
111
|
RAISE_MSG = 'Use `raise` instead of `fail` to ' \
|
112
112
|
'rethrow exceptions.'
|
113
113
|
|
114
|
-
def_node_matcher :kernel_call?, '(send (const nil? :Kernel) %1 ...)'
|
114
|
+
def_node_matcher :kernel_call?, '(send (const {nil? cbase} :Kernel) %1 ...)'
|
115
115
|
def_node_search :custom_fail_methods,
|
116
116
|
'{(def :fail ...) (defs _ :fail ...)}'
|
117
117
|
|
@@ -41,8 +41,8 @@ module RuboCop
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def_node_matcher :struct_constructor?, <<~PATTERN
|
44
|
-
{(send (const nil? :Struct) :new ...)
|
45
|
-
(block (send (const nil? :Struct) :new ...) ...)}
|
44
|
+
{(send (const {nil? cbase} :Struct) :new ...)
|
45
|
+
(block (send (const {nil? cbase} :Struct) :new ...) ...)}
|
46
46
|
PATTERN
|
47
47
|
|
48
48
|
private
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
'instead of a block.'
|
20
20
|
SUPER_TYPES = %i[super zsuper].freeze
|
21
21
|
|
22
|
-
def_node_matcher :proc_node?, '(send (const nil? :Proc) :new)'
|
22
|
+
def_node_matcher :proc_node?, '(send (const {nil? cbase} :Proc) :new)'
|
23
23
|
def_node_matcher :symbol_proc?, <<~PATTERN
|
24
24
|
(block
|
25
25
|
${(send ...) (super ...) zsuper}
|
@@ -28,6 +28,8 @@ module RuboCop
|
|
28
28
|
# attr_reader :baz
|
29
29
|
# end
|
30
30
|
class TrivialAccessors < Cop
|
31
|
+
include AllowedMethods
|
32
|
+
|
31
33
|
MSG = 'Use `attr_%<kind>s` to define trivial %<kind>s methods.'
|
32
34
|
|
33
35
|
def on_def(node)
|
@@ -95,9 +97,8 @@ module RuboCop
|
|
95
97
|
cop_config['IgnoreClassMethods']
|
96
98
|
end
|
97
99
|
|
98
|
-
def
|
99
|
-
allowed_methods
|
100
|
-
Array(allowed_methods).map(&:to_sym) + [:initialize]
|
100
|
+
def allowed_method_names
|
101
|
+
allowed_methods.map(&:to_sym) + [:initialize]
|
101
102
|
end
|
102
103
|
|
103
104
|
def dsl_writer?(method_name)
|
@@ -106,7 +107,7 @@ module RuboCop
|
|
106
107
|
|
107
108
|
def trivial_reader?(node)
|
108
109
|
looks_like_trivial_reader?(node) &&
|
109
|
-
!
|
110
|
+
!allowed_method_name?(node) && !allowed_reader?(node)
|
110
111
|
end
|
111
112
|
|
112
113
|
def looks_like_trivial_reader?(node)
|
@@ -115,7 +116,7 @@ module RuboCop
|
|
115
116
|
|
116
117
|
def trivial_writer?(node)
|
117
118
|
looks_like_trivial_writer?(node) &&
|
118
|
-
!
|
119
|
+
!allowed_method_name?(node) && !allowed_writer?(node.method_name)
|
119
120
|
end
|
120
121
|
|
121
122
|
def_node_matcher :looks_like_trivial_writer?, <<~PATTERN
|
@@ -123,8 +124,8 @@ module RuboCop
|
|
123
124
|
(defs _ _ (args (arg ...)) (ivasgn _ (lvar _)))}
|
124
125
|
PATTERN
|
125
126
|
|
126
|
-
def
|
127
|
-
|
127
|
+
def allowed_method_name?(node)
|
128
|
+
allowed_method_names.include?(node.method_name) ||
|
128
129
|
exact_name_match? && !names_match?(node)
|
129
130
|
end
|
130
131
|
|
@@ -108,8 +108,8 @@ module RuboCop
|
|
108
108
|
# implement `#size`, but not `#empty`. We ignore those to
|
109
109
|
# reduce false positives.
|
110
110
|
def_node_matcher :non_polymorphic_collection?, <<~PATTERN
|
111
|
-
{(send (send (send (const nil? :File) :stat _) ...) ...)
|
112
|
-
(send (send (send (const nil? {:Tempfile :StringIO}) {:new :open} ...) ...) ...)}
|
111
|
+
{(send (send (send (const {nil? cbase} :File) :stat _) ...) ...)
|
112
|
+
(send (send (send (const {nil? cbase} {:Tempfile :StringIO}) {:new :open} ...) ...) ...)}
|
113
113
|
PATTERN
|
114
114
|
end
|
115
115
|
end
|
data/lib/rubocop/cop/team.rb
CHANGED
@@ -10,23 +10,16 @@ module RuboCop
|
|
10
10
|
# first the ones needed for autocorrection (if any), then the rest
|
11
11
|
# (unless autocorrections happened).
|
12
12
|
class Team
|
13
|
-
DEFAULT_OPTIONS = {
|
14
|
-
auto_correct: false,
|
15
|
-
debug: false
|
16
|
-
}.freeze
|
17
|
-
|
18
|
-
Investigation = Struct.new(:offenses, :errors)
|
19
|
-
|
20
13
|
attr_reader :errors, :warnings, :updated_source_file, :cops
|
21
14
|
|
22
15
|
alias updated_source_file? updated_source_file
|
23
16
|
|
24
|
-
def initialize(cops, config = nil, options =
|
17
|
+
def initialize(cops, config = nil, options = {})
|
25
18
|
@cops = cops
|
26
19
|
@config = config
|
27
|
-
@options = options
|
28
|
-
|
29
|
-
@
|
20
|
+
@options = options
|
21
|
+
reset
|
22
|
+
@ready = true
|
30
23
|
|
31
24
|
validate_config
|
32
25
|
end
|
@@ -40,15 +33,14 @@ module RuboCop
|
|
40
33
|
end
|
41
34
|
|
42
35
|
# @return [Team] with cops assembled from the given `cop_classes`
|
43
|
-
def self.mobilize(cop_classes, config, options =
|
44
|
-
options ||= DEFAULT_OPTIONS
|
36
|
+
def self.mobilize(cop_classes, config, options = {})
|
45
37
|
cops = mobilize_cops(cop_classes, config, options)
|
46
38
|
new(cops, config, options)
|
47
39
|
end
|
48
40
|
|
49
41
|
# @return [Array<Cop::Cop>]
|
50
|
-
def self.mobilize_cops(cop_classes, config, options =
|
51
|
-
|
42
|
+
def self.mobilize_cops(cop_classes, config, options = {})
|
43
|
+
cop_classes = Registry.new(cop_classes.to_a) unless cop_classes.is_a?(Registry)
|
52
44
|
only = options.fetch(:only, [])
|
53
45
|
safe = options.fetch(:safe, false)
|
54
46
|
cop_classes.enabled(config, only, safe).map do |cop_class|
|
@@ -64,93 +56,102 @@ module RuboCop
|
|
64
56
|
@options[:debug]
|
65
57
|
end
|
66
58
|
|
59
|
+
# @deprecated. Use investigate
|
60
|
+
# @return Array<offenses>
|
67
61
|
def inspect_file(processed_source)
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
62
|
+
investigate(processed_source).offenses
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [Commissioner::InvestigationReport]
|
66
|
+
def investigate(processed_source)
|
67
|
+
be_ready
|
68
|
+
|
69
|
+
# The autocorrection process may have to be repeated multiple times
|
70
|
+
# until there are no corrections left to perform
|
71
|
+
# To speed things up, run auto-correcting cops by themselves, and only
|
72
|
+
# run the other cops when no corrections are left
|
73
|
+
on_duty = roundup_relevant_cops(processed_source.file_path)
|
74
|
+
|
75
|
+
autocorrect_cops, other_cops = on_duty.partition(&:autocorrect?)
|
76
|
+
|
77
|
+
report = investigate_partial(autocorrect_cops, processed_source)
|
78
|
+
|
79
|
+
unless autocorrect(processed_source, report)
|
80
|
+
# If we corrected some errors, another round of inspection will be
|
81
|
+
# done, and any other offenses will be caught then, so only need
|
82
|
+
# to check other_cops if no correction was done
|
83
|
+
report = report.merge(investigate_partial(other_cops, processed_source))
|
73
84
|
end
|
74
85
|
|
75
|
-
|
86
|
+
process_errors(processed_source.path, report.errors)
|
87
|
+
|
88
|
+
report
|
89
|
+
ensure
|
90
|
+
@ready = false
|
76
91
|
end
|
77
92
|
|
93
|
+
# @deprecated
|
78
94
|
def forces
|
79
|
-
@forces ||= forces_for(cops)
|
95
|
+
@forces ||= self.class.forces_for(cops)
|
80
96
|
end
|
81
97
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
98
|
+
# @return [Array<Force>] needed for the given cops
|
99
|
+
def self.forces_for(cops)
|
100
|
+
needed = Hash.new { |h, k| h[k] = [] }
|
101
|
+
cops.each do |cop|
|
102
|
+
Array(cop.class.joining_forces).each { |force| needed[force] << cop }
|
103
|
+
end
|
86
104
|
|
87
|
-
|
105
|
+
needed.map do |force_class, joining_cops|
|
106
|
+
force_class.new(joining_cops)
|
88
107
|
end
|
89
108
|
end
|
90
109
|
|
91
|
-
def
|
110
|
+
def external_dependency_checksum
|
111
|
+
keys = cops.map(&:external_dependency_checksum).compact
|
112
|
+
Digest::SHA1.hexdigest(keys.join)
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def autocorrect(processed_source, report)
|
92
118
|
@updated_source_file = false
|
93
119
|
return unless autocorrect?
|
94
120
|
|
95
|
-
new_source =
|
121
|
+
new_source = autocorrect_report(report)
|
96
122
|
|
97
|
-
return
|
123
|
+
return unless new_source
|
98
124
|
|
99
125
|
if @options[:stdin]
|
100
126
|
# holds source read in from stdin, when --stdin option is used
|
101
127
|
@options[:stdin] = new_source
|
102
128
|
else
|
103
|
-
filename = buffer.name
|
129
|
+
filename = processed_source.buffer.name
|
104
130
|
File.open(filename, 'w') { |f| f.write(new_source) }
|
105
131
|
end
|
106
132
|
@updated_source_file = true
|
107
|
-
rescue RuboCop::ErrorWithAnalyzedFileLocation => e
|
108
|
-
process_errors(buffer.name, [e])
|
109
|
-
raise e.cause
|
110
|
-
end
|
111
|
-
|
112
|
-
def external_dependency_checksum
|
113
|
-
keys = cops.map(&:external_dependency_checksum).compact
|
114
|
-
Digest::SHA1.hexdigest(keys.join)
|
115
133
|
end
|
116
134
|
|
117
|
-
|
118
|
-
|
119
|
-
def offenses(processed_source) # rubocop:disable Metrics/AbcSize
|
120
|
-
# The autocorrection process may have to be repeated multiple times
|
121
|
-
# until there are no corrections left to perform
|
122
|
-
# To speed things up, run auto-correcting cops by themselves, and only
|
123
|
-
# run the other cops when no corrections are left
|
124
|
-
on_duty = roundup_relevant_cops(processed_source.file_path)
|
125
|
-
|
126
|
-
autocorrect_cops, other_cops = on_duty.partition(&:autocorrect?)
|
127
|
-
|
128
|
-
autocorrect = investigate(autocorrect_cops, processed_source)
|
129
|
-
|
130
|
-
if autocorrect(processed_source.buffer, autocorrect_cops)
|
131
|
-
# We corrected some errors. Another round of inspection will be
|
132
|
-
# done, and any other offenses will be caught then, so we don't
|
133
|
-
# need to continue.
|
134
|
-
return autocorrect.offenses
|
135
|
-
end
|
136
|
-
|
137
|
-
other = investigate(other_cops, processed_source)
|
135
|
+
def be_ready
|
136
|
+
return if @ready
|
138
137
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
autocorrect.offenses.concat(other.offenses)
|
138
|
+
reset
|
139
|
+
@cops.map!(&:ready)
|
140
|
+
@ready = true
|
143
141
|
end
|
144
142
|
|
145
|
-
def
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
offenses = commissioner.investigate(processed_source)
|
143
|
+
def reset
|
144
|
+
@errors = []
|
145
|
+
@warnings = []
|
146
|
+
end
|
150
147
|
|
151
|
-
|
148
|
+
# @return [Commissioner::InvestigationReport]
|
149
|
+
def investigate_partial(cops, processed_source)
|
150
|
+
commissioner = Commissioner.new(cops, self.class.forces_for(cops), @options)
|
151
|
+
commissioner.investigate(processed_source)
|
152
152
|
end
|
153
153
|
|
154
|
+
# @return [Array<cop>]
|
154
155
|
def roundup_relevant_cops(filename)
|
155
156
|
cops.reject do |cop|
|
156
157
|
cop.excluded_file?(filename) ||
|
@@ -171,30 +172,45 @@ module RuboCop
|
|
171
172
|
cop.class.support_target_rails_version?(cop.target_rails_version)
|
172
173
|
end
|
173
174
|
|
174
|
-
def
|
175
|
-
corrector =
|
175
|
+
def autocorrect_report(report)
|
176
|
+
corrector = collate_corrections(report)
|
176
177
|
|
177
|
-
|
178
|
+
corrector.rewrite unless corrector.empty?
|
179
|
+
end
|
178
180
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
181
|
+
def collate_corrections(report)
|
182
|
+
corrector = Corrector.new(report.processed_source)
|
183
|
+
|
184
|
+
each_corrector(report) do |to_merge|
|
185
|
+
suppress_clobbering do
|
186
|
+
corrector.merge!(to_merge)
|
187
|
+
end
|
183
188
|
end
|
189
|
+
|
190
|
+
corrector
|
184
191
|
end
|
185
192
|
|
186
|
-
def
|
193
|
+
def each_corrector(report)
|
187
194
|
skips = Set.new
|
195
|
+
report.cop_reports.each do |cop_report|
|
196
|
+
cop = cop_report.cop
|
197
|
+
corrector = cop_report.corrector
|
188
198
|
|
189
|
-
|
190
|
-
next if cop.corrections.empty?
|
199
|
+
next if corrector.nil? || corrector.empty?
|
191
200
|
next if skips.include?(cop.class)
|
192
201
|
|
193
|
-
corrector
|
202
|
+
yield corrector
|
203
|
+
|
194
204
|
skips.merge(cop.class.autocorrect_incompatible_with)
|
195
205
|
end
|
196
206
|
end
|
197
207
|
|
208
|
+
def suppress_clobbering
|
209
|
+
yield
|
210
|
+
rescue ::Parser::ClobberingError
|
211
|
+
# ignore Clobbering errors
|
212
|
+
end
|
213
|
+
|
198
214
|
def validate_config
|
199
215
|
cops.each do |cop|
|
200
216
|
cop.validate_config if cop.respond_to?(:validate_config)
|
@@ -41,8 +41,7 @@ module RuboCop
|
|
41
41
|
#
|
42
42
|
# @see https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-format
|
43
43
|
class FormatSequence
|
44
|
-
attr_reader :begin_pos, :end_pos
|
45
|
-
attr_reader :flags, :width, :precision, :name, :type
|
44
|
+
attr_reader :begin_pos, :end_pos, :flags, :width, :precision, :name, :type
|
46
45
|
|
47
46
|
def initialize(match)
|
48
47
|
@source = match[0]
|
@@ -115,7 +115,7 @@ module RuboCop
|
|
115
115
|
output_buffer.puts "# Offense count: #{offense_count}" if @show_offense_counts
|
116
116
|
|
117
117
|
cop_class = Cop::Cop.registry.find_by_cop_name(cop_name)
|
118
|
-
output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.
|
118
|
+
output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.support_autocorrect?
|
119
119
|
|
120
120
|
default_cfg = default_config(cop_name)
|
121
121
|
return unless default_cfg
|
data/lib/rubocop/options.rb
CHANGED
@@ -163,7 +163,7 @@ module RuboCop
|
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
|
-
# rubocop:disable Metrics/MethodLength
|
166
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
167
167
|
def add_boolean_flags(opts)
|
168
168
|
option(opts, '-F', '--fail-fast')
|
169
169
|
option(opts, '-C', '--cache FLAG')
|
@@ -171,7 +171,16 @@ module RuboCop
|
|
171
171
|
option(opts, '-D', '--[no-]display-cop-names')
|
172
172
|
option(opts, '-E', '--extra-details')
|
173
173
|
option(opts, '-S', '--display-style-guide')
|
174
|
-
option(opts, '-a', '--auto-correct')
|
174
|
+
option(opts, '-a', '--auto-correct') do
|
175
|
+
@options[:safe_auto_correct] = true
|
176
|
+
end
|
177
|
+
option(opts, '--safe-auto-correct') do
|
178
|
+
warn '--safe-auto-correct is deprecated; use --auto-correct'
|
179
|
+
@options[:safe_auto_correct] = @options[:auto_correct] = true
|
180
|
+
end
|
181
|
+
option(opts, '-A', '--auto-correct-all') do
|
182
|
+
@options[:auto_correct] = true
|
183
|
+
end
|
175
184
|
option(opts, '--disable-pending-cops')
|
176
185
|
option(opts, '--enable-pending-cops')
|
177
186
|
option(opts, '--ignore-disable-comments')
|
@@ -184,7 +193,7 @@ module RuboCop
|
|
184
193
|
option(opts, '-V', '--verbose-version')
|
185
194
|
option(opts, '-P', '--parallel')
|
186
195
|
end
|
187
|
-
# rubocop:enable Metrics/MethodLength
|
196
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
188
197
|
|
189
198
|
def add_aliases(opts)
|
190
199
|
option(opts, '-l', '--lint') do
|
@@ -196,9 +205,6 @@ module RuboCop
|
|
196
205
|
@options[:only] << 'Layout'
|
197
206
|
@options[:auto_correct] = true
|
198
207
|
end
|
199
|
-
option(opts, '--safe-auto-correct') do
|
200
|
-
@options[:auto_correct] = true
|
201
|
-
end
|
202
208
|
end
|
203
209
|
|
204
210
|
def add_list_options(opts)
|
@@ -465,8 +471,9 @@ module RuboCop
|
|
465
471
|
lint: 'Run only lint cops.',
|
466
472
|
safe: 'Run only safe cops.',
|
467
473
|
list_target_files: 'List all files RuboCop will inspect.',
|
468
|
-
auto_correct: 'Auto-correct offenses.',
|
469
|
-
safe_auto_correct: '
|
474
|
+
auto_correct: 'Auto-correct offenses (only when it\'s safe).',
|
475
|
+
safe_auto_correct: '(same, deprecated)',
|
476
|
+
auto_correct_all: 'Auto-correct offenses (safe and unsafe)',
|
470
477
|
fix_layout: 'Run only layout cops, with auto-correct on.',
|
471
478
|
color: 'Force color output on or off.',
|
472
479
|
version: 'Display version.',
|