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
@@ -62,9 +62,11 @@ module RuboCop
|
|
62
62
|
# private :bar, :baz
|
63
63
|
#
|
64
64
|
# end
|
65
|
-
class AccessModifierDeclarations <
|
65
|
+
class AccessModifierDeclarations < Base
|
66
66
|
include ConfigurableEnforcedStyle
|
67
67
|
|
68
|
+
ACCESS_MODIFIERS = %i[private protected public module_function].to_set.freeze
|
69
|
+
|
68
70
|
GROUP_STYLE_MESSAGE = [
|
69
71
|
'`%<access_modifier>s` should not be',
|
70
72
|
'inlined in method definitions.'
|
@@ -80,15 +82,12 @@ module RuboCop
|
|
80
82
|
PATTERN
|
81
83
|
|
82
84
|
def on_send(node)
|
83
|
-
return unless
|
85
|
+
return unless access_modifier?(node)
|
84
86
|
return if node.parent.pair_type?
|
85
|
-
return if cop_config['AllowModifiersOnSymbols'] &&
|
86
|
-
access_modifier_with_symbol?(node)
|
87
|
+
return if cop_config['AllowModifiersOnSymbols'] && access_modifier_with_symbol?(node)
|
87
88
|
|
88
89
|
if offense?(node)
|
89
|
-
add_offense(node
|
90
|
-
opposite_style_detected
|
91
|
-
end
|
90
|
+
add_offense(node.loc.selector) if opposite_style_detected
|
92
91
|
else
|
93
92
|
correct_style_detected
|
94
93
|
end
|
@@ -96,6 +95,14 @@ module RuboCop
|
|
96
95
|
|
97
96
|
private
|
98
97
|
|
98
|
+
def access_modifier?(node)
|
99
|
+
maybe_access_modifier?(node) && node.access_modifier?
|
100
|
+
end
|
101
|
+
|
102
|
+
def maybe_access_modifier?(node)
|
103
|
+
!node.receiver && ACCESS_MODIFIERS.include?(node.method_name)
|
104
|
+
end
|
105
|
+
|
99
106
|
def offense?(node)
|
100
107
|
(group_style? && access_modifier_is_inlined?(node)) ||
|
101
108
|
(inline_style? && access_modifier_is_not_inlined?(node))
|
@@ -117,8 +124,8 @@ module RuboCop
|
|
117
124
|
!access_modifier_is_inlined?(node)
|
118
125
|
end
|
119
126
|
|
120
|
-
def message(
|
121
|
-
access_modifier =
|
127
|
+
def message(range)
|
128
|
+
access_modifier = range.source
|
122
129
|
|
123
130
|
if group_style?
|
124
131
|
format(GROUP_STYLE_MESSAGE, access_modifier: access_modifier)
|
@@ -31,9 +31,11 @@ module RuboCop
|
|
31
31
|
# attr_reader :baz
|
32
32
|
# end
|
33
33
|
#
|
34
|
-
class AccessorGrouping <
|
34
|
+
class AccessorGrouping < Base
|
35
35
|
include ConfigurableEnforcedStyle
|
36
|
+
include RangeHelp
|
36
37
|
include VisibilityHelp
|
38
|
+
extend AutoCorrector
|
37
39
|
|
38
40
|
GROUPED_MSG = 'Group together all `%<accessor>s` attributes.'
|
39
41
|
SEPARATED_MSG = 'Use one attribute per `%<accessor>s`.'
|
@@ -50,13 +52,27 @@ module RuboCop
|
|
50
52
|
alias on_sclass on_class
|
51
53
|
alias on_module on_class
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
-
|
55
|
+
private
|
56
|
+
|
57
|
+
def check(send_node)
|
58
|
+
return if previous_line_comment?(send_node)
|
59
|
+
return unless grouped_style? && sibling_accessors(send_node).size > 1 ||
|
60
|
+
separated_style? && send_node.arguments.size > 1
|
61
|
+
|
62
|
+
message = message(send_node)
|
63
|
+
add_offense(send_node, message: message) do |corrector|
|
64
|
+
autocorrect(corrector, send_node)
|
56
65
|
end
|
57
66
|
end
|
58
67
|
|
59
|
-
|
68
|
+
def autocorrect(corrector, node)
|
69
|
+
if (preferred_accessors = preferred_accessors(node))
|
70
|
+
corrector.replace(node, preferred_accessors)
|
71
|
+
else
|
72
|
+
range = range_with_surrounding_space(range: node.loc.expression, side: :left)
|
73
|
+
corrector.remove(range)
|
74
|
+
end
|
75
|
+
end
|
60
76
|
|
61
77
|
def previous_line_comment?(node)
|
62
78
|
comment_line?(processed_source[node.first_line - 2])
|
@@ -78,16 +94,6 @@ module RuboCop
|
|
78
94
|
send_node.macro? && ACCESSOR_METHODS.include?(send_node.method_name)
|
79
95
|
end
|
80
96
|
|
81
|
-
def check(send_node)
|
82
|
-
return if previous_line_comment?(send_node)
|
83
|
-
|
84
|
-
if grouped_style? && sibling_accessors(send_node).size > 1
|
85
|
-
add_offense(send_node)
|
86
|
-
elsif separated_style? && send_node.arguments.size > 1
|
87
|
-
add_offense(send_node)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
97
|
def grouped_style?
|
92
98
|
style == :grouped
|
93
99
|
end
|
@@ -110,14 +116,10 @@ module RuboCop
|
|
110
116
|
format(msg, accessor: send_node.method_name)
|
111
117
|
end
|
112
118
|
|
113
|
-
def
|
119
|
+
def preferred_accessors(node)
|
114
120
|
if grouped_style?
|
115
121
|
accessors = sibling_accessors(node)
|
116
|
-
if node == accessors.first
|
117
|
-
group_accessors(node, accessors)
|
118
|
-
else
|
119
|
-
''
|
120
|
-
end
|
122
|
+
group_accessors(node, accessors) if node == accessors.first
|
121
123
|
else
|
122
124
|
separate_accessors(node)
|
123
125
|
end
|
@@ -22,8 +22,9 @@ module RuboCop
|
|
22
22
|
#
|
23
23
|
# # good
|
24
24
|
# alias_method :bar, :foo
|
25
|
-
class Alias <
|
25
|
+
class Alias < Base
|
26
26
|
include ConfigurableEnforcedStyle
|
27
|
+
extend AutoCorrector
|
27
28
|
|
28
29
|
MSG_ALIAS = 'Use `alias_method` instead of `alias`.'
|
29
30
|
MSG_ALIAS_METHOD = 'Use `alias` instead of `alias_method` ' \
|
@@ -36,31 +37,37 @@ module RuboCop
|
|
36
37
|
return unless style == :prefer_alias && alias_keyword_possible?(node)
|
37
38
|
|
38
39
|
msg = format(MSG_ALIAS_METHOD, current: lexical_scope_type(node))
|
39
|
-
add_offense(node
|
40
|
+
add_offense(node.loc.selector, message: msg) do |corrector|
|
41
|
+
autocorrect(corrector, node)
|
42
|
+
end
|
40
43
|
end
|
41
44
|
|
42
45
|
def on_alias(node)
|
43
46
|
return unless alias_method_possible?(node)
|
44
47
|
|
45
48
|
if scope_type(node) == :dynamic || style == :prefer_alias_method
|
46
|
-
add_offense(node
|
49
|
+
add_offense(node.loc.keyword, message: MSG_ALIAS) do |corrector|
|
50
|
+
autocorrect(corrector, node)
|
51
|
+
end
|
47
52
|
elsif node.children.none? { |arg| bareword?(arg) }
|
48
|
-
add_offense_for_args(node)
|
53
|
+
add_offense_for_args(node) do |corrector|
|
54
|
+
autocorrect(corrector, node)
|
55
|
+
end
|
49
56
|
end
|
50
57
|
end
|
51
58
|
|
52
|
-
|
59
|
+
private
|
60
|
+
|
61
|
+
def autocorrect(corrector, node)
|
53
62
|
if node.send_type?
|
54
|
-
correct_alias_method_to_alias(node)
|
63
|
+
correct_alias_method_to_alias(corrector, node)
|
55
64
|
elsif scope_type(node) == :dynamic || style == :prefer_alias_method
|
56
|
-
correct_alias_to_alias_method(node)
|
65
|
+
correct_alias_to_alias_method(corrector, node)
|
57
66
|
else
|
58
|
-
correct_alias_with_symbol_args(node)
|
67
|
+
correct_alias_with_symbol_args(corrector, node)
|
59
68
|
end
|
60
69
|
end
|
61
70
|
|
62
|
-
private
|
63
|
-
|
64
71
|
def alias_keyword_possible?(node)
|
65
72
|
scope_type(node) != :dynamic && node.arguments.all?(&:sym_type?)
|
66
73
|
end
|
@@ -70,14 +77,14 @@ module RuboCop
|
|
70
77
|
node.children.none?(&:gvar_type?)
|
71
78
|
end
|
72
79
|
|
73
|
-
def add_offense_for_args(node)
|
80
|
+
def add_offense_for_args(node, &block)
|
74
81
|
existing_args = node.children.map(&:source).join(' ')
|
75
82
|
preferred_args = node.children.map { |a| a.source[1..-1] }.join(' ')
|
76
83
|
arg_ranges = node.children.map(&:source_range)
|
77
84
|
msg = format(MSG_SYMBOL_ARGS,
|
78
85
|
prefer: preferred_args,
|
79
86
|
current: existing_args)
|
80
|
-
add_offense(
|
87
|
+
add_offense(arg_ranges.reduce(&:join), message: msg, &block)
|
81
88
|
end
|
82
89
|
|
83
90
|
# In this expression, will `self` be the same as the innermost enclosing
|
@@ -101,41 +108,39 @@ module RuboCop
|
|
101
108
|
end
|
102
109
|
|
103
110
|
def lexical_scope_type(node)
|
104
|
-
node.each_ancestor(:class, :module)
|
105
|
-
|
111
|
+
ancestor = node.each_ancestor(:class, :module).first
|
112
|
+
if ancestor.nil?
|
113
|
+
'at the top level'
|
114
|
+
elsif ancestor.class_type?
|
115
|
+
'in a class body'
|
116
|
+
else
|
117
|
+
'in a module body'
|
106
118
|
end
|
107
|
-
'at the top level'
|
108
119
|
end
|
109
120
|
|
110
121
|
def bareword?(sym_node)
|
111
122
|
!sym_node.source.start_with?(':')
|
112
123
|
end
|
113
124
|
|
114
|
-
def correct_alias_method_to_alias(send_node)
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
end
|
125
|
+
def correct_alias_method_to_alias(corrector, send_node)
|
126
|
+
new, old = *send_node.arguments
|
127
|
+
replacement = "alias #{identifier(new)} #{identifier(old)}"
|
128
|
+
|
129
|
+
corrector.replace(send_node, replacement)
|
120
130
|
end
|
121
131
|
|
122
|
-
def correct_alias_to_alias_method(node)
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
end
|
132
|
+
def correct_alias_to_alias_method(corrector, node)
|
133
|
+
replacement =
|
134
|
+
'alias_method ' \
|
135
|
+
":#{identifier(node.new_identifier)}, " \
|
136
|
+
":#{identifier(node.old_identifier)}"
|
137
|
+
|
138
|
+
corrector.replace(node, replacement)
|
130
139
|
end
|
131
140
|
|
132
|
-
def correct_alias_with_symbol_args(node)
|
133
|
-
|
134
|
-
|
135
|
-
node.new_identifier.source[1..-1])
|
136
|
-
corrector.replace(node.old_identifier,
|
137
|
-
node.old_identifier.source[1..-1])
|
138
|
-
end
|
141
|
+
def correct_alias_with_symbol_args(corrector, node)
|
142
|
+
corrector.replace(node.new_identifier, node.new_identifier.source[1..-1])
|
143
|
+
corrector.replace(node.old_identifier, node.old_identifier.source[1..-1])
|
139
144
|
end
|
140
145
|
|
141
146
|
def_node_matcher :identifier, <<~PATTERN
|
@@ -36,9 +36,10 @@ module RuboCop
|
|
36
36
|
# # good
|
37
37
|
# if foo && bar
|
38
38
|
# end
|
39
|
-
class AndOr <
|
39
|
+
class AndOr < Base
|
40
40
|
include ConfigurableEnforcedStyle
|
41
41
|
include RangeHelp
|
42
|
+
extend AutoCorrector
|
42
43
|
|
43
44
|
MSG = 'Use `%<prefer>s` instead of `%<current>s`.'
|
44
45
|
|
@@ -55,8 +56,13 @@ module RuboCop
|
|
55
56
|
alias on_until on_if
|
56
57
|
alias on_until_post on_if
|
57
58
|
|
58
|
-
|
59
|
-
|
59
|
+
private
|
60
|
+
|
61
|
+
def process_logical_operator(node)
|
62
|
+
return if node.logical_operator?
|
63
|
+
|
64
|
+
message = message(node)
|
65
|
+
add_offense(node.loc.operator, message: message) do |corrector|
|
60
66
|
node.each_child_node do |expr|
|
61
67
|
if expr.send_type?
|
62
68
|
correct_send(expr, corrector)
|
@@ -71,20 +77,12 @@ module RuboCop
|
|
71
77
|
end
|
72
78
|
end
|
73
79
|
|
74
|
-
private
|
75
|
-
|
76
80
|
def on_conditionals(node)
|
77
81
|
node.condition.each_node(*AST::Node::OPERATOR_KEYWORDS) do |operator|
|
78
82
|
process_logical_operator(operator)
|
79
83
|
end
|
80
84
|
end
|
81
85
|
|
82
|
-
def process_logical_operator(node)
|
83
|
-
return if node.logical_operator?
|
84
|
-
|
85
|
-
add_offense(node, location: :operator)
|
86
|
-
end
|
87
|
-
|
88
86
|
def message(node)
|
89
87
|
format(MSG, prefer: node.alternate_operator, current: node.operator)
|
90
88
|
end
|
@@ -17,20 +17,18 @@ module RuboCop
|
|
17
17
|
# # good
|
18
18
|
# %w(foo bar baz).join(",")
|
19
19
|
#
|
20
|
-
class ArrayJoin <
|
20
|
+
class ArrayJoin < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = 'Favor `Array#join` over `Array#*`.'
|
22
24
|
|
23
25
|
def_node_matcher :join_candidate?, '(send $array :* $str)'
|
24
26
|
|
25
27
|
def on_send(node)
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def autocorrect(node)
|
30
|
-
array, join_arg = join_candidate?(node).map(&:source)
|
28
|
+
return unless (array, join_arg = join_candidate?(node))
|
31
29
|
|
32
|
-
|
33
|
-
corrector.replace(node, "#{array}.join(#{join_arg})")
|
30
|
+
add_offense(node.loc.selector) do |corrector|
|
31
|
+
corrector.replace(node, "#{array.source}.join(#{join_arg.source})")
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
@@ -15,17 +15,17 @@ module RuboCop
|
|
15
15
|
#
|
16
16
|
# # good
|
17
17
|
# # Translates from English to Japanese
|
18
|
-
class AsciiComments <
|
18
|
+
class AsciiComments < Base
|
19
19
|
include RangeHelp
|
20
20
|
|
21
21
|
MSG = 'Use only ascii symbols in comments.'
|
22
22
|
|
23
|
-
def
|
24
|
-
processed_source.
|
23
|
+
def on_new_investigation
|
24
|
+
processed_source.comments.each do |comment|
|
25
25
|
next if comment.text.ascii_only?
|
26
26
|
next if only_allowed_non_ascii_chars?(comment.text)
|
27
27
|
|
28
|
-
add_offense(
|
28
|
+
add_offense(first_offense_range(comment))
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -14,8 +14,9 @@ module RuboCop
|
|
14
14
|
# attr_accessor :something
|
15
15
|
# attr_reader :one, :two, :three
|
16
16
|
#
|
17
|
-
class Attr <
|
17
|
+
class Attr < Base
|
18
18
|
include RangeHelp
|
19
|
+
extend AutoCorrector
|
19
20
|
|
20
21
|
MSG = 'Do not use `attr`. Use `%<replacement>s` instead.'
|
21
22
|
|
@@ -26,10 +27,15 @@ module RuboCop
|
|
26
27
|
!node.parent.class_type? &&
|
27
28
|
!class_eval?(node.parent)
|
28
29
|
|
29
|
-
|
30
|
+
message = message(node)
|
31
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
32
|
+
autocorrect(corrector, node)
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
|
-
|
36
|
+
private
|
37
|
+
|
38
|
+
def autocorrect(corrector, node)
|
33
39
|
attr_name, setter = *node.arguments
|
34
40
|
|
35
41
|
node_expr = node.source_range
|
@@ -37,14 +43,10 @@ module RuboCop
|
|
37
43
|
|
38
44
|
remove = range_between(attr_expr.end_pos, node_expr.end_pos) if setter&.boolean_type?
|
39
45
|
|
40
|
-
|
41
|
-
|
42
|
-
corrector.remove(remove) if remove
|
43
|
-
end
|
46
|
+
corrector.replace(node.loc.selector, replacement_method(node))
|
47
|
+
corrector.remove(remove) if remove
|
44
48
|
end
|
45
49
|
|
46
|
-
private
|
47
|
-
|
48
50
|
def message(node)
|
49
51
|
format(MSG, replacement: replacement_method(node))
|
50
52
|
end
|
@@ -16,7 +16,7 @@ module RuboCop
|
|
16
16
|
# File.open('file') do |f|
|
17
17
|
# # ...
|
18
18
|
# end
|
19
|
-
class AutoResourceCleanup <
|
19
|
+
class AutoResourceCleanup < Base
|
20
20
|
MSG = 'Use the block version of `%<class>s.%<method>s`.'
|
21
21
|
|
22
22
|
TARGET_METHODS = {
|
@@ -32,10 +32,7 @@ module RuboCop
|
|
32
32
|
|
33
33
|
next if cleanup?(node)
|
34
34
|
|
35
|
-
add_offense(node,
|
36
|
-
message: format(MSG,
|
37
|
-
class: target_class,
|
38
|
-
method: target_method))
|
35
|
+
add_offense(node, message: format(MSG, class: target_class, method: target_method))
|
39
36
|
end
|
40
37
|
end
|
41
38
|
|
@@ -23,8 +23,9 @@ module RuboCop
|
|
23
23
|
# %Q|He said: "#{greeting}"|
|
24
24
|
# %q/She said: 'Hi'/
|
25
25
|
#
|
26
|
-
class BarePercentLiterals <
|
26
|
+
class BarePercentLiterals < Base
|
27
27
|
include ConfigurableEnforcedStyle
|
28
|
+
extend AutoCorrector
|
28
29
|
|
29
30
|
MSG = 'Use `%%%<good>s` instead of `%%%<bad>s`.'
|
30
31
|
|
@@ -36,14 +37,6 @@ module RuboCop
|
|
36
37
|
check(node)
|
37
38
|
end
|
38
39
|
|
39
|
-
def autocorrect(node)
|
40
|
-
src = node.loc.begin.source
|
41
|
-
replacement = src.start_with?('%Q') ? '%' : '%Q'
|
42
|
-
lambda do |corrector|
|
43
|
-
corrector.replace(node.loc.begin, src.sub(/%Q?/, replacement))
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
40
|
private
|
48
41
|
|
49
42
|
def check(node)
|
@@ -68,9 +61,14 @@ module RuboCop
|
|
68
61
|
end
|
69
62
|
|
70
63
|
def add_offense_for_wrong_style(node, good, bad)
|
71
|
-
|
72
|
-
|
73
|
-
|
64
|
+
location = node.loc.begin
|
65
|
+
|
66
|
+
add_offense(location, message: format(MSG, good: good, bad: bad)) do |corrector|
|
67
|
+
source = location.source
|
68
|
+
replacement = source.start_with?('%Q') ? '%' : '%Q'
|
69
|
+
|
70
|
+
corrector.replace(location, source.sub(/%Q?/, replacement))
|
71
|
+
end
|
74
72
|
end
|
75
73
|
end
|
76
74
|
end
|