rubocop 0.88.0 → 0.89.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/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 +2 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +2 -2
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_validator.rb +2 -4
- 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 +4 -4
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- 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/class_structure.rb +3 -7
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- 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/leading_comment_space.rb +1 -1
- 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 +50 -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 +90 -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 +16 -19
- 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 -47
- 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 +14 -16
- data/lib/rubocop/cop/mixin/alignment.rb +2 -1
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/range_help.rb +18 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +37 -8
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- 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 +16 -9
- data/lib/rubocop/cop/style/accessor_grouping.rb +23 -21
- data/lib/rubocop/cop/style/alias.rb +41 -36
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_join.rb +6 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +11 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bare_percent_literals.rb +10 -12
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +9 -14
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +23 -23
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +19 -16
- data/lib/rubocop/cop/style/class_and_module_children.rb +14 -11
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +6 -10
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/command_literal.rb +23 -24
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +12 -3
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +12 -12
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +7 -10
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +7 -9
- data/lib/rubocop/cop/style/documentation.rb +6 -8
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -19
- data/lib/rubocop/cop/style/empty_case_condition.rb +19 -20
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +15 -16
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +5 -9
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +21 -20
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/float_division.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +21 -19
- data/lib/rubocop/cop/style/format_string_token.rb +5 -7
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +19 -41
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +8 -1
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +3 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +10 -32
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +3 -7
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +22 -32
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +13 -13
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -10
- data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +4 -6
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +23 -20
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +3 -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 +23 -10
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- 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/single_line_methods.rb +1 -1
- 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 +3 -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/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/options.rb +3 -3
- 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/rspec/shared_contexts.rb +1 -5
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/target_finder.rb +12 -9
- data/lib/rubocop/version.rb +2 -2
- metadata +21 -8
- 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
@@ -18,7 +18,7 @@ module RuboCop
|
|
18
18
|
# baz)
|
19
19
|
# end
|
20
20
|
#
|
21
|
-
class MultilineMethodSignature <
|
21
|
+
class MultilineMethodSignature < Base
|
22
22
|
MSG = 'Avoid multi-line method signatures.'
|
23
23
|
|
24
24
|
def on_def(node)
|
@@ -53,7 +53,7 @@ module RuboCop
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def max_line_length
|
56
|
-
config.for_cop('Layout/LineLength')['Max'] ||
|
56
|
+
config.for_cop('Layout/LineLength')['Max'] || 120
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -22,18 +22,16 @@ module RuboCop
|
|
22
22
|
# else
|
23
23
|
# c
|
24
24
|
# end
|
25
|
-
class MultilineTernaryOperator <
|
25
|
+
class MultilineTernaryOperator < Base
|
26
|
+
extend AutoCorrector
|
27
|
+
|
26
28
|
MSG = 'Avoid multi-line ternary operators, ' \
|
27
29
|
'use `if` or `unless` instead.'
|
28
30
|
|
29
31
|
def on_if(node)
|
30
32
|
return unless node.ternary? && node.multiline?
|
31
33
|
|
32
|
-
add_offense(node)
|
33
|
-
end
|
34
|
-
|
35
|
-
def autocorrect(node)
|
36
|
-
lambda do |corrector|
|
34
|
+
add_offense(node) do |corrector|
|
37
35
|
corrector.replace(node, <<~RUBY.chop)
|
38
36
|
if #{node.condition.source}
|
39
37
|
#{node.if_branch.source}
|
@@ -28,8 +28,9 @@ module RuboCop
|
|
28
28
|
# arg2)
|
29
29
|
# end
|
30
30
|
#
|
31
|
-
class MultilineWhenThen <
|
31
|
+
class MultilineWhenThen < Base
|
32
32
|
include RangeHelp
|
33
|
+
extend AutoCorrector
|
33
34
|
|
34
35
|
MSG = 'Do not use `then` for multiline `when` statement.'
|
35
36
|
|
@@ -46,19 +47,16 @@ module RuboCop
|
|
46
47
|
# With more than one statements after then, there's not offense
|
47
48
|
return if accept_node_type?(node.body)
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
def autocorrect(node)
|
53
|
-
lambda do |corrector|
|
50
|
+
range = node.loc.begin
|
51
|
+
add_offense(range) do |corrector|
|
54
52
|
corrector.remove(
|
55
|
-
range_with_surrounding_space(
|
56
|
-
range: node.loc.begin, side: :left, newlines: false
|
57
|
-
)
|
53
|
+
range_with_surrounding_space(range: range, side: :left, newlines: false)
|
58
54
|
)
|
59
55
|
end
|
60
56
|
end
|
61
57
|
|
58
|
+
private
|
59
|
+
|
62
60
|
def require_then?(when_node)
|
63
61
|
return false unless when_node.body
|
64
62
|
|
@@ -14,7 +14,7 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# a = 'a'
|
16
16
|
# foo if ['a', 'b', 'c'].include?(a)
|
17
|
-
class MultipleComparison <
|
17
|
+
class MultipleComparison < Base
|
18
18
|
MSG = 'Avoid comparing a variable with multiple items ' \
|
19
19
|
'in a conditional, use `Array#include?` instead.'
|
20
20
|
|
@@ -50,9 +50,10 @@ module RuboCop
|
|
50
50
|
# puts 1
|
51
51
|
# end
|
52
52
|
# end.freeze
|
53
|
-
class MutableConstant <
|
53
|
+
class MutableConstant < Base
|
54
54
|
include FrozenStringLiteral
|
55
55
|
include ConfigurableEnforcedStyle
|
56
|
+
extend AutoCorrector
|
56
57
|
|
57
58
|
MSG = 'Freeze mutable objects assigned to constants.'
|
58
59
|
|
@@ -69,23 +70,6 @@ module RuboCop
|
|
69
70
|
on_assignment(value)
|
70
71
|
end
|
71
72
|
|
72
|
-
def autocorrect(node)
|
73
|
-
expr = node.source_range
|
74
|
-
|
75
|
-
lambda do |corrector|
|
76
|
-
splat_value = splat_value(node)
|
77
|
-
if splat_value
|
78
|
-
correct_splat_expansion(corrector, expr, splat_value)
|
79
|
-
elsif node.array_type? && !node.bracketed?
|
80
|
-
corrector.wrap(expr, '[', ']')
|
81
|
-
elsif requires_parentheses?(node)
|
82
|
-
corrector.wrap(expr, '(', ')')
|
83
|
-
end
|
84
|
-
|
85
|
-
corrector.insert_after(expr, '.freeze')
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
73
|
private
|
90
74
|
|
91
75
|
def on_assignment(value)
|
@@ -101,7 +85,9 @@ module RuboCop
|
|
101
85
|
return if operation_produces_immutable_object?(value)
|
102
86
|
return if frozen_string_literal?(value)
|
103
87
|
|
104
|
-
add_offense(value)
|
88
|
+
add_offense(value) do |corrector|
|
89
|
+
autocorrect(corrector, value)
|
90
|
+
end
|
105
91
|
end
|
106
92
|
|
107
93
|
def check(value)
|
@@ -112,7 +98,24 @@ module RuboCop
|
|
112
98
|
return if FROZEN_STRING_LITERAL_TYPES.include?(value.type) &&
|
113
99
|
frozen_string_literals_enabled?
|
114
100
|
|
115
|
-
add_offense(value)
|
101
|
+
add_offense(value) do |corrector|
|
102
|
+
autocorrect(corrector, value)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def autocorrect(corrector, node)
|
107
|
+
expr = node.source_range
|
108
|
+
|
109
|
+
splat_value = splat_value(node)
|
110
|
+
if splat_value
|
111
|
+
correct_splat_expansion(corrector, expr, splat_value)
|
112
|
+
elsif node.array_type? && !node.bracketed?
|
113
|
+
corrector.wrap(expr, '[', ']')
|
114
|
+
elsif requires_parentheses?(node)
|
115
|
+
corrector.wrap(expr, '(', ')')
|
116
|
+
end
|
117
|
+
|
118
|
+
corrector.insert_after(expr, '.freeze')
|
116
119
|
end
|
117
120
|
|
118
121
|
def mutable_literal?(value)
|
@@ -53,7 +53,11 @@ module RuboCop
|
|
53
53
|
'negative?' => '<'
|
54
54
|
}.freeze
|
55
55
|
|
56
|
+
COMPARISON_METHODS = %i[== > < positive? negative? zero?].to_set.freeze
|
57
|
+
|
56
58
|
def on_send(node)
|
59
|
+
return unless COMPARISON_METHODS.include?(node.method_name)
|
60
|
+
|
57
61
|
numeric, replacement = check(node)
|
58
62
|
return unless numeric
|
59
63
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for places where keyword arguments can be used instead of
|
7
|
+
# boolean arguments when defining methods.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# def some_method(bar = false)
|
12
|
+
# puts bar
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# # bad - common hack before keyword args were introduced
|
16
|
+
# def some_method(options = {})
|
17
|
+
# bar = options.fetch(:bar, false)
|
18
|
+
# puts bar
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# def some_method(bar: false)
|
23
|
+
# puts bar
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
class OptionalBooleanParameter < Base
|
27
|
+
MSG = 'Use keyword arguments when defining method with boolean argument.'
|
28
|
+
BOOLEAN_TYPES = %i[true false].freeze
|
29
|
+
|
30
|
+
def on_def(node)
|
31
|
+
node.arguments.each do |arg|
|
32
|
+
next unless arg.optarg_type?
|
33
|
+
|
34
|
+
_name, value = *arg
|
35
|
+
add_offense(arg) if BOOLEAN_TYPES.include?(value.type)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
alias on_defs on_def
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -102,12 +102,12 @@ module RuboCop
|
|
102
102
|
delimiters_regexp = Regexp.union(delimiters)
|
103
103
|
node
|
104
104
|
.children.map { |n| string_source(n) }.compact
|
105
|
-
.any? { |s| delimiters_regexp.match?(s
|
105
|
+
.any? { |s| delimiters_regexp.match?(s) }
|
106
106
|
end
|
107
107
|
|
108
108
|
def string_source(node)
|
109
109
|
if node.is_a?(String)
|
110
|
-
node
|
110
|
+
node.scrub
|
111
111
|
elsif node.respond_to?(:type) && (node.str_type? || node.sym_type?)
|
112
112
|
node.source
|
113
113
|
end
|
@@ -90,10 +90,10 @@ module RuboCop
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def else_source(else_branch)
|
93
|
-
if else_branch
|
94
|
-
else_branch.modifier_form? ||
|
95
|
-
else_branch.range_type?
|
93
|
+
if require_parentheses?(else_branch)
|
96
94
|
"(#{else_branch.source})"
|
95
|
+
elsif without_argument_parentheses_method?(else_branch)
|
96
|
+
"#{else_branch.method_name}(#{else_branch.arguments.map(&:source).join(', ')})"
|
97
97
|
else
|
98
98
|
else_branch.source
|
99
99
|
end
|
@@ -118,6 +118,18 @@ module RuboCop
|
|
118
118
|
|
119
119
|
corrector.wrap(node.else_branch, '(', ')')
|
120
120
|
end
|
121
|
+
|
122
|
+
def require_parentheses?(node)
|
123
|
+
node.basic_conditional? &&
|
124
|
+
node.modifier_form? ||
|
125
|
+
node.range_type? ||
|
126
|
+
node.rescue_type? ||
|
127
|
+
node.respond_to?(:semantic_operator?) && node.semantic_operator?
|
128
|
+
end
|
129
|
+
|
130
|
+
def without_argument_parentheses_method?(node)
|
131
|
+
node.send_type? && !node.arguments.empty? && !node.parenthesized?
|
132
|
+
end
|
121
133
|
end
|
122
134
|
end
|
123
135
|
end
|
@@ -23,9 +23,13 @@ module RuboCop
|
|
23
23
|
MSG_2 = 'Redundant `RuntimeError.new` call can be replaced with ' \
|
24
24
|
'just the message.'
|
25
25
|
|
26
|
+
RAISE_METHODS = %i[raise fail].freeze
|
27
|
+
|
26
28
|
# Switch `raise RuntimeError, 'message'` to `raise 'message'`, and
|
27
29
|
# `raise RuntimeError.new('message')` to `raise 'message'`.
|
28
30
|
def on_send(node)
|
31
|
+
return unless RAISE_METHODS.include?(node.method_name)
|
32
|
+
|
29
33
|
fix_exploded(node) || fix_compact(node)
|
30
34
|
end
|
31
35
|
|
@@ -92,18 +92,18 @@ module RuboCop
|
|
92
92
|
|
93
93
|
def each_escape(node)
|
94
94
|
pattern_source(node).each_char.with_index.reduce(
|
95
|
-
[nil,
|
96
|
-
) do |(previous,
|
95
|
+
[nil, 0]
|
96
|
+
) do |(previous, char_class_depth), (current, index)|
|
97
97
|
if previous == '\\'
|
98
|
-
yield [current, index - 1,
|
98
|
+
yield [current, index - 1, !char_class_depth.zero?]
|
99
99
|
|
100
|
-
[nil,
|
101
|
-
elsif previous == '['
|
102
|
-
[current,
|
103
|
-
elsif
|
104
|
-
[current,
|
100
|
+
[nil, char_class_depth]
|
101
|
+
elsif previous == '['
|
102
|
+
[current, char_class_depth + 1]
|
103
|
+
elsif current == ']'
|
104
|
+
[current, char_class_depth - 1]
|
105
105
|
else
|
106
|
-
[current,
|
106
|
+
[current, char_class_depth]
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
@@ -55,6 +55,8 @@ module RuboCop
|
|
55
55
|
MSG = 'Use `%<suggestion>s` instead of '\
|
56
56
|
'`%<sorter>s...%<accessor_source>s`.'
|
57
57
|
|
58
|
+
SORT_METHODS = %i[sort sort_by].freeze
|
59
|
+
|
58
60
|
def_node_matcher :redundant_sort?, <<~MATCHER
|
59
61
|
{
|
60
62
|
(send $(send _ $:sort ...) ${:last :first})
|
@@ -72,18 +74,21 @@ module RuboCop
|
|
72
74
|
MATCHER
|
73
75
|
|
74
76
|
def on_send(node)
|
75
|
-
|
76
|
-
range = range_between(
|
77
|
-
sort_node.loc.selector.begin_pos,
|
78
|
-
node.loc.expression.end_pos
|
79
|
-
)
|
77
|
+
return unless sort_method?(node)
|
80
78
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
79
|
+
if (sort_node, sorter, accessor = redundant_sort?(node.parent))
|
80
|
+
ancestor = node.parent
|
81
|
+
elsif (sort_node, sorter, accessor = redundant_sort?(node.parent&.parent))
|
82
|
+
ancestor = node.parent.parent
|
83
|
+
else
|
84
|
+
return
|
86
85
|
end
|
86
|
+
|
87
|
+
add_offense(ancestor,
|
88
|
+
location: offense_range(sort_node, ancestor),
|
89
|
+
message: message(ancestor,
|
90
|
+
sorter,
|
91
|
+
accessor))
|
87
92
|
end
|
88
93
|
|
89
94
|
def autocorrect(node)
|
@@ -108,6 +113,14 @@ module RuboCop
|
|
108
113
|
|
109
114
|
private
|
110
115
|
|
116
|
+
def sort_method?(node)
|
117
|
+
SORT_METHODS.include?(node.method_name)
|
118
|
+
end
|
119
|
+
|
120
|
+
def offense_range(sort_node, ancestor)
|
121
|
+
range_between(sort_node.loc.selector.begin_pos, ancestor.loc.expression.end_pos)
|
122
|
+
end
|
123
|
+
|
111
124
|
def message(node, sorter, accessor)
|
112
125
|
accessor_source = range_between(
|
113
126
|
node.loc.selector.begin_pos,
|
@@ -136,10 +136,10 @@ module RuboCop
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def comments(node)
|
139
|
-
processed_source.
|
140
|
-
|
141
|
-
|
142
|
-
|
139
|
+
processed_source.each_comment_in_lines(
|
140
|
+
node.loc.first_line...
|
141
|
+
node.loc.last_line
|
142
|
+
).to_a
|
143
143
|
end
|
144
144
|
|
145
145
|
def allowed_if_condition?(node)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# Sometimes using dig method ends up with just a single
|
7
|
+
# argument. In such cases, dig should be replaced with [].
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# { key: 'value' }.dig(:key)
|
12
|
+
# [1, 2, 3].dig(0)
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# { key: 'value' }[:key]
|
16
|
+
# [1, 2, 3][0]
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# { key1: { key2: 'value' } }.dig(:key1, :key2)
|
20
|
+
# [1, [2, [3]]].dig(1, 1)
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# keys = %i[key1 key2]
|
24
|
+
# { key1: { key2: 'value' } }.dig(*keys)
|
25
|
+
#
|
26
|
+
class SingleArgumentDig < Base
|
27
|
+
extend AutoCorrector
|
28
|
+
|
29
|
+
MSG = 'Use `%<receiver>s[%<argument>s]` instead of `%<original>s`.'
|
30
|
+
|
31
|
+
def_node_matcher :single_argument_dig?, <<~PATTERN
|
32
|
+
(send _ :dig $!splat)
|
33
|
+
PATTERN
|
34
|
+
|
35
|
+
def on_send(node)
|
36
|
+
return unless node.receiver
|
37
|
+
|
38
|
+
expression = single_argument_dig?(node)
|
39
|
+
return unless expression
|
40
|
+
|
41
|
+
receiver = node.receiver.source
|
42
|
+
argument = expression.source
|
43
|
+
|
44
|
+
message = format(MSG, receiver: receiver, argument: argument,
|
45
|
+
original: node.source)
|
46
|
+
add_offense(node, message: message) do |corrector|
|
47
|
+
correct_access = "#{receiver}[#{argument}]"
|
48
|
+
corrector.replace(node, correct_access)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|