rubocop 0.84.0 → 0.85.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 +1 -1
- data/config/default.yml +33 -15
- data/lib/rubocop.rb +6 -0
- data/lib/rubocop/cli.rb +2 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
- data/lib/rubocop/comment_config.rb +1 -1
- data/lib/rubocop/config.rb +3 -1
- data/lib/rubocop/config_loader.rb +1 -1
- data/lib/rubocop/config_loader_resolver.rb +18 -2
- data/lib/rubocop/config_store.rb +12 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
- data/lib/rubocop/cop/commissioner.rb +0 -21
- data/lib/rubocop/cop/cop.rb +14 -6
- data/lib/rubocop/cop/corrector.rb +3 -1
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +3 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +19 -16
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +2 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +6 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +19 -102
- data/lib/rubocop/cop/layout/line_length.rb +17 -17
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +3 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +3 -1
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +3 -1
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +8 -4
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -1
- data/lib/rubocop/cop/lint/loop.rb +1 -1
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +62 -0
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +3 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -2
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/migration/department_name.rb +9 -5
- data/lib/rubocop/cop/mixin/array_min_size.rb +3 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -1
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +3 -1
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
- data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -1
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
- data/lib/rubocop/cop/naming/file_name.rb +26 -11
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/registry.rb +3 -1
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
- data/lib/rubocop/cop/style/copyright.rb +2 -2
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/exponential_notation.rb +3 -3
- data/lib/rubocop/cop/style/format_string_token.rb +2 -3
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +5 -3
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/negated_if.rb +3 -3
- data/lib/rubocop/cop/style/negated_unless.rb +3 -3
- data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +3 -3
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +3 -3
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +13 -13
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +3 -3
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +3 -1
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/team.rb +61 -25
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/variable_force/branch.rb +3 -1
- data/lib/rubocop/formatter/junit_formatter.rb +14 -4
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/options.rb +17 -3
- data/lib/rubocop/result_cache.rb +4 -4
- data/lib/rubocop/rspec/cop_helper.rb +2 -23
- data/lib/rubocop/rspec/expect_offense.rb +42 -6
- data/lib/rubocop/rspec/shared_contexts.rb +2 -2
- data/lib/rubocop/runner.rb +14 -10
- data/lib/rubocop/target_finder.rb +3 -1
- data/lib/rubocop/target_ruby.rb +4 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +21 -3
@@ -71,9 +71,27 @@ module RuboCop
|
|
71
71
|
# RUBY
|
72
72
|
#
|
73
73
|
# expect_no_corrections
|
74
|
+
#
|
75
|
+
# If your code has variables of different lengths, you can use `%{foo}`
|
76
|
+
# and `^{foo}` to format your template:
|
77
|
+
#
|
78
|
+
# %w[raise fail].each do |keyword|
|
79
|
+
# expect_offense(<<~RUBY, keyword: keyword)
|
80
|
+
# %{keyword}(RuntimeError, msg)
|
81
|
+
# ^{keyword}^^^^^^^^^^^^^^^^^^^ Redundant `RuntimeError` argument can be removed.
|
82
|
+
# RUBY
|
74
83
|
module ExpectOffense
|
84
|
+
def format_offense(source, **replacements)
|
85
|
+
replacements.each do |keyword, value|
|
86
|
+
source = source.gsub("%{#{keyword}}", value)
|
87
|
+
.gsub("^{#{keyword}}", '^' * value.size)
|
88
|
+
end
|
89
|
+
source
|
90
|
+
end
|
91
|
+
|
75
92
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
76
|
-
def expect_offense(source, file = nil)
|
93
|
+
def expect_offense(source, file = nil, **replacements)
|
94
|
+
source = format_offense(source, **replacements)
|
77
95
|
RuboCop::Formatter::DisabledConfigFormatter
|
78
96
|
.config_to_allow_offenses = {}
|
79
97
|
RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
|
@@ -96,17 +114,35 @@ module RuboCop
|
|
96
114
|
|
97
115
|
expect(actual_annotations.to_s).to eq(expected_annotations.to_s)
|
98
116
|
end
|
99
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
100
117
|
|
101
|
-
def expect_correction(correction)
|
118
|
+
def expect_correction(correction, loop: false)
|
102
119
|
raise '`expect_correction` must follow `expect_offense`' unless @processed_source
|
103
120
|
|
104
|
-
|
105
|
-
|
106
|
-
|
121
|
+
iteration = 0
|
122
|
+
new_source = loop do
|
123
|
+
iteration += 1
|
124
|
+
|
125
|
+
corrector =
|
126
|
+
RuboCop::Cop::Corrector.new(@processed_source.buffer, cop.corrections)
|
127
|
+
corrected_source = corrector.rewrite
|
128
|
+
|
129
|
+
break corrected_source unless loop
|
130
|
+
break corrected_source if cop.corrections.empty?
|
131
|
+
|
132
|
+
if iteration > RuboCop::Runner::MAX_ITERATIONS
|
133
|
+
raise RuboCop::Runner::InfiniteCorrectionLoop.new(@processed_source.path, [])
|
134
|
+
end
|
135
|
+
|
136
|
+
# Prepare for next loop
|
137
|
+
cop.instance_variable_set(:@corrections, [])
|
138
|
+
@processed_source = parse_source(corrected_source,
|
139
|
+
@processed_source.path)
|
140
|
+
_investigate(cop, @processed_source)
|
141
|
+
end
|
107
142
|
|
108
143
|
expect(new_source).to eq(correction)
|
109
144
|
end
|
145
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
110
146
|
|
111
147
|
def expect_no_corrections
|
112
148
|
raise '`expect_no_corrections` must follow `expect_offense`' unless @processed_source
|
@@ -40,7 +40,7 @@ end
|
|
40
40
|
|
41
41
|
# This context assumes nothing and defines `cop`, among others.
|
42
42
|
RSpec.shared_context 'config', :config do # rubocop:disable Metrics/BlockLength
|
43
|
-
### Meant to be
|
43
|
+
### Meant to be overridden at will
|
44
44
|
|
45
45
|
let(:source) { 'code = {some: :ruby}' }
|
46
46
|
|
@@ -65,7 +65,7 @@ RSpec.shared_context 'config', :config do # rubocop:disable Metrics/BlockLength
|
|
65
65
|
range.exclude_end? ? range.end : range.end + 1)
|
66
66
|
end
|
67
67
|
|
68
|
-
###
|
68
|
+
### Useful intermediary steps (less likely to be overridden)
|
69
69
|
|
70
70
|
let(:processed_source) { parse_source(source, 'test') }
|
71
71
|
|
data/lib/rubocop/runner.rb
CHANGED
@@ -129,7 +129,7 @@ module RuboCop
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def file_offense_cache(file)
|
132
|
-
config = @config_store.
|
132
|
+
config = @config_store.for_file(file)
|
133
133
|
cache = cached_result(file, standby_team(config)) if cached_run?
|
134
134
|
|
135
135
|
if cache&.valid?
|
@@ -168,7 +168,7 @@ module RuboCop
|
|
168
168
|
end
|
169
169
|
|
170
170
|
def redundant_cop_disable_directive(file)
|
171
|
-
config = @config_store.
|
171
|
+
config = @config_store.for_file(file)
|
172
172
|
if config.for_cop(Cop::Lint::RedundantCopDisableDirective)
|
173
173
|
.fetch('Enabled')
|
174
174
|
cop = Cop::Lint::RedundantCopDisableDirective.new(config, @options)
|
@@ -183,7 +183,7 @@ module RuboCop
|
|
183
183
|
def autocorrect_redundant_disables(file, source, cop, offenses)
|
184
184
|
cop.processed_source = source
|
185
185
|
|
186
|
-
team = Cop::Team.
|
186
|
+
team = Cop::Team.mobilize(RuboCop::Cop::Registry.new, nil, @options)
|
187
187
|
team.autocorrect(source.buffer, [cop])
|
188
188
|
|
189
189
|
return [] unless team.updated_source_file?
|
@@ -204,7 +204,9 @@ module RuboCop
|
|
204
204
|
end
|
205
205
|
|
206
206
|
def file_finished(file, offenses)
|
207
|
-
|
207
|
+
if @options[:display_only_fail_level_offenses]
|
208
|
+
offenses = offenses.select { |o| considered_failure?(o) }
|
209
|
+
end
|
208
210
|
formatter_set.file_finished(file, offenses)
|
209
211
|
end
|
210
212
|
|
@@ -212,7 +214,7 @@ module RuboCop
|
|
212
214
|
@cached_run ||=
|
213
215
|
(@options[:cache] == 'true' ||
|
214
216
|
@options[:cache] != 'false' &&
|
215
|
-
@config_store.
|
217
|
+
@config_store.for_dir(Dir.pwd).for_all_cops['UseCache']) &&
|
216
218
|
# When running --auto-gen-config, there's some processing done in the
|
217
219
|
# cops related to calculating the Max parameters for Metrics cops. We
|
218
220
|
# need to do that processing and cannot use caching.
|
@@ -284,14 +286,16 @@ module RuboCop
|
|
284
286
|
def check_for_infinite_loop(processed_source, offenses)
|
285
287
|
checksum = processed_source.checksum
|
286
288
|
|
287
|
-
|
289
|
+
if @processed_sources.include?(checksum)
|
290
|
+
raise InfiniteCorrectionLoop.new(processed_source.path, offenses)
|
291
|
+
end
|
288
292
|
|
289
293
|
@processed_sources << checksum
|
290
294
|
end
|
291
295
|
|
292
296
|
def inspect_file(processed_source)
|
293
|
-
config = @config_store.
|
294
|
-
team = Cop::Team.
|
297
|
+
config = @config_store.for_file(processed_source.path)
|
298
|
+
team = Cop::Team.mobilize(mobilized_cop_classes(config), config, @options)
|
295
299
|
offenses = team.inspect_file(processed_source)
|
296
300
|
@errors.concat(team.errors)
|
297
301
|
@warnings.concat(team.warnings)
|
@@ -356,7 +360,7 @@ module RuboCop
|
|
356
360
|
end
|
357
361
|
|
358
362
|
def get_processed_source(file)
|
359
|
-
ruby_version = @config_store.
|
363
|
+
ruby_version = @config_store.for_file(file).target_ruby_version
|
360
364
|
|
361
365
|
if @options[:stdin]
|
362
366
|
ProcessedSource.new(@options[:stdin], ruby_version, file)
|
@@ -376,7 +380,7 @@ module RuboCop
|
|
376
380
|
def standby_team(config)
|
377
381
|
@team_by_config ||= {}
|
378
382
|
@team_by_config[config.object_id] ||=
|
379
|
-
Cop::Team.
|
383
|
+
Cop::Team.mobilize(mobilized_cop_classes(config), config, @options)
|
380
384
|
end
|
381
385
|
end
|
382
386
|
end
|
@@ -170,7 +170,9 @@ module RuboCop
|
|
170
170
|
def process_explicit_path(path, mode)
|
171
171
|
files = path.include?('*') ? Dir[path] : [path]
|
172
172
|
|
173
|
-
|
173
|
+
if mode == :only_recognized_file_types || force_exclusion?
|
174
|
+
files.select! { |file| included_file?(file) }
|
175
|
+
end
|
174
176
|
|
175
177
|
return files unless force_exclusion?
|
176
178
|
|
data/lib/rubocop/target_ruby.rb
CHANGED
@@ -7,7 +7,7 @@ module RuboCop
|
|
7
7
|
DEFAULT_VERSION = KNOWN_RUBIES.first
|
8
8
|
|
9
9
|
OBSOLETE_RUBIES = {
|
10
|
-
1.9 => '0.50', 2.0 => '0.50', 2.1 => '0.58', 2.2 => '0.69', 2.3 => '0.
|
10
|
+
1.9 => '0.50', 2.0 => '0.50', 2.1 => '0.58', 2.2 => '0.69', 2.3 => '0.81'
|
11
11
|
}.freeze
|
12
12
|
private_constant :KNOWN_RUBIES, :OBSOLETE_RUBIES
|
13
13
|
|
@@ -52,7 +52,10 @@ module RuboCop
|
|
52
52
|
file = ruby_version_file
|
53
53
|
return unless file && File.file?(file)
|
54
54
|
|
55
|
+
# rubocop:disable Lint/MixedRegexpCaptureTypes
|
56
|
+
# `(ruby-)` is not a capture type.
|
55
57
|
File.read(file).match(/\A(ruby-)?(?<version>\d+\.\d+)/) do |md|
|
58
|
+
# rubocop:enable Lint/MixedRegexpCaptureTypes
|
56
59
|
md[:version].to_f
|
57
60
|
end
|
58
61
|
end
|
data/lib/rubocop/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.85.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-
|
13
|
+
date: 2020-06-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: parallel
|
@@ -60,6 +60,20 @@ dependencies:
|
|
60
60
|
- - "<"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '4.0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: regexp_parser
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.7'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.7'
|
63
77
|
- !ruby/object:Gem::Dependency
|
64
78
|
name: rexml
|
65
79
|
requirement: !ruby/object:Gem::Requirement
|
@@ -345,6 +359,7 @@ files:
|
|
345
359
|
- lib/rubocop/cop/lint/literal_in_interpolation.rb
|
346
360
|
- lib/rubocop/cop/lint/loop.rb
|
347
361
|
- lib/rubocop/cop/lint/missing_cop_enable_directive.rb
|
362
|
+
- lib/rubocop/cop/lint/mixed_regexp_capture_types.rb
|
348
363
|
- lib/rubocop/cop/lint/multiple_comparison.rb
|
349
364
|
- lib/rubocop/cop/lint/nested_method_definition.rb
|
350
365
|
- lib/rubocop/cop/lint/nested_percent_literal.rb
|
@@ -457,6 +472,7 @@ files:
|
|
457
472
|
- lib/rubocop/cop/mixin/preferred_delimiters.rb
|
458
473
|
- lib/rubocop/cop/mixin/range_help.rb
|
459
474
|
- lib/rubocop/cop/mixin/rational_literal.rb
|
475
|
+
- lib/rubocop/cop/mixin/regexp_literal_help.rb
|
460
476
|
- lib/rubocop/cop/mixin/rescue_node.rb
|
461
477
|
- lib/rubocop/cop/mixin/safe_assignment.rb
|
462
478
|
- lib/rubocop/cop/mixin/space_after_punctuation.rb
|
@@ -624,6 +640,8 @@ files:
|
|
624
640
|
- lib/rubocop/cop/style/redundant_interpolation.rb
|
625
641
|
- lib/rubocop/cop/style/redundant_parentheses.rb
|
626
642
|
- lib/rubocop/cop/style/redundant_percent_q.rb
|
643
|
+
- lib/rubocop/cop/style/redundant_regexp_character_class.rb
|
644
|
+
- lib/rubocop/cop/style/redundant_regexp_escape.rb
|
627
645
|
- lib/rubocop/cop/style/redundant_return.rb
|
628
646
|
- lib/rubocop/cop/style/redundant_self.rb
|
629
647
|
- lib/rubocop/cop/style/redundant_sort.rb
|
@@ -732,7 +750,7 @@ homepage: https://github.com/rubocop-hq/rubocop
|
|
732
750
|
licenses:
|
733
751
|
- MIT
|
734
752
|
metadata:
|
735
|
-
homepage_uri: https://
|
753
|
+
homepage_uri: https://rubocop.org/
|
736
754
|
changelog_uri: https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md
|
737
755
|
source_code_uri: https://github.com/rubocop-hq/rubocop/
|
738
756
|
documentation_uri: https://docs.rubocop.org/
|