rubocop 0.74.0 → 0.78.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 +3 -2
- data/config/default.yml +366 -318
- data/lib/rubocop.rb +48 -32
- data/lib/rubocop/ast/builder.rb +1 -0
- data/lib/rubocop/ast/node.rb +5 -1
- data/lib/rubocop/ast/node/block_node.rb +2 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +1 -12
- data/lib/rubocop/ast/node/return_node.rb +24 -0
- data/lib/rubocop/cli.rb +11 -227
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -0
- data/lib/rubocop/cli/command/base.rb +33 -0
- data/lib/rubocop/cli/command/execute_runner.rb +76 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
- data/lib/rubocop/cli/command/show_cops.rb +73 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/comment_config.rb +5 -4
- data/lib/rubocop/config.rb +12 -1
- data/lib/rubocop/config_loader.rb +21 -3
- data/lib/rubocop/config_loader_resolver.rb +4 -3
- data/lib/rubocop/config_obsoletion.rb +85 -11
- data/lib/rubocop/config_validator.rb +28 -19
- data/lib/rubocop/cop/autocorrect_logic.rb +3 -3
- data/lib/rubocop/cop/bundler/gem_comment.rb +4 -4
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +15 -7
- data/lib/rubocop/cop/cop.rb +35 -9
- data/lib/rubocop/cop/corrector.rb +8 -7
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +43 -17
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -2
- data/lib/rubocop/cop/generator.rb +3 -3
- data/lib/rubocop/cop/generator/configuration_injector.rb +9 -4
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
- data/lib/rubocop/cop/layout/{align_arguments.rb → argument_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/{align_array.rb → array_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/{indent_assignment.rb → assignment_indentation.rb} +11 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/comment_indentation.rb +10 -13
- data/lib/rubocop/cop/layout/empty_comment.rb +7 -16
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -7
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +8 -3
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -7
- data/lib/rubocop/cop/layout/{indent_first_argument.rb → first_argument_indentation.rb} +14 -12
- data/lib/rubocop/cop/layout/{indent_first_array_element.rb → first_array_element_indentation.rb} +4 -4
- data/lib/rubocop/cop/layout/{indent_first_hash_element.rb → first_hash_element_indentation.rb} +4 -4
- data/lib/rubocop/cop/layout/{indent_first_parameter.rb → first_parameter_indentation.rb} +3 -3
- data/lib/rubocop/cop/layout/{align_hash.rb → hash_alignment.rb} +8 -4
- data/lib/rubocop/cop/layout/{indent_heredoc.rb → heredoc_indentation.rb} +6 -6
- data/lib/rubocop/cop/layout/{leading_blank_lines.rb → leading_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/{metrics → layout}/line_length.rb +41 -114
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +24 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/{align_parameters.rb → parameter_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +2 -0
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +5 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +12 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +32 -7
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +17 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -7
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +8 -5
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +7 -0
- data/lib/rubocop/cop/layout/space_inside_parens.rb +6 -6
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +2 -0
- data/lib/rubocop/cop/layout/{trailing_blank_lines.rb → trailing_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +18 -2
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +17 -4
- data/lib/rubocop/cop/lint/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
- data/lib/rubocop/cop/lint/{duplicated_key.rb → duplicate_hash_key.rb} +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +9 -8
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +10 -36
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/{multiple_compare.rb → multiple_comparison.rb} +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/{unneeded_cop_disable_directive.rb → redundant_cop_disable_directive.rb} +26 -26
- data/lib/rubocop/cop/lint/{unneeded_cop_enable_directive.rb → redundant_cop_enable_directive.rb} +10 -12
- data/lib/rubocop/cop/lint/{unneeded_require_statement.rb → redundant_require_statement.rb} +1 -1
- data/lib/rubocop/cop/lint/{unneeded_splat_expansion.rb → redundant_splat_expansion.rb} +6 -6
- data/lib/rubocop/cop/lint/{string_conversion_in_interpolation.rb → redundant_string_coercion.rb} +1 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +5 -6
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
- data/lib/rubocop/cop/lint/{handle_exceptions.rb → suppressed_exception.rb} +1 -1
- data/lib/rubocop/cop/lint/unused_block_argument.rb +22 -6
- data/lib/rubocop/cop/lint/unused_method_argument.rb +23 -5
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +57 -23
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/lint/void.rb +7 -26
- data/lib/rubocop/cop/message_annotator.rb +16 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +23 -6
- data/lib/rubocop/cop/migration/department_name.rb +44 -0
- data/lib/rubocop/cop/mixin/alignment.rb +2 -2
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/{hash_alignment.rb → hash_alignment_styles.rb} +1 -1
- data/lib/rubocop/cop/mixin/line_length_help.rb +88 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/nil_methods.rb +4 -4
- data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -4
- data/lib/rubocop/cop/mixin/trailing_comma.rb +14 -9
- data/lib/rubocop/cop/naming/{uncommunicative_block_param_name.rb → block_parameter_name.rb} +3 -3
- data/lib/rubocop/cop/naming/file_name.rb +12 -5
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +5 -5
- data/lib/rubocop/cop/naming/method_name.rb +12 -1
- data/lib/rubocop/cop/naming/{uncommunicative_method_param_name.rb → method_parameter_name.rb} +3 -3
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -6
- data/lib/rubocop/cop/naming/variable_name.rb +1 -0
- data/lib/rubocop/cop/offense.rb +29 -7
- data/lib/rubocop/cop/registry.rb +22 -1
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -0
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +10 -2
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +35 -16
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/comment_annotation.rb +5 -5
- data/lib/rubocop/cop/style/commented_keyword.rb +8 -2
- data/lib/rubocop/cop/style/conditional_assignment.rb +6 -6
- data/lib/rubocop/cop/style/copyright.rb +11 -7
- data/lib/rubocop/cop/style/documentation_method.rb +44 -0
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +10 -4
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +2 -2
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -1
- data/lib/rubocop/cop/style/format_string.rb +10 -7
- data/lib/rubocop/cop/style/format_string_token.rb +19 -68
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +28 -33
- data/lib/rubocop/cop/style/guard_clause.rb +3 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +93 -15
- data/lib/rubocop/cop/style/infinite_loop.rb +6 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +19 -13
- data/lib/rubocop/cop/style/ip_addresses.rb +4 -4
- data/lib/rubocop/cop/style/line_end_concatenation.rb +14 -10
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +25 -25
- data/lib/rubocop/cop/style/method_def_parentheses.rb +17 -9
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +11 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +1 -1
- data/lib/rubocop/cop/style/nested_modifier.rb +22 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -5
- data/lib/rubocop/cop/style/next.rb +5 -5
- data/lib/rubocop/cop/style/non_nil_check.rb +21 -9
- data/lib/rubocop/cop/style/numeric_literals.rb +7 -3
- data/lib/rubocop/cop/style/option_hash.rb +3 -3
- data/lib/rubocop/cop/style/or_assignment.rb +6 -1
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +14 -0
- data/lib/rubocop/cop/style/{unneeded_capital_w.rb → redundant_capital_w.rb} +1 -1
- data/lib/rubocop/cop/style/{unneeded_condition.rb → redundant_condition.rb} +3 -3
- data/lib/rubocop/cop/style/{unneeded_interpolation.rb → redundant_interpolation.rb} +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +16 -7
- data/lib/rubocop/cop/style/{unneeded_percent_q.rb → redundant_percent_q.rb} +1 -1
- data/lib/rubocop/cop/style/redundant_return.rb +39 -29
- data/lib/rubocop/cop/style/redundant_self.rb +18 -1
- data/lib/rubocop/cop/style/{unneeded_sort.rb → redundant_sort.rb} +5 -5
- data/lib/rubocop/cop/style/rescue_modifier.rb +24 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +23 -3
- data/lib/rubocop/cop/style/semicolon.rb +13 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +8 -1
- data/lib/rubocop/cop/style/special_global_vars.rb +5 -7
- data/lib/rubocop/cop/style/ternary_parentheses.rb +19 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +7 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +5 -5
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
- data/lib/rubocop/cop/team.rb +5 -0
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/format_string.rb +120 -0
- data/lib/rubocop/cop/variable_force.rb +7 -5
- data/lib/rubocop/cop/variable_force/variable.rb +15 -2
- data/lib/rubocop/core_ext/string.rb +0 -24
- data/lib/rubocop/formatter/base_formatter.rb +2 -2
- data/lib/rubocop/formatter/clang_style_formatter.rb +9 -6
- data/lib/rubocop/formatter/emacs_style_formatter.rb +22 -9
- data/lib/rubocop/formatter/file_list_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +16 -15
- data/lib/rubocop/formatter/json_formatter.rb +6 -5
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +16 -4
- data/lib/rubocop/formatter/tap_formatter.rb +18 -7
- data/lib/rubocop/magic_comment.rb +4 -0
- data/lib/rubocop/node_pattern.rb +4 -2
- data/lib/rubocop/options.rb +21 -26
- data/lib/rubocop/processed_source.rb +1 -1
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/result_cache.rb +24 -8
- data/lib/rubocop/runner.rb +60 -33
- data/lib/rubocop/target_finder.rb +12 -6
- data/lib/rubocop/version.rb +1 -1
- metadata +48 -33
- data/lib/rubocop/cop/mixin/ignored_method_patterns.rb +0 -19
- data/lib/rubocop/cop/mixin/safe_mode.rb +0 -22
@@ -46,7 +46,7 @@ module RuboCop
|
|
46
46
|
|
47
47
|
add_missing_namespaces(path, hash)
|
48
48
|
|
49
|
-
resolver.resolve_inheritance_from_gems(hash
|
49
|
+
resolver.resolve_inheritance_from_gems(hash)
|
50
50
|
resolver.resolve_inheritance(path, hash, file, debug?)
|
51
51
|
|
52
52
|
hash.delete('inherit_from')
|
@@ -199,6 +199,8 @@ module RuboCop
|
|
199
199
|
raise(TypeError, "Malformed configuration in #{absolute_path}")
|
200
200
|
end
|
201
201
|
|
202
|
+
check_cop_config_value(hash)
|
203
|
+
|
202
204
|
hash
|
203
205
|
end
|
204
206
|
|
@@ -220,6 +222,22 @@ module RuboCop
|
|
220
222
|
end
|
221
223
|
end
|
222
224
|
|
225
|
+
def check_cop_config_value(hash, parent = nil)
|
226
|
+
hash.each do |key, value|
|
227
|
+
check_cop_config_value(value, key) if value.is_a?(Hash)
|
228
|
+
|
229
|
+
next unless %w[Enabled
|
230
|
+
Safe
|
231
|
+
SafeAutoCorrect
|
232
|
+
AutoCorrect].include?(key) && value.is_a?(String)
|
233
|
+
|
234
|
+
abort(
|
235
|
+
"Property #{Rainbow(key).yellow} of cop #{Rainbow(parent).yellow}" \
|
236
|
+
" is supposed to be a boolean and #{Rainbow(value).yellow} is not."
|
237
|
+
)
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
223
241
|
# Read the specified file, or exit with a friendly, concise message on
|
224
242
|
# stderr. Care is taken to use the standard OS exit code for a "file not
|
225
243
|
# found" error.
|
@@ -240,11 +258,11 @@ module RuboCop
|
|
240
258
|
yaml_code,
|
241
259
|
permitted_classes: [Regexp, Symbol],
|
242
260
|
permitted_symbols: [],
|
243
|
-
aliases:
|
261
|
+
aliases: true,
|
244
262
|
filename: filename
|
245
263
|
)
|
246
264
|
else
|
247
|
-
YAML.safe_load(yaml_code, [Regexp, Symbol], [],
|
265
|
+
YAML.safe_load(yaml_code, [Regexp, Symbol], [], true, filename)
|
248
266
|
end
|
249
267
|
end
|
250
268
|
end
|
@@ -35,7 +35,8 @@ module RuboCop
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
def resolve_inheritance_from_gems(hash
|
38
|
+
def resolve_inheritance_from_gems(hash)
|
39
|
+
gems = hash.delete('inherit_gem')
|
39
40
|
(gems || {}).each_pair do |gem_name, config_path|
|
40
41
|
if gem_name == 'rubocop'
|
41
42
|
raise ArgumentError,
|
@@ -73,7 +74,7 @@ module RuboCop
|
|
73
74
|
|
74
75
|
opts = { inherit_mode: config['inherit_mode'] || {},
|
75
76
|
unset_nil: unset_nil }
|
76
|
-
Config.new(merge(default_configuration, config, opts), config_file)
|
77
|
+
Config.new(merge(default_configuration, config, **opts), config_file)
|
77
78
|
end
|
78
79
|
|
79
80
|
# Return a recursive merge of two hashes. That is, a normal hash merge,
|
@@ -92,7 +93,7 @@ module RuboCop
|
|
92
93
|
elsif should_union?(base_hash, key, opts[:inherit_mode])
|
93
94
|
result[key] = base_hash[key] | derived_hash[key]
|
94
95
|
elsif opts[:debug]
|
95
|
-
warn_on_duplicate_setting(base_hash, derived_hash, key, opts)
|
96
|
+
warn_on_duplicate_setting(base_hash, derived_hash, key, **opts)
|
96
97
|
end
|
97
98
|
end
|
98
99
|
result
|
@@ -4,13 +4,39 @@ module RuboCop
|
|
4
4
|
# This class handles obsolete configuration.
|
5
5
|
class ConfigObsoletion
|
6
6
|
RENAMED_COPS = {
|
7
|
-
'
|
8
|
-
'
|
7
|
+
'Layout/AlignArguments' => 'Layout/ArgumentAlignment',
|
8
|
+
'Layout/AlignArray' => 'Layout/ArrayAlignment',
|
9
|
+
'Layout/AlignHash' => 'Layout/HashAlignment',
|
10
|
+
'Layout/AlignParameters' => 'Layout/ParameterAlignment',
|
11
|
+
'Layout/IndentArray' => 'Layout/FirstArrayElementIndentation',
|
12
|
+
'Layout/IndentAssignment' => 'Layout/AssignmentIndentation',
|
13
|
+
'Layout/IndentFirstArgument' => 'Layout/FirstArgumentIndentation',
|
14
|
+
'Layout/IndentFirstArrayElement' => 'Layout/FirstArrayElementIndentation',
|
15
|
+
'Layout/IndentFirstHashElement' => 'Layout/FirstHashElementIndentation',
|
16
|
+
'Layout/IndentFirstParameter' => 'Layout/FirstParameterIndentation',
|
17
|
+
'Layout/IndentHash' => 'Layout/FirstHashElementIndentation',
|
18
|
+
'Layout/IndentHeredoc' => 'Layout/HeredocIndentation',
|
19
|
+
'Layout/LeadingBlankLines' => 'Layout/LeadingEmptyLines',
|
20
|
+
'Layout/TrailingBlankLines' => 'Layout/TrailingEmptyLines',
|
21
|
+
'Lint/DuplicatedKey' => 'Lint/DuplicateHashKey',
|
22
|
+
'Lint/HandleExceptions' => 'Lint/SuppressedException',
|
23
|
+
'Lint/MultipleCompare' => 'Lint/MultipleComparison',
|
24
|
+
'Lint/StringConversionInInterpolation' => 'Lint/RedundantStringCoercion',
|
25
|
+
'Lint/UnneededCopDisableDirective' => 'Lint/RedundantCopDisableDirective',
|
26
|
+
'Lint/UnneededCopEnableDirective' => 'Lint/RedundantCopEnableDirective',
|
27
|
+
'Lint/UnneededRequireStatement' => 'Lint/RedundantRequireStatement',
|
28
|
+
'Lint/UnneededSplatExpansion' => 'Lint/RedundantSplatExpansion',
|
29
|
+
'Naming/UncommunicativeBlockParamName' => 'Naming/BlockParameterName',
|
30
|
+
'Naming/UncommunicativeMethodParamName' => 'Naming/MethodParameterName',
|
9
31
|
'Style/DeprecatedHashMethods' => 'Style/PreferredHashMethods',
|
32
|
+
'Style/MethodCallParentheses' => 'Style/MethodCallWithoutArgsParentheses',
|
10
33
|
'Style/OpMethod' => 'Naming/BinaryOperatorParameterName',
|
11
|
-
'
|
12
|
-
'
|
13
|
-
'
|
34
|
+
'Style/SingleSpaceBeforeFirstArg' => 'Layout/SpaceBeforeFirstArg',
|
35
|
+
'Style/UnneededCapitalW' => 'Style/RedundantCapitalW',
|
36
|
+
'Style/UnneededCondition' => 'Style/RedundantCondition',
|
37
|
+
'Style/UnneededInterpolation' => 'Style/RedundantInterpolation',
|
38
|
+
'Style/UnneededPercentQ' => 'Style/RedundantPercentQ',
|
39
|
+
'Style/UnneededSort' => 'Style/RedundantSort'
|
14
40
|
}.map do |old_name, new_name|
|
15
41
|
[old_name, "The `#{old_name}` cop has been renamed to `#{new_name}`."]
|
16
42
|
end
|
@@ -22,7 +48,7 @@ module RuboCop
|
|
22
48
|
Style/VariableName Style/VariableNumber
|
23
49
|
Style/AccessorMethodName Style/AsciiIdentifiers],
|
24
50
|
'Layout' => %w[Lint/BlockAlignment Lint/EndAlignment
|
25
|
-
Lint/DefEndAlignment],
|
51
|
+
Lint/DefEndAlignment Metrics/LineLength],
|
26
52
|
'Lint' => 'Style/FlipFlop'
|
27
53
|
}.map do |new_department, old_names|
|
28
54
|
Array(old_names).map do |old_name|
|
@@ -32,9 +58,10 @@ module RuboCop
|
|
32
58
|
end
|
33
59
|
|
34
60
|
REMOVED_COPS = {
|
35
|
-
'Rails/DefaultScope' => nil,
|
36
61
|
'Layout/SpaceAfterControlKeyword' => 'Layout/SpaceAroundKeyword',
|
37
62
|
'Layout/SpaceBeforeModifierKeyword' => 'Layout/SpaceAroundKeyword',
|
63
|
+
'Lint/RescueWithoutErrorClass' => 'Style/RescueStandardError',
|
64
|
+
'Rails/DefaultScope' => nil,
|
38
65
|
'Style/SpaceAfterControlKeyword' => 'Layout/SpaceAroundKeyword',
|
39
66
|
'Style/SpaceBeforeModifierKeyword' => 'Layout/SpaceAroundKeyword',
|
40
67
|
'Style/TrailingComma' => 'Style/TrailingCommaInArguments, ' \
|
@@ -42,8 +69,7 @@ module RuboCop
|
|
42
69
|
'Style/TrailingCommaInHashLiteral',
|
43
70
|
'Style/TrailingCommaInLiteral' => 'Style/TrailingCommaInArrayLiteral ' \
|
44
71
|
'and/or ' \
|
45
|
-
'Style/TrailingCommaInHashLiteral'
|
46
|
-
'Lint/RescueWithoutErrorClass' => 'Style/RescueStandardError'
|
72
|
+
'Style/TrailingCommaInHashLiteral'
|
47
73
|
}.map do |old_name, other_cops|
|
48
74
|
if other_cops
|
49
75
|
more = ". Please use #{other_cops} instead".gsub(%r{[A-Z]\w+/\w+},
|
@@ -88,13 +114,13 @@ module RuboCop
|
|
88
114
|
cops: 'Style/IfUnlessModifier',
|
89
115
|
parameters: 'MaxLineLength',
|
90
116
|
alternative: '`Style/IfUnlessModifier: MaxLineLength` has been ' \
|
91
|
-
'removed. Use `
|
117
|
+
'removed. Use `Layout/LineLength: Max` instead'
|
92
118
|
},
|
93
119
|
{
|
94
120
|
cops: 'Style/WhileUntilModifier',
|
95
121
|
parameters: 'MaxLineLength',
|
96
122
|
alternative: '`Style/WhileUntilModifier: MaxLineLength` has been ' \
|
97
|
-
'removed. Use `
|
123
|
+
'removed. Use `Layout/LineLength: Max` instead'
|
98
124
|
},
|
99
125
|
{
|
100
126
|
cops: 'AllCops',
|
@@ -119,6 +145,54 @@ module RuboCop
|
|
119
145
|
cops: 'Rails/UniqBeforePluck',
|
120
146
|
parameters: 'EnforcedMode',
|
121
147
|
alternative: '`EnforcedMode` has been renamed to `EnforcedStyle`'
|
148
|
+
},
|
149
|
+
{
|
150
|
+
cops: 'Style/MethodCallWithArgsParentheses',
|
151
|
+
parameters: 'IgnoredMethodPatterns',
|
152
|
+
alternative: '`IgnoredMethodPatterns` has been renamed to ' \
|
153
|
+
'`IgnoredPatterns`'
|
154
|
+
},
|
155
|
+
{
|
156
|
+
cops: %w[Performance/Count Performance/Detect],
|
157
|
+
parameters: 'SafeMode',
|
158
|
+
alternative: '`SafeMode` has been removed. ' \
|
159
|
+
'Use `SafeAutoCorrect` instead.'
|
160
|
+
},
|
161
|
+
{
|
162
|
+
cops: 'Bundler/GemComment',
|
163
|
+
parameters: 'Whitelist',
|
164
|
+
alternative: '`Whitelist` has been renamed to `IgnoredGems`.'
|
165
|
+
},
|
166
|
+
{
|
167
|
+
cops: %w[
|
168
|
+
Lint/SafeNavigationChain Lint/SafeNavigationConsistency
|
169
|
+
Style/NestedParenthesizedCalls Style/SafeNavigation
|
170
|
+
Style/TrivialAccessors
|
171
|
+
],
|
172
|
+
parameters: 'Whitelist',
|
173
|
+
alternative: '`Whitelist` has been renamed to `AllowedMethods`.'
|
174
|
+
},
|
175
|
+
{
|
176
|
+
cops: 'Style/IpAddresses',
|
177
|
+
parameters: 'Whitelist',
|
178
|
+
alternative: '`Whitelist` has been renamed to `AllowedAddresses`.'
|
179
|
+
},
|
180
|
+
{
|
181
|
+
cops: 'Naming/HeredocDelimiterNaming',
|
182
|
+
parameters: 'Blacklist',
|
183
|
+
alternative: '`Blacklist` has been renamed to `ForbiddenDelimiters`.'
|
184
|
+
},
|
185
|
+
{
|
186
|
+
cops: 'Naming/PredicateName',
|
187
|
+
parameters: 'NamePrefixBlacklist',
|
188
|
+
alternative: '`NamePrefixBlacklist` has been renamed to ' \
|
189
|
+
'`ForbiddenPrefixes`.'
|
190
|
+
},
|
191
|
+
{
|
192
|
+
cops: 'Naming/PredicateName',
|
193
|
+
parameters: 'NameWhitelist',
|
194
|
+
alternative: '`NameWhitelist` has been renamed to ' \
|
195
|
+
'`AllowedMethods`.'
|
122
196
|
}
|
123
197
|
].freeze
|
124
198
|
|
@@ -10,8 +10,9 @@ module RuboCop
|
|
10
10
|
|
11
11
|
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode
|
12
12
|
AutoCorrect StyleGuide Details].freeze
|
13
|
-
INTERNAL_PARAMS = %w[Description StyleGuide
|
14
|
-
VersionChanged
|
13
|
+
INTERNAL_PARAMS = %w[Description StyleGuide
|
14
|
+
VersionAdded VersionChanged VersionRemoved
|
15
|
+
Reference Safe SafeAutoCorrect].freeze
|
15
16
|
|
16
17
|
# 2.3 is the oldest officially supported Ruby version.
|
17
18
|
DEFAULT_RUBY_VERSION = 2.3
|
@@ -32,10 +33,7 @@ module RuboCop
|
|
32
33
|
|
33
34
|
def validate
|
34
35
|
# Don't validate RuboCop's own files. Avoids infinite recursion.
|
35
|
-
|
36
|
-
'config'))
|
37
|
-
return if File.expand_path(@config.loaded_path)
|
38
|
-
.start_with?(base_config_path)
|
36
|
+
return if @config.internal?
|
39
37
|
|
40
38
|
valid_cop_names, invalid_cop_names = @config.keys.partition do |key|
|
41
39
|
ConfigLoader.default_configuration.key?(key)
|
@@ -43,7 +41,7 @@ module RuboCop
|
|
43
41
|
|
44
42
|
@config_obsoletion.reject_obsolete_cops_and_parameters
|
45
43
|
|
46
|
-
|
44
|
+
alert_about_unrecognized_cops(invalid_cop_names)
|
47
45
|
check_target_ruby
|
48
46
|
validate_parameter_names(valid_cop_names)
|
49
47
|
validate_enforced_styles(valid_cop_names)
|
@@ -98,7 +96,8 @@ module RuboCop
|
|
98
96
|
raise ValidationError, msg
|
99
97
|
end
|
100
98
|
|
101
|
-
def
|
99
|
+
def alert_about_unrecognized_cops(invalid_cop_names)
|
100
|
+
unknown_cops = []
|
102
101
|
invalid_cop_names.each do |name|
|
103
102
|
# There could be a custom cop with this name. If so, don't warn
|
104
103
|
next if Cop::Cop.registry.contains_cop_matching?([name])
|
@@ -108,9 +107,10 @@ module RuboCop
|
|
108
107
|
# to do so than to pass the value around to various methods.
|
109
108
|
next if name == 'inherit_mode'
|
110
109
|
|
111
|
-
|
112
|
-
|
110
|
+
unknown_cops << "unrecognized cop #{name} found in " \
|
111
|
+
"#{smart_loaded_path}"
|
113
112
|
end
|
113
|
+
raise ValidationError, unknown_cops.join(', ') if unknown_cops.any?
|
114
114
|
end
|
115
115
|
|
116
116
|
def validate_syntax_cop
|
@@ -128,21 +128,30 @@ module RuboCop
|
|
128
128
|
def validate_parameter_names(valid_cop_names)
|
129
129
|
valid_cop_names.each do |name|
|
130
130
|
validate_section_presence(name)
|
131
|
-
|
131
|
+
each_invalid_parameter(name) do |param, supported_params|
|
132
|
+
warn Rainbow(<<~MESSAGE).yellow
|
133
|
+
Warning: #{name} does not support #{param} parameter.
|
132
134
|
|
133
|
-
|
134
|
-
next if COMMON_PARAMS.include?(param) || default_config.key?(param)
|
135
|
+
Supported parameters are:
|
135
136
|
|
136
|
-
|
137
|
-
|
138
|
-
"Supported parameters are:\n\n" \
|
139
|
-
" - #{(default_config.keys - INTERNAL_PARAMS).join("\n - ")}\n"
|
140
|
-
|
141
|
-
warn Rainbow(message).yellow.to_s
|
137
|
+
- #{supported_params.join("\n - ")}
|
138
|
+
MESSAGE
|
142
139
|
end
|
143
140
|
end
|
144
141
|
end
|
145
142
|
|
143
|
+
def each_invalid_parameter(cop_name)
|
144
|
+
default_config = ConfigLoader.default_configuration[cop_name]
|
145
|
+
|
146
|
+
@config[cop_name].each_key do |param|
|
147
|
+
next if COMMON_PARAMS.include?(param) || default_config.key?(param)
|
148
|
+
|
149
|
+
supported_params = default_config.keys - INTERNAL_PARAMS
|
150
|
+
|
151
|
+
yield param, supported_params
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
146
155
|
def validate_enforced_styles(valid_cop_names)
|
147
156
|
valid_cop_names.each do |name|
|
148
157
|
styles = @config[name].select { |key, _| key.start_with?('Enforced') }
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
39
39
|
|
40
40
|
def disable_offense(node)
|
41
41
|
range = node.location.expression
|
42
|
-
eol_comment = " # rubocop:
|
42
|
+
eol_comment = " # rubocop:todo #{cop_name}"
|
43
43
|
needed_line_length = range.column +
|
44
44
|
(range.source_line + eol_comment).length
|
45
45
|
if needed_line_length <= max_line_length
|
@@ -76,7 +76,7 @@ module RuboCop
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def max_line_length
|
79
|
-
config.for_cop('
|
79
|
+
config.for_cop('Layout/LineLength')['Max'] || 80
|
80
80
|
end
|
81
81
|
|
82
82
|
def disable_offense_at_end_of_line(range, eol_comment)
|
@@ -90,7 +90,7 @@ module RuboCop
|
|
90
90
|
|
91
91
|
corrector.insert_before(
|
92
92
|
range_with_newline,
|
93
|
-
"#{leading_whitespace}# rubocop:
|
93
|
+
"#{leading_whitespace}# rubocop:todo #{cop_name}\n"
|
94
94
|
)
|
95
95
|
corrector.insert_after(
|
96
96
|
range_with_newline,
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
24
24
|
|
25
25
|
def on_send(node)
|
26
26
|
return unless gem_declaration?(node)
|
27
|
-
return if
|
27
|
+
return if ignored_gem?(node)
|
28
28
|
return if commented?(node)
|
29
29
|
|
30
30
|
add_offense(node)
|
@@ -54,9 +54,9 @@ module RuboCop
|
|
54
54
|
comment_line?(node2.loc.expression.source)
|
55
55
|
end
|
56
56
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
57
|
+
def ignored_gem?(node)
|
58
|
+
ignored_gems = Array(cop_config['IgnoredGems'])
|
59
|
+
ignored_gems.include?(node.first_argument.value)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -13,8 +13,8 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# However, it don't replace all `sources` of `http://` with `https://`.
|
15
15
|
# For example, when specifying an internal gem server using HTTP on the
|
16
|
-
# intranet, a use case where HTTPS
|
17
|
-
# Consider using HTTP only if you
|
16
|
+
# intranet, a use case where HTTPS cannot be specified was considered.
|
17
|
+
# Consider using HTTP only if you cannot use HTTPS.
|
18
18
|
#
|
19
19
|
# @example
|
20
20
|
# # bad
|
@@ -64,17 +64,25 @@ module RuboCop
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def remove_irrelevant_cops(filename)
|
67
|
-
@cops.reject! { |cop| cop.excluded_file?(filename) }
|
68
67
|
@cops.reject! do |cop|
|
69
|
-
cop.
|
70
|
-
!
|
71
|
-
|
72
|
-
@cops.reject! do |cop|
|
73
|
-
cop.class.respond_to?(:support_target_rails_version?) &&
|
74
|
-
!cop.class.support_target_rails_version?(cop.target_rails_version)
|
68
|
+
cop.excluded_file?(filename) ||
|
69
|
+
!support_target_ruby_version?(cop) ||
|
70
|
+
!support_target_rails_version?(cop)
|
75
71
|
end
|
76
72
|
end
|
77
73
|
|
74
|
+
def support_target_ruby_version?(cop)
|
75
|
+
return true unless cop.class.respond_to?(:support_target_ruby_version?)
|
76
|
+
|
77
|
+
cop.class.support_target_ruby_version?(cop.target_ruby_version)
|
78
|
+
end
|
79
|
+
|
80
|
+
def support_target_rails_version?(cop)
|
81
|
+
return true unless cop.class.respond_to?(:support_target_rails_version?)
|
82
|
+
|
83
|
+
cop.class.support_target_rails_version?(cop.target_rails_version)
|
84
|
+
end
|
85
|
+
|
78
86
|
def reset_callbacks
|
79
87
|
@callbacks.clear
|
80
88
|
end
|
data/lib/rubocop/cop/cop.rb
CHANGED
@@ -123,23 +123,19 @@ module RuboCop
|
|
123
123
|
self.class::MSG
|
124
124
|
end
|
125
125
|
|
126
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
127
126
|
def add_offense(node, location: :expression, message: nil, severity: nil)
|
128
127
|
loc = find_location(node, location)
|
129
128
|
|
130
129
|
return if duplicate_location?(loc)
|
131
130
|
|
132
|
-
severity =
|
133
|
-
|
134
|
-
message ||= message(node)
|
135
|
-
message = annotate(message)
|
131
|
+
severity = find_severity(node, severity)
|
132
|
+
message = find_message(node, message)
|
136
133
|
|
137
134
|
status = enabled_line?(loc.line) ? correct(node) : :disabled
|
138
135
|
|
139
136
|
@offenses << Offense.new(severity, loc, message, name, status)
|
140
137
|
yield if block_given? && status != :disabled
|
141
138
|
end
|
142
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
143
139
|
|
144
140
|
def find_location(node, loc)
|
145
141
|
# Location can be provided as a symbol, e.g.: `:keyword`
|
@@ -160,10 +156,11 @@ module RuboCop
|
|
160
156
|
return :uncorrected unless correction
|
161
157
|
|
162
158
|
@corrections << Correction.new(correction, node, self)
|
159
|
+
:corrected
|
163
160
|
elsif disable_uncorrectable?
|
164
161
|
disable_uncorrectable(node)
|
162
|
+
:corrected_with_todo
|
165
163
|
end
|
166
|
-
:corrected
|
167
164
|
end
|
168
165
|
|
169
166
|
def reason_to_not_correct(node)
|
@@ -175,6 +172,8 @@ module RuboCop
|
|
175
172
|
end
|
176
173
|
|
177
174
|
def disable_uncorrectable(node)
|
175
|
+
return unless node
|
176
|
+
|
178
177
|
@disabled_lines ||= {}
|
179
178
|
line = node.location.line
|
180
179
|
return if @disabled_lines.key?(line)
|
@@ -220,12 +219,35 @@ module RuboCop
|
|
220
219
|
!relevant_file?(file)
|
221
220
|
end
|
222
221
|
|
222
|
+
# This method should be overridden when a cop's behavior depends
|
223
|
+
# on state that lives outside of these locations:
|
224
|
+
#
|
225
|
+
# (1) the file under inspection
|
226
|
+
# (2) the cop's source code
|
227
|
+
# (3) the config (eg a .rubocop.yml file)
|
228
|
+
#
|
229
|
+
# For example, some cops may want to look at other parts of
|
230
|
+
# the codebase being inspected to find violations. A cop may
|
231
|
+
# use the presence or absence of file `foo.rb` to determine
|
232
|
+
# whether a certain violation exists in `bar.rb`.
|
233
|
+
#
|
234
|
+
# Overriding this method allows the cop to indicate to RuboCop's
|
235
|
+
# ResultCache system when those external dependencies change,
|
236
|
+
# ie when the ResultCache should be invalidated.
|
237
|
+
def external_dependency_checksum
|
238
|
+
nil
|
239
|
+
end
|
240
|
+
|
223
241
|
private
|
224
242
|
|
243
|
+
def find_message(node, message)
|
244
|
+
annotate(message || message(node))
|
245
|
+
end
|
246
|
+
|
225
247
|
def annotate(message)
|
226
248
|
RuboCop::Cop::MessageAnnotator.new(
|
227
|
-
config, cop_config, @options
|
228
|
-
).annotate(message
|
249
|
+
config, cop_name, cop_config, @options
|
250
|
+
).annotate(message)
|
229
251
|
end
|
230
252
|
|
231
253
|
def file_name_matches_any?(file, parameter, default_result)
|
@@ -249,6 +271,10 @@ module RuboCop
|
|
249
271
|
@processed_source.comment_config.cop_enabled_at_line?(self, line_number)
|
250
272
|
end
|
251
273
|
|
274
|
+
def find_severity(_node, severity)
|
275
|
+
custom_severity || severity || default_severity
|
276
|
+
end
|
277
|
+
|
252
278
|
def default_severity
|
253
279
|
self.class.lint? ? :warning : :convention
|
254
280
|
end
|