rubocop 0.88.0 → 0.89.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/bin/rubocop-profile +1 -0
- data/config/default.yml +96 -16
- data/lib/rubocop.rb +16 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +19 -2
- data/lib/rubocop/config_loader.rb +1 -1
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_validator.rb +1 -3
- data/lib/rubocop/cop/base.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +32 -11
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +9 -16
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +49 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +7 -4
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +2 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +4 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +27 -23
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +61 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -31
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +25 -15
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +13 -15
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +35 -6
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +3 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- 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/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +11 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +9 -7
- data/lib/rubocop/cop/style/alias.rb +7 -3
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -2
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +2 -2
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +11 -2
- data/lib/rubocop/cop/style/documentation.rb +4 -4
- data/lib/rubocop/cop/style/each_with_object.rb +0 -2
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/eval_with_location.rb +4 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -0
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/format_string.rb +4 -0
- data/lib/rubocop/cop/style/format_string_token.rb +1 -0
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/guard_clause.rb +2 -2
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +8 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -3
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +0 -20
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +9 -2
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -0
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +25 -10
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +1 -13
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +2 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/path_util.rb +19 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/rspec/expect_offense.rb +1 -1
- data/lib/rubocop/target_finder.rb +12 -9
- data/lib/rubocop/version.rb +2 -2
- metadata +19 -6
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -21,7 +21,9 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# # good
|
23
23
|
# false
|
24
|
-
class BooleanSymbol <
|
24
|
+
class BooleanSymbol < Base
|
25
|
+
extend AutoCorrector
|
26
|
+
|
25
27
|
MSG = 'Symbol with a boolean name - ' \
|
26
28
|
'you probably meant to use `%<boolean>s`.'
|
27
29
|
|
@@ -30,19 +32,22 @@ module RuboCop
|
|
30
32
|
def on_sym(node)
|
31
33
|
return unless boolean_symbol?(node)
|
32
34
|
|
33
|
-
add_offense(node, message: format(MSG, boolean: node.value))
|
35
|
+
add_offense(node, message: format(MSG, boolean: node.value)) do |corrector|
|
36
|
+
autocorrect(corrector, node)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
corrector.replace(node, boolean_literal)
|
40
|
+
private
|
41
|
+
|
42
|
+
def autocorrect(corrector, node)
|
43
|
+
boolean_literal = node.source.delete(':')
|
44
|
+
parent = node.parent
|
45
|
+
if parent&.pair_type? && node.equal?(parent.children[0])
|
46
|
+
corrector.remove(parent.loc.operator)
|
47
|
+
boolean_literal = "#{node.source} =>"
|
45
48
|
end
|
49
|
+
|
50
|
+
corrector.replace(node, boolean_literal)
|
46
51
|
end
|
47
52
|
end
|
48
53
|
end
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
# def cook(dry_ingredients = self.dry_ingredients)
|
48
48
|
# dry_ingredients.combine
|
49
49
|
# end
|
50
|
-
class CircularArgumentReference <
|
50
|
+
class CircularArgumentReference < Base
|
51
51
|
MSG = 'Circular argument reference - `%<arg_name>s`.'
|
52
52
|
|
53
53
|
def on_kwoptarg(node)
|
@@ -32,9 +32,14 @@ module RuboCop
|
|
32
32
|
# def some_method
|
33
33
|
# do_something
|
34
34
|
# end
|
35
|
-
class Debugger <
|
35
|
+
class Debugger < Base
|
36
36
|
MSG = 'Remove debugger entry point `%<source>s`.'
|
37
37
|
|
38
|
+
DEBUGGER_METHODS = %i[
|
39
|
+
debugger byebug remote_byebug pry remote_pry pry_remote console rescue
|
40
|
+
save_and_open_page save_and_open_screenshot save_screenshot irb
|
41
|
+
].to_set.freeze
|
42
|
+
|
38
43
|
def_node_matcher :kernel?, <<~PATTERN
|
39
44
|
{
|
40
45
|
(const nil? :Kernel)
|
@@ -57,6 +62,7 @@ module RuboCop
|
|
57
62
|
PATTERN
|
58
63
|
|
59
64
|
def on_send(node)
|
65
|
+
return unless DEBUGGER_METHODS.include?(node.method_name)
|
60
66
|
return unless debugger_call?(node) || binding_irb?(node)
|
61
67
|
|
62
68
|
add_offense(node)
|
@@ -20,7 +20,9 @@ module RuboCop
|
|
20
20
|
# File.exist?(some_path)
|
21
21
|
# Dir.exist?(some_path)
|
22
22
|
# block_given?
|
23
|
-
class DeprecatedClassMethods <
|
23
|
+
class DeprecatedClassMethods < Base
|
24
|
+
extend AutoCorrector
|
25
|
+
|
24
26
|
# Inner class to DeprecatedClassMethods.
|
25
27
|
# This class exists to add abstraction and clean naming to the
|
26
28
|
# objects that are going to be operated on.
|
@@ -60,20 +62,17 @@ module RuboCop
|
|
60
62
|
replacement: :block_given?)
|
61
63
|
].freeze
|
62
64
|
|
65
|
+
DEPRECATED_METHODS = DEPRECATED_METHODS_OBJECT.map(&:deprecated_method).freeze
|
66
|
+
|
63
67
|
def on_send(node)
|
68
|
+
return unless DEPRECATED_METHODS.include?(node.method_name)
|
69
|
+
|
64
70
|
check(node) do |data|
|
65
71
|
message = format(MSG, current: deprecated_method(data),
|
66
72
|
prefer: replacement_method(data))
|
67
73
|
|
68
|
-
add_offense(node
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
def autocorrect(node)
|
73
|
-
lambda do |corrector|
|
74
|
-
check(node) do |data|
|
75
|
-
corrector.replace(node.loc.selector,
|
76
|
-
data.replacement_method.to_s)
|
74
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
75
|
+
corrector.replace(node.loc.selector, data.replacement_method.to_s)
|
77
76
|
end
|
78
77
|
end
|
79
78
|
end
|
@@ -37,8 +37,9 @@ module RuboCop
|
|
37
37
|
# # good
|
38
38
|
# OpenSSL::Digest.digest('SHA256', 'foo')
|
39
39
|
#
|
40
|
-
class DeprecatedOpenSSLConstant <
|
40
|
+
class DeprecatedOpenSSLConstant < Base
|
41
41
|
include RangeHelp
|
42
|
+
extend AutoCorrector
|
42
43
|
|
43
44
|
MSG = 'Use `%<constant>s.%<method>s(%<replacement_args>s)`' \
|
44
45
|
' instead of `%<original>s`.'
|
@@ -54,26 +55,29 @@ module RuboCop
|
|
54
55
|
|
55
56
|
def on_send(node)
|
56
57
|
return if node.arguments.any? { |arg| arg.variable? || arg.send_type? || arg.const_type? }
|
58
|
+
return unless algorithm_const(node)
|
57
59
|
|
58
|
-
|
60
|
+
message = message(node)
|
61
|
+
|
62
|
+
add_offense(node, message: message) do |corrector|
|
63
|
+
autocorrect(corrector, node)
|
64
|
+
end
|
59
65
|
end
|
60
66
|
|
61
|
-
|
67
|
+
private
|
68
|
+
|
69
|
+
def autocorrect(corrector, node)
|
62
70
|
algorithm_constant, = algorithm_const(node)
|
63
71
|
|
64
|
-
|
65
|
-
|
66
|
-
corrector.remove(algorithm_constant.loc.name)
|
72
|
+
corrector.remove(algorithm_constant.loc.double_colon)
|
73
|
+
corrector.remove(algorithm_constant.loc.name)
|
67
74
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end
|
75
|
+
corrector.replace(
|
76
|
+
correction_range(node),
|
77
|
+
"#{node.loc.selector.source}(#{replacement_args(node)})"
|
78
|
+
)
|
73
79
|
end
|
74
80
|
|
75
|
-
private
|
76
|
-
|
77
81
|
def message(node)
|
78
82
|
algorithm_constant, = algorithm_const(node)
|
79
83
|
parent_constant = openssl_class(algorithm_constant)
|
@@ -49,10 +49,13 @@ module RuboCop
|
|
49
49
|
# end
|
50
50
|
#
|
51
51
|
# alias bar foo
|
52
|
-
class DuplicateMethods <
|
52
|
+
class DuplicateMethods < Base
|
53
53
|
MSG = 'Method `%<method>s` is defined at both %<defined>s and ' \
|
54
54
|
'%<current>s.'
|
55
55
|
|
56
|
+
METHOD_DEF_METHODS = %i[alias_method attr_reader attr_writer
|
57
|
+
attr_accessor attr].to_set.freeze
|
58
|
+
|
56
59
|
def initialize(config = nil, options = nil)
|
57
60
|
super
|
58
61
|
@definitions = {}
|
@@ -96,10 +99,10 @@ module RuboCop
|
|
96
99
|
PATTERN
|
97
100
|
|
98
101
|
def_node_matcher :sym_name, '(sym $_name)'
|
99
|
-
|
100
102
|
def on_send(node)
|
103
|
+
return unless METHOD_DEF_METHODS.include?(node.method_name)
|
104
|
+
|
101
105
|
if (name = alias_method?(node))
|
102
|
-
return unless name
|
103
106
|
return if node.ancestors.any?(&:if_type?)
|
104
107
|
return if possible_dsl?(node)
|
105
108
|
|
@@ -150,7 +153,7 @@ module RuboCop
|
|
150
153
|
end
|
151
154
|
message = message_for_dup(node, method_name)
|
152
155
|
|
153
|
-
add_offense(
|
156
|
+
add_offense(loc, message: message)
|
154
157
|
else
|
155
158
|
@definitions[method_name] = node
|
156
159
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks that there are no repeated exceptions
|
7
|
+
# used in 'rescue' expressions.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# begin
|
12
|
+
# something
|
13
|
+
# rescue FirstException
|
14
|
+
# handle_exception
|
15
|
+
# rescue FirstException
|
16
|
+
# handle_other_exception
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # good
|
20
|
+
# begin
|
21
|
+
# something
|
22
|
+
# rescue FirstException
|
23
|
+
# handle_exception
|
24
|
+
# rescue SecondException
|
25
|
+
# handle_other_exception
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
class DuplicateRescueException < Base
|
29
|
+
include RescueNode
|
30
|
+
|
31
|
+
MSG = 'Duplicate `rescue` exception detected.'
|
32
|
+
|
33
|
+
def on_rescue(node)
|
34
|
+
return if rescue_modifier?(node)
|
35
|
+
|
36
|
+
_body, *resbodies, _else = *node
|
37
|
+
|
38
|
+
resbodies.each_with_object(Set.new) do |resbody, previous|
|
39
|
+
rescued_exceptions = rescued_exceptions(resbody)
|
40
|
+
|
41
|
+
rescued_exceptions.each do |exception|
|
42
|
+
add_offense(exception) unless previous.add?(exception)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def rescued_exceptions(resbody)
|
50
|
+
rescue_group, = *resbody
|
51
|
+
if rescue_group
|
52
|
+
rescue_group.values
|
53
|
+
else
|
54
|
+
[]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -21,7 +21,7 @@ module RuboCop
|
|
21
21
|
#
|
22
22
|
# num = 0
|
23
23
|
# sum = numbers.each_with_object(num) { |e, a| a += e }
|
24
|
-
class EachWithObjectArgument <
|
24
|
+
class EachWithObjectArgument < Base
|
25
25
|
MSG = 'The argument to each_with_object cannot be immutable.'
|
26
26
|
|
27
27
|
def_node_matcher :each_with_object?, <<~PATTERN
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Lint
|
6
|
+
# This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.
|
7
|
+
# @example
|
8
|
+
# # bad
|
9
|
+
# if condition
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# unless condition
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # bad
|
17
|
+
# if condition
|
18
|
+
# do_something
|
19
|
+
# elsif other_condition
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# if condition
|
24
|
+
# do_something
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# # good
|
28
|
+
# unless condition
|
29
|
+
# do_something
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# # good
|
33
|
+
# if condition
|
34
|
+
# do_something
|
35
|
+
# elsif other_condition
|
36
|
+
# do_something_else
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# @example AllowComments: true (default)
|
40
|
+
# # good
|
41
|
+
# if condition
|
42
|
+
# do_something
|
43
|
+
# elsif other_condition
|
44
|
+
# # noop
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# @example AllowComments: false
|
48
|
+
# # bad
|
49
|
+
# if condition
|
50
|
+
# do_something
|
51
|
+
# elsif other_condition
|
52
|
+
# # noop
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
class EmptyConditionalBody < Base
|
56
|
+
MSG = 'Avoid `%<keyword>s` branches without a body.'
|
57
|
+
|
58
|
+
def on_if(node)
|
59
|
+
return if node.body
|
60
|
+
return if cop_config['AllowComments'] && comment_lines?(node)
|
61
|
+
|
62
|
+
add_offense(node, message: format(MSG, keyword: node.keyword))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -42,15 +42,15 @@ module RuboCop
|
|
42
42
|
# ensure
|
43
43
|
# do_something_else
|
44
44
|
# end
|
45
|
-
class EmptyEnsure <
|
45
|
+
class EmptyEnsure < Base
|
46
|
+
extend AutoCorrector
|
47
|
+
|
46
48
|
MSG = 'Empty `ensure` block detected.'
|
47
49
|
|
48
50
|
def on_ensure(node)
|
49
|
-
|
50
|
-
end
|
51
|
+
return if node.body
|
51
52
|
|
52
|
-
|
53
|
-
lambda do |corrector|
|
53
|
+
add_offense(node.loc.keyword) do |corrector|
|
54
54
|
corrector.remove(node.loc.keyword)
|
55
55
|
end
|
56
56
|
end
|
@@ -22,13 +22,13 @@ module RuboCop
|
|
22
22
|
# if (some_expression)
|
23
23
|
# bar
|
24
24
|
# end
|
25
|
-
class EmptyExpression <
|
25
|
+
class EmptyExpression < Base
|
26
26
|
MSG = 'Avoid empty expressions.'
|
27
27
|
|
28
28
|
def on_begin(node)
|
29
29
|
return unless empty_expression?(node)
|
30
30
|
|
31
|
-
add_offense(node
|
31
|
+
add_offense(node)
|
32
32
|
end
|
33
33
|
|
34
34
|
private
|
@@ -16,18 +16,17 @@ module RuboCop
|
|
16
16
|
# # good
|
17
17
|
#
|
18
18
|
# "result is #{some_result}"
|
19
|
-
class EmptyInterpolation <
|
19
|
+
class EmptyInterpolation < Base
|
20
20
|
include Interpolation
|
21
|
+
extend AutoCorrector
|
21
22
|
|
22
23
|
MSG = 'Empty interpolation detected.'
|
23
24
|
|
24
25
|
def on_interpolation(begin_node)
|
25
|
-
|
26
|
-
end
|
26
|
+
return unless begin_node.children.empty?
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
collector.remove(node.loc.expression)
|
28
|
+
add_offense(begin_node) do |corrector|
|
29
|
+
corrector.remove(begin_node.loc.expression)
|
31
30
|
end
|
32
31
|
end
|
33
32
|
end
|