rubocop 0.87.1 → 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 +32 -0
- data/config/default.yml +153 -22
- data/lib/rubocop.rb +22 -4
- data/lib/rubocop/cli.rb +2 -2
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +3 -3
- 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 +22 -9
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_store.rb +4 -0
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +14 -6
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/cop.rb +1 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
- 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 +38 -12
- 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/empty_lines_around_access_modifier.rb +1 -0
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -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_block_layout.rb +16 -5
- 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_block_parameters.rb +3 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +3 -2
- 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/disjunctive_assignment_in_constructor.rb +8 -2
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
- 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 +5 -4
- 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 +14 -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 +14 -20
- 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 +82 -11
- 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 +39 -10
- 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 +29 -20
- 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_coercion.rb +63 -0
- 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 +5 -7
- 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 +14 -18
- 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 +220 -0
- 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 +6 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +13 -4
- 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 +7 -9
- data/lib/rubocop/cop/style/float_division.rb +8 -11
- 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 +10 -12
- 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 +69 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
- 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 +18 -40
- 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 +11 -21
- 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 +7 -4
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- 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_file_extension_in_require.rb +50 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
- 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/stabby_lambda_parentheses.rb +3 -2
- 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 +9 -32
- 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 +7 -5
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/file_finder.rb +12 -12
- 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 +17 -17
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/result_cache.rb +12 -8
- data/lib/rubocop/rspec/expect_offense.rb +31 -5
- data/lib/rubocop/rspec/shared_contexts.rb +13 -14
- data/lib/rubocop/runner.rb +6 -7
- data/lib/rubocop/target_finder.rb +13 -10
- data/lib/rubocop/version.rb +2 -2
- metadata +28 -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
@@ -30,11 +30,11 @@ module RuboCop
|
|
30
30
|
# some_var = 1
|
31
31
|
# do_something(some_var)
|
32
32
|
# end
|
33
|
-
class UselessAssignment <
|
33
|
+
class UselessAssignment < Base
|
34
34
|
MSG = 'Useless assignment to variable - `%<variable>s`.'
|
35
35
|
|
36
|
-
def
|
37
|
-
|
36
|
+
def self.joining_forces
|
37
|
+
VariableForce
|
38
38
|
end
|
39
39
|
|
40
40
|
def after_leaving_scope(scope, _variable_table)
|
@@ -57,7 +57,7 @@ module RuboCop
|
|
57
57
|
assignment.node.loc.name
|
58
58
|
end
|
59
59
|
|
60
|
-
add_offense(
|
60
|
+
add_offense(location, message: message)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -29,24 +29,15 @@ module RuboCop
|
|
29
29
|
# else
|
30
30
|
# do_something_else
|
31
31
|
# end
|
32
|
-
class UselessElseWithoutRescue <
|
33
|
-
include ParserDiagnostic
|
34
|
-
|
32
|
+
class UselessElseWithoutRescue < Base
|
35
33
|
MSG = '`else` without `rescue` is useless.'
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
diagnostic.reason == :useless_else
|
41
|
-
end
|
42
|
-
|
43
|
-
def find_offense_node_by(diagnostic)
|
44
|
-
# TODO: When implementing auto-correction, this method should return
|
45
|
-
# an offense node passed as first argument of `add_offense` method.
|
46
|
-
end
|
35
|
+
def on_new_investigation
|
36
|
+
processed_source.diagnostics.each do |diagnostic|
|
37
|
+
next unless diagnostic.reason == :useless_else
|
47
38
|
|
48
|
-
|
49
|
-
|
39
|
+
add_offense(diagnostic.location, severity: diagnostic.level)
|
40
|
+
end
|
50
41
|
end
|
51
42
|
end
|
52
43
|
end
|
@@ -28,7 +28,7 @@ module RuboCop
|
|
28
28
|
# x.attr = 5
|
29
29
|
# x
|
30
30
|
# end
|
31
|
-
class UselessSetterCall <
|
31
|
+
class UselessSetterCall < Base
|
32
32
|
MSG = 'Useless setter call to local variable `%<variable>s`.'
|
33
33
|
ASSIGNMENT_TYPES = %i[lvasgn ivasgn cvasgn gvasgn].freeze
|
34
34
|
|
@@ -43,11 +43,9 @@ module RuboCop
|
|
43
43
|
variable_name, = *receiver
|
44
44
|
return unless tracker.contain_local_object?(variable_name)
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
message: format(MSG, variable: receiver.loc.name.source)
|
50
|
-
)
|
46
|
+
loc_name = receiver.loc.name
|
47
|
+
|
48
|
+
add_offense(loc_name, message: format(MSG, variable: loc_name.source))
|
51
49
|
end
|
52
50
|
alias on_defs on_def
|
53
51
|
|
@@ -40,7 +40,7 @@ module RuboCop
|
|
40
40
|
# some_array.sort!
|
41
41
|
# do_something(some_array)
|
42
42
|
# end
|
43
|
-
class Void <
|
43
|
+
class Void < Base
|
44
44
|
OP_MSG = 'Operator `%<op>s` used in void context.'
|
45
45
|
VAR_MSG = 'Variable `%<var>s` used in void context.'
|
46
46
|
LIT_MSG = 'Literal `%<lit>s` used in void context.'
|
@@ -97,17 +97,13 @@ module RuboCop
|
|
97
97
|
def check_void_op(node)
|
98
98
|
return unless node.send_type? && OPERATORS.include?(node.method_name)
|
99
99
|
|
100
|
-
add_offense(node,
|
101
|
-
location: :selector,
|
102
|
-
message: format(OP_MSG, op: node.method_name))
|
100
|
+
add_offense(node.loc.selector, message: format(OP_MSG, op: node.method_name))
|
103
101
|
end
|
104
102
|
|
105
103
|
def check_var(node)
|
106
104
|
return unless node.variable? || node.const_type?
|
107
105
|
|
108
|
-
add_offense(node,
|
109
|
-
location: :name,
|
110
|
-
message: format(VAR_MSG, var: node.loc.name.source))
|
106
|
+
add_offense(node.loc.name, message: format(VAR_MSG, var: node.loc.name.source))
|
111
107
|
end
|
112
108
|
|
113
109
|
def check_literal(node)
|
@@ -7,7 +7,7 @@ module RuboCop
|
|
7
7
|
# configured maximum. The ABC size is based on assignments, branches
|
8
8
|
# (method calls), and conditions. See http://c2.com/cgi/wiki?AbcMetric
|
9
9
|
# and https://en.wikipedia.org/wiki/ABC_Software_Metric.
|
10
|
-
class AbcSize <
|
10
|
+
class AbcSize < Base
|
11
11
|
include MethodComplexity
|
12
12
|
|
13
13
|
MSG = 'Assignment Branch Condition size for %<method>s is too high. ' \
|
@@ -11,7 +11,7 @@ module RuboCop
|
|
11
11
|
# towards the nesting level. Set to `true` to count blocks as well.
|
12
12
|
#
|
13
13
|
# The maximum level of nesting allowed is configurable.
|
14
|
-
class BlockNesting <
|
14
|
+
class BlockNesting < Base
|
15
15
|
include ConfigurableMax
|
16
16
|
|
17
17
|
NESTING_BLOCKS = %i[
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
until until_post for resbody
|
20
20
|
].freeze
|
21
21
|
|
22
|
-
def
|
22
|
+
def on_new_investigation
|
23
23
|
return if processed_source.blank?
|
24
24
|
|
25
25
|
max = cop_config['Max']
|
@@ -29,7 +29,7 @@ module RuboCop
|
|
29
29
|
#
|
30
30
|
# self
|
31
31
|
# end # total: 6
|
32
|
-
class CyclomaticComplexity <
|
32
|
+
class CyclomaticComplexity < Base
|
33
33
|
include MethodComplexity
|
34
34
|
include Utils::IteratingBlock
|
35
35
|
|
@@ -42,6 +42,7 @@ module RuboCop
|
|
42
42
|
|
43
43
|
def complexity_score_for(node)
|
44
44
|
return 0 if iterating_block?(node) == false
|
45
|
+
return 0 if node.csend_type? && discount_for_repeated_csend?(node)
|
45
46
|
|
46
47
|
1
|
47
48
|
end
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
6
6
|
# This cop checks for methods with too many parameters.
|
7
7
|
# The maximum number of parameters is configurable.
|
8
8
|
# Keyword arguments can optionally be excluded from the total count.
|
9
|
-
class ParameterLists <
|
9
|
+
class ParameterLists < Base
|
10
10
|
include ConfigurableMax
|
11
11
|
|
12
12
|
MSG = 'Avoid parameter lists longer than %<max>d parameters. ' \
|
@@ -18,7 +18,7 @@ module RuboCop
|
|
18
18
|
|
19
19
|
return if argument_to_lambda_or_proc?(node)
|
20
20
|
|
21
|
-
add_offense(node) do
|
21
|
+
add_offense(node, message: format(MSG, max: max_params, count: args_count(node))) do
|
22
22
|
self.max = count
|
23
23
|
end
|
24
24
|
end
|
@@ -29,10 +29,6 @@ module RuboCop
|
|
29
29
|
^lambda_or_proc?
|
30
30
|
PATTERN
|
31
31
|
|
32
|
-
def message(node)
|
33
|
-
format(MSG, max: max_params, count: args_count(node))
|
34
|
-
end
|
35
|
-
|
36
32
|
def args_count(node)
|
37
33
|
if count_keyword_args?
|
38
34
|
node.children.size
|
@@ -26,13 +26,11 @@ module RuboCop
|
|
26
26
|
# do_something until a && b # 2
|
27
27
|
# end # ===
|
28
28
|
# end # 7 complexity points
|
29
|
-
class PerceivedComplexity <
|
30
|
-
include MethodComplexity
|
31
|
-
|
29
|
+
class PerceivedComplexity < CyclomaticComplexity
|
32
30
|
MSG = 'Perceived complexity for %<method>s is too high. ' \
|
33
31
|
'[%<complexity>d/%<max>d]'
|
34
|
-
|
35
|
-
|
32
|
+
|
33
|
+
COUNTED_NODES = (CyclomaticComplexity::COUNTED_NODES - [:when] + [:case]).freeze
|
36
34
|
|
37
35
|
private
|
38
36
|
|
@@ -42,17 +40,18 @@ module RuboCop
|
|
42
40
|
# If cond is nil, that means each when has an expression that
|
43
41
|
# evaluates to true or false. It's just an alternative to
|
44
42
|
# if/elsif/elsif... so the when nodes count.
|
43
|
+
nb_branches = node.when_branches.length + (node.else_branch ? 1 : 0)
|
45
44
|
if node.condition.nil?
|
46
|
-
|
45
|
+
nb_branches
|
47
46
|
else
|
48
47
|
# Otherwise, the case node gets 0.8 complexity points and each
|
49
48
|
# when gets 0.2.
|
50
|
-
(0.8 + 0.2 *
|
49
|
+
(0.8 + 0.2 * nb_branches).round
|
51
50
|
end
|
52
51
|
when :if
|
53
52
|
node.else? && !node.elsif? ? 2 : 1
|
54
53
|
else
|
55
|
-
|
54
|
+
super
|
56
55
|
end
|
57
56
|
end
|
58
57
|
end
|
@@ -11,32 +11,39 @@ module RuboCop
|
|
11
11
|
# We separate the *calculator* from the *cop* so that the calculation,
|
12
12
|
# the formula itself, is easier to test.
|
13
13
|
class AbcSizeCalculator
|
14
|
+
include IteratingBlock
|
15
|
+
include RepeatedCsendDiscount
|
16
|
+
|
14
17
|
# > Branch -- an explicit forward program branch out of scope -- a
|
15
18
|
# > function call, class method call ..
|
16
19
|
# > http://c2.com/cgi/wiki?AbcMetric
|
17
|
-
BRANCH_NODES = %i[send csend].freeze
|
20
|
+
BRANCH_NODES = %i[send csend yield].freeze
|
18
21
|
|
19
22
|
# > Condition -- a logical/Boolean test, == != <= >= < > else case
|
20
23
|
# > default try catch ? and unary conditionals.
|
21
24
|
# > http://c2.com/cgi/wiki?AbcMetric
|
22
|
-
CONDITION_NODES =
|
25
|
+
CONDITION_NODES = CyclomaticComplexity::COUNTED_NODES.freeze
|
23
26
|
|
24
27
|
def self.calculate(node)
|
25
28
|
new(node).calculate
|
26
29
|
end
|
27
30
|
|
31
|
+
# TODO: move to rubocop-ast
|
32
|
+
ARGUMENT_TYPES = %i[arg optarg restarg kwarg kwoptarg kwrestarg blockarg].freeze
|
33
|
+
|
28
34
|
def initialize(node)
|
29
35
|
@assignment = 0
|
30
36
|
@branch = 0
|
31
37
|
@condition = 0
|
32
38
|
@node = node
|
39
|
+
reset_repeated_csend
|
33
40
|
end
|
34
41
|
|
35
42
|
def calculate
|
36
43
|
@node.each_node do |child|
|
37
|
-
if
|
38
|
-
|
39
|
-
|
44
|
+
@assignment += 1 if assignment?(child)
|
45
|
+
|
46
|
+
if branch?(child)
|
40
47
|
evaluate_branch_nodes(child)
|
41
48
|
elsif condition?(child)
|
42
49
|
evaluate_condition_node(child)
|
@@ -54,6 +61,7 @@ module RuboCop
|
|
54
61
|
@condition += 1
|
55
62
|
else
|
56
63
|
@branch += 1
|
64
|
+
@condition += 1 if node.csend_type? && !discount_for_repeated_csend?(node)
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
@@ -70,11 +78,46 @@ module RuboCop
|
|
70
78
|
|
71
79
|
private
|
72
80
|
|
81
|
+
def assignment?(node)
|
82
|
+
node.for_type? ||
|
83
|
+
node.op_asgn_type? ||
|
84
|
+
(node.respond_to?(:setter_method?) && node.setter_method?) ||
|
85
|
+
(simple_assignment?(node) && capturing_variable?(node.children.first))
|
86
|
+
end
|
87
|
+
|
88
|
+
def simple_assignment?(node)
|
89
|
+
return false if node.masgn_type?
|
90
|
+
|
91
|
+
if node.equals_asgn?
|
92
|
+
reset_on_lvasgn(node) if node.lvasgn_type?
|
93
|
+
return true
|
94
|
+
end
|
95
|
+
|
96
|
+
argument?(node)
|
97
|
+
end
|
98
|
+
|
99
|
+
def capturing_variable?(name)
|
100
|
+
name && !/^_/.match?(name)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Returns true for nodes which otherwise would be counted
|
104
|
+
# as one too many assignment
|
105
|
+
def assignment_doubled_in_ast?(node)
|
106
|
+
node.masgn_type? || node.or_asgn_type? || node.and_asgn_type?
|
107
|
+
end
|
108
|
+
|
73
109
|
def branch?(node)
|
74
110
|
BRANCH_NODES.include?(node.type)
|
75
111
|
end
|
76
112
|
|
113
|
+
# TODO: move to rubocop-ast
|
114
|
+
def argument?(node)
|
115
|
+
ARGUMENT_TYPES.include?(node.type)
|
116
|
+
end
|
117
|
+
|
77
118
|
def condition?(node)
|
119
|
+
return false if iterating_block?(node) == false
|
120
|
+
|
78
121
|
CONDITION_NODES.include?(node.type)
|
79
122
|
end
|
80
123
|
end
|
@@ -10,10 +10,11 @@ module RuboCop
|
|
10
10
|
include Util
|
11
11
|
|
12
12
|
FOLDABLE_TYPES = %i[array hash heredoc].freeze
|
13
|
-
|
13
|
+
CLASSLIKE_TYPES = %i[class module].freeze
|
14
14
|
|
15
|
-
def initialize(node, count_comments: false, foldable_types: [])
|
15
|
+
def initialize(node, processed_source, count_comments: false, foldable_types: [])
|
16
16
|
@node = node
|
17
|
+
@processed_source = processed_source
|
17
18
|
@count_comments = count_comments
|
18
19
|
@foldable_checks = build_foldable_checks(foldable_types)
|
19
20
|
@foldable_types = normalize_foldable_types(foldable_types)
|
@@ -21,13 +22,11 @@ module RuboCop
|
|
21
22
|
|
22
23
|
def calculate
|
23
24
|
length = code_length(@node)
|
25
|
+
return length if @foldable_types.empty?
|
24
26
|
|
25
|
-
each_top_level_descendant(@node,
|
26
|
-
|
27
|
-
|
28
|
-
if classlike_node?(descendant)
|
29
|
-
length -= (descendant_length + 2)
|
30
|
-
elsif foldable_node?(descendant)
|
27
|
+
each_top_level_descendant(@node, @foldable_types) do |descendant|
|
28
|
+
if foldable_node?(descendant)
|
29
|
+
descendant_length = code_length(descendant)
|
31
30
|
length = length - descendant_length + 1
|
32
31
|
end
|
33
32
|
end
|
@@ -37,14 +36,6 @@ module RuboCop
|
|
37
36
|
|
38
37
|
private
|
39
38
|
|
40
|
-
def_node_matcher :class_definition?, <<~PATTERN
|
41
|
-
(casgn nil? _ (block (send (const nil? :Class) :new) ...))
|
42
|
-
PATTERN
|
43
|
-
|
44
|
-
def_node_matcher :module_definition?, <<~PATTERN
|
45
|
-
(casgn nil? _ (block (send (const nil? :Module) :new) ...))
|
46
|
-
PATTERN
|
47
|
-
|
48
39
|
def build_foldable_checks(types)
|
49
40
|
types.map do |type|
|
50
41
|
case type
|
@@ -67,35 +58,72 @@ module RuboCop
|
|
67
58
|
end
|
68
59
|
|
69
60
|
def code_length(node)
|
70
|
-
|
61
|
+
if classlike_node?(node)
|
62
|
+
classlike_code_length(node)
|
63
|
+
elsif heredoc_node?(node)
|
64
|
+
heredoc_length(node)
|
65
|
+
else
|
66
|
+
body = extract_body(node)
|
67
|
+
return 0 unless body
|
71
68
|
|
72
|
-
|
73
|
-
|
74
|
-
lines.count { |line| !irrelevant_line?(line) }
|
69
|
+
body.source.each_line.count { |line| !irrelevant_line?(line) }
|
70
|
+
end
|
75
71
|
end
|
76
72
|
|
77
73
|
def heredoc_node?(node)
|
78
74
|
node.respond_to?(:heredoc?) && node.heredoc?
|
79
75
|
end
|
80
76
|
|
77
|
+
def classlike_code_length(node)
|
78
|
+
return 0 if namespace_module?(node)
|
79
|
+
|
80
|
+
body_line_numbers = line_range(node).to_a[1...-1]
|
81
|
+
|
82
|
+
target_line_numbers = body_line_numbers -
|
83
|
+
line_numbers_of_inner_nodes(node, :module, :class)
|
84
|
+
|
85
|
+
target_line_numbers.reduce(0) do |length, line_number|
|
86
|
+
source_line = @processed_source[line_number]
|
87
|
+
next length if irrelevant_line?(source_line)
|
88
|
+
|
89
|
+
length + 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def namespace_module?(node)
|
94
|
+
classlike_node?(node.body)
|
95
|
+
end
|
96
|
+
|
97
|
+
def line_numbers_of_inner_nodes(node, *types)
|
98
|
+
line_numbers = Set.new
|
99
|
+
|
100
|
+
node.each_descendant(*types) do |inner_node|
|
101
|
+
line_range = line_range(inner_node)
|
102
|
+
line_numbers.merge(line_range)
|
103
|
+
end
|
104
|
+
|
105
|
+
line_numbers.to_a
|
106
|
+
end
|
107
|
+
|
81
108
|
def heredoc_length(node)
|
82
109
|
lines = node.loc.heredoc_body.source.lines
|
83
110
|
lines.count { |line| !irrelevant_line?(line) } + 2
|
84
111
|
end
|
85
112
|
|
86
|
-
def each_top_level_descendant(node,
|
113
|
+
def each_top_level_descendant(node, types, &block)
|
87
114
|
node.each_child_node do |child|
|
115
|
+
next if classlike_node?(child)
|
116
|
+
|
88
117
|
if types.include?(child.type)
|
89
118
|
yield child
|
90
119
|
else
|
91
|
-
each_top_level_descendant(child,
|
120
|
+
each_top_level_descendant(child, types, &block)
|
92
121
|
end
|
93
122
|
end
|
94
123
|
end
|
95
124
|
|
96
125
|
def classlike_node?(node)
|
97
|
-
|
98
|
-
(node.casgn_type? && (class_definition?(node) || module_definition?(node)))
|
126
|
+
CLASSLIKE_TYPES.include?(node.type)
|
99
127
|
end
|
100
128
|
|
101
129
|
def foldable_node?(node)
|