rubocop 1.10.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +15 -14
- data/assets/output.html.erb +1 -1
- data/config/default.yml +60 -3
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +6 -1
- data/lib/rubocop/cached_data.rb +1 -3
- data/lib/rubocop/cli.rb +4 -6
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
- data/lib/rubocop/cli/command/show_cops.rb +1 -4
- data/lib/rubocop/cli/command/suggest_extensions.rb +3 -2
- data/lib/rubocop/comment_config.rb +45 -101
- data/lib/rubocop/config.rb +11 -26
- data/lib/rubocop/config_loader.rb +5 -11
- data/lib/rubocop/config_loader_resolver.rb +22 -14
- data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
- data/lib/rubocop/config_store.rb +1 -2
- data/lib/rubocop/config_validator.rb +5 -10
- data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
- data/lib/rubocop/cop/badge.rb +1 -2
- data/lib/rubocop/cop/base.rb +8 -6
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -3
- data/lib/rubocop/cop/bundler/gem_comment.rb +43 -10
- data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -4
- data/lib/rubocop/cop/commissioner.rb +2 -8
- data/lib/rubocop/cop/cop.rb +4 -18
- data/lib/rubocop/cop/corrector.rb +1 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +6 -12
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
- data/lib/rubocop/cop/gemspec/date_assignment.rb +1 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +3 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +2 -4
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +2 -0
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +2 -0
- data/lib/rubocop/cop/generator.rb +3 -6
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
- data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -4
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +3 -5
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +3 -3
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +3 -0
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +5 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +3 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
- data/lib/rubocop/cop/layout/argument_alignment.rb +8 -9
- data/lib/rubocop/cop/layout/array_alignment.rb +7 -6
- data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
- data/lib/rubocop/cop/layout/block_alignment.rb +8 -19
- data/lib/rubocop/cop/layout/block_end_newline.rb +4 -8
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/class_structure.rb +5 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
- data/lib/rubocop/cop/layout/comment_indentation.rb +17 -21
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
- data/lib/rubocop/cop/layout/dot_position.rb +1 -3
- data/lib/rubocop/cop/layout/else_alignment.rb +10 -9
- data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +22 -8
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +5 -9
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +11 -5
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +10 -8
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +24 -20
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +6 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
- data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +25 -30
- data/lib/rubocop/cop/layout/indentation_width.rb +21 -11
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
- data/lib/rubocop/cop/layout/line_length.rb +4 -15
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +22 -15
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +10 -5
- data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
- data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -6
- data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +2 -3
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +6 -11
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
- data/lib/rubocop/cop/legacy/corrector.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +2 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +2 -2
- data/lib/rubocop/cop/lint/debugger.rb +3 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +79 -41
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +3 -5
- data/lib/rubocop/cop/lint/duplicate_branch.rb +2 -3
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +6 -7
- data/lib/rubocop/cop/lint/duplicate_require.rb +1 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/else_layout.rb +1 -3
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
- data/lib/rubocop/cop/lint/empty_file.rb +1 -3
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +4 -6
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +1 -0
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +4 -7
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
- data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
- data/lib/rubocop/cop/lint/loop.rb +1 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
- data/lib/rubocop/cop/lint/missing_super.rb +1 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
- data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +4 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +8 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +13 -5
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
- data/lib/rubocop/cop/lint/raise_exception.rb +3 -2
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +9 -22
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +2 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +5 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -4
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -4
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
- data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +2 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -7
- data/lib/rubocop/cop/lint/shadowed_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -0
- data/lib/rubocop/cop/lint/struct_new_override.rb +2 -2
- data/lib/rubocop/cop/lint/suppressed_exception.rb +44 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +91 -6
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +3 -0
- data/lib/rubocop/cop/lint/to_json.rb +1 -2
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
- data/lib/rubocop/cop/lint/unified_integer.rb +1 -0
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +5 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +3 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +15 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
- data/lib/rubocop/cop/lint/unused_method_argument.rb +2 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
- data/lib/rubocop/cop/lint/useless_setter_call.rb +2 -3
- data/lib/rubocop/cop/lint/useless_times.rb +3 -0
- data/lib/rubocop/cop/lint/void.rb +4 -11
- data/lib/rubocop/cop/message_annotator.rb +1 -3
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/module_length.rb +3 -6
- data/lib/rubocop/cop/metrics/parameter_lists.rb +3 -5
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +6 -4
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +4 -7
- data/lib/rubocop/cop/migration/department_name.rb +3 -7
- data/lib/rubocop/cop/mixin/alignment.rb +12 -7
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +1 -3
- data/lib/rubocop/cop/mixin/comments_help.rb +5 -1
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
- data/lib/rubocop/cop/mixin/def_node.rb +3 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +3 -6
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +6 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +3 -9
- data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -22
- data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +13 -10
- data/lib/rubocop/cop/mixin/match_range.rb +2 -5
- data/lib/rubocop/cop/mixin/method_complexity.rb +2 -3
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +11 -40
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/negative_conditional.rb +4 -2
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
- data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +4 -7
- data/lib/rubocop/cop/mixin/range_help.rb +10 -13
- data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
- data/lib/rubocop/cop/mixin/safe_assignment.rb +6 -2
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
- data/lib/rubocop/cop/mixin/visibility_help.rb +1 -0
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -0
- data/lib/rubocop/cop/naming/file_name.rb +7 -16
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +8 -3
- data/lib/rubocop/cop/naming/method_name.rb +4 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -0
- data/lib/rubocop/cop/offense.rb +3 -8
- data/lib/rubocop/cop/registry.rb +12 -11
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +4 -5
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +6 -12
- data/lib/rubocop/cop/style/and_or.rb +3 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +4 -3
- data/lib/rubocop/cop/style/array_coercion.rb +2 -0
- data/lib/rubocop/cop/style/array_join.rb +1 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
- data/lib/rubocop/cop/style/attr.rb +2 -3
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +59 -71
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
- data/lib/rubocop/cop/style/case_equality.rb +2 -1
- data/lib/rubocop/cop/style/case_like_if.rb +16 -6
- data/lib/rubocop/cop/style/character_literal.rb +2 -4
- data/lib/rubocop/cop/style/class_and_module_children.rb +6 -9
- data/lib/rubocop/cop/style/class_equality_comparison.rb +3 -0
- data/lib/rubocop/cop/style/class_methods.rb +1 -3
- data/lib/rubocop/cop/style/collection_compact.rb +3 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +2 -3
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +4 -9
- data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -13
- data/lib/rubocop/cop/style/conditional_assignment.rb +12 -24
- data/lib/rubocop/cop/style/constant_visibility.rb +1 -0
- data/lib/rubocop/cop/style/copyright.rb +3 -6
- data/lib/rubocop/cop/style/date_time.rb +5 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/dir.rb +1 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +30 -3
- data/lib/rubocop/cop/style/documentation_method.rb +1 -0
- data/lib/rubocop/cop/style/double_negation.rb +1 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +2 -2
- data/lib/rubocop/cop/style/each_with_object.rb +1 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
- data/lib/rubocop/cop/style/empty_else.rb +3 -9
- data/lib/rubocop/cop/style/empty_literal.rb +13 -8
- data/lib/rubocop/cop/style/empty_method.rb +3 -7
- data/lib/rubocop/cop/style/end_block.rb +1 -2
- data/lib/rubocop/cop/style/endless_method.rb +2 -3
- data/lib/rubocop/cop/style/eval_with_location.rb +5 -5
- data/lib/rubocop/cop/style/even_odd.rb +1 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -4
- data/lib/rubocop/cop/style/float_division.rb +4 -0
- data/lib/rubocop/cop/style/format_string.rb +2 -0
- data/lib/rubocop/cop/style/format_string_token.rb +2 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -11
- data/lib/rubocop/cop/style/global_std_stream.rb +1 -0
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +57 -5
- data/lib/rubocop/cop/style/hash_each_methods.rb +2 -2
- data/lib/rubocop/cop/style/hash_except.rb +1 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +2 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +20 -24
- data/lib/rubocop/cop/style/hash_transform_keys.rb +4 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +4 -0
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -0
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +5 -7
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/lambda.rb +2 -4
- data/lib/rubocop/cop/style/lambda_call.rb +1 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +47 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +26 -16
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/min_max.rb +2 -2
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
- data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
- data/lib/rubocop/cop/style/mixin_usage.rb +3 -2
- data/lib/rubocop/cop/style/module_function.rb +8 -6
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +11 -6
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
- data/lib/rubocop/cop/style/multiple_comparison.rb +22 -5
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -10
- data/lib/rubocop/cop/style/negated_if.rb +1 -2
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +24 -2
- data/lib/rubocop/cop/style/negated_unless.rb +1 -2
- data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
- data/lib/rubocop/cop/style/next.rb +4 -9
- data/lib/rubocop/cop/style/nil_comparison.rb +3 -0
- data/lib/rubocop/cop/style/nil_lambda.rb +1 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +9 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
- data/lib/rubocop/cop/style/option_hash.rb +2 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
- data/lib/rubocop/cop/style/or_assignment.rb +4 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +12 -9
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
- data/lib/rubocop/cop/style/proc.rb +2 -2
- data/lib/rubocop/cop/style/raise_args.rb +4 -8
- data/lib/rubocop/cop/style/random_with_offset.rb +8 -8
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
- data/lib/rubocop/cop/style/redundant_assignment.rb +2 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +47 -7
- data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +5 -6
- data/lib/rubocop/cop/style/redundant_exception.rb +5 -6
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +2 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +2 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -20
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
- data/lib/rubocop/cop/style/redundant_return.rb +6 -4
- data/lib/rubocop/cop/style/redundant_self.rb +9 -9
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +4 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +3 -5
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +21 -14
- data/lib/rubocop/cop/style/rescue_standard_error.rb +5 -7
- data/lib/rubocop/cop/style/return_nil.rb +7 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +12 -21
- data/lib/rubocop/cop/style/sample.rb +1 -0
- data/lib/rubocop/cop/style/send.rb +1 -2
- data/lib/rubocop/cop/style/signal_exception.rb +6 -7
- data/lib/rubocop/cop/style/single_argument_dig.rb +2 -2
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +21 -4
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -0
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +31 -7
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +3 -6
- data/lib/rubocop/cop/style/string_chars.rb +39 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +9 -10
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -0
- data/lib/rubocop/cop/style/string_literals.rb +2 -5
- data/lib/rubocop/cop/style/strip.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +11 -0
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +29 -10
- data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +6 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +3 -6
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
- data/lib/rubocop/cop/style/trivial_accessors.rb +3 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
- data/lib/rubocop/cop/style/unpack_first.rb +1 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -3
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
- data/lib/rubocop/cop/style/word_array.rb +1 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -11
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -2
- data/lib/rubocop/cop/team.rb +2 -5
- data/lib/rubocop/cop/util.rb +8 -11
- data/lib/rubocop/cop/utils/format_string.rb +1 -3
- data/lib/rubocop/cop/variable_force.rb +6 -15
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
- data/lib/rubocop/cop/variable_force/branch.rb +16 -2
- data/lib/rubocop/cop/variable_force/reference.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +4 -8
- data/lib/rubocop/cop/variable_force/variable.rb +2 -4
- data/lib/rubocop/cops_documentation_generator.rb +7 -21
- data/lib/rubocop/directive_comment.rb +69 -9
- data/lib/rubocop/ext/regexp_parser.rb +3 -6
- data/lib/rubocop/file_finder.rb +1 -3
- data/lib/rubocop/formatter/clang_style_formatter.rb +4 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
- data/lib/rubocop/formatter/html_formatter.rb +4 -10
- data/lib/rubocop/formatter/json_formatter.rb +1 -5
- data/lib/rubocop/formatter/junit_formatter.rb +3 -9
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/formatter/tap_formatter.rb +4 -2
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/name_similarity.rb +1 -1
- data/lib/rubocop/options.rb +27 -41
- data/lib/rubocop/path_util.rb +1 -3
- data/lib/rubocop/rake_task.rb +3 -0
- data/lib/rubocop/remote_config.rb +4 -7
- data/lib/rubocop/result_cache.rb +5 -12
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -9
- data/lib/rubocop/rspec/shared_contexts.rb +8 -15
- data/lib/rubocop/runner.rb +7 -14
- data/lib/rubocop/target_finder.rb +19 -16
- data/lib/rubocop/target_ruby.rb +25 -21
- data/lib/rubocop/version.rb +1 -1
- metadata +18 -11
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -26,10 +26,7 @@ module RuboCop
|
|
26
26
|
registry = Cop::Registry.global
|
27
27
|
show_all = @options[:show_cops].empty?
|
28
28
|
|
29
|
-
if show_all
|
30
|
-
puts "# Available cops (#{registry.length}) " \
|
31
|
-
"+ config for #{Dir.pwd}: "
|
32
|
-
end
|
29
|
+
puts "# Available cops (#{registry.length}) + config for #{Dir.pwd}: " if show_all
|
33
30
|
|
34
31
|
registry.departments.sort!.each do |department|
|
35
32
|
print_cops_of_department(registry, department, show_all)
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
'RuboCop extension libraries might be helpful:'
|
23
23
|
|
24
24
|
extensions.sort.each do |extension|
|
25
|
-
puts " * #{extension} (
|
25
|
+
puts " * #{extension} (https://github.com/rubocop/#{extension})"
|
26
26
|
end
|
27
27
|
|
28
28
|
puts
|
@@ -43,7 +43,8 @@ module RuboCop
|
|
43
43
|
# 2. When given RuboCop options that it doesn't make sense for
|
44
44
|
# 3. For all formatters except specified in `INCLUDED_FORMATTERS'`
|
45
45
|
ENV['CI'] ||
|
46
|
-
@options[:only] || @options[:debug] || @options[:list_target_files] ||
|
46
|
+
@options[:only] || @options[:debug] || @options[:list_target_files] ||
|
47
|
+
@options[:out] || @options[:stdin] ||
|
47
48
|
!INCLUDED_FORMATTERS.include?(current_formatter)
|
48
49
|
end
|
49
50
|
|
@@ -4,22 +4,6 @@ module RuboCop
|
|
4
4
|
# This class parses the special `rubocop:disable` comments in a source
|
5
5
|
# and provides a way to check if each cop is enabled at arbitrary line.
|
6
6
|
class CommentConfig
|
7
|
-
# @api private
|
8
|
-
REDUNDANT_DISABLE = 'Lint/RedundantCopDisableDirective'
|
9
|
-
|
10
|
-
# @api private
|
11
|
-
COP_NAME_PATTERN = '([A-Z]\w+/)*(?:[A-Z]\w+)'
|
12
|
-
# @api private
|
13
|
-
COP_NAMES_PATTERN = "(?:#{COP_NAME_PATTERN} , )*#{COP_NAME_PATTERN}"
|
14
|
-
# @api private
|
15
|
-
COPS_PATTERN = "(all|#{COP_NAMES_PATTERN})"
|
16
|
-
|
17
|
-
# @api private
|
18
|
-
COMMENT_DIRECTIVE_REGEXP = Regexp.new(
|
19
|
-
"# rubocop : ((?:disable|enable|todo))\\b #{COPS_PATTERN}"
|
20
|
-
.gsub(' ', '\s*')
|
21
|
-
)
|
22
|
-
|
23
7
|
CopAnalysis = Struct.new(:line_ranges, :start_line_number)
|
24
8
|
|
25
9
|
attr_reader :processed_source
|
@@ -41,28 +25,23 @@ module RuboCop
|
|
41
25
|
end
|
42
26
|
|
43
27
|
def extra_enabled_comments
|
44
|
-
extra_enabled_comments_with_names(
|
45
|
-
extras: Hash.new { |h, k| h[k] = [] },
|
46
|
-
names: Hash.new(0)
|
47
|
-
)
|
28
|
+
extra_enabled_comments_with_names(extras: Hash.new { |h, k| h[k] = [] }, names: Hash.new(0))
|
48
29
|
end
|
49
30
|
|
50
31
|
def comment_only_line?(line_number)
|
51
|
-
non_comment_token_line_numbers.none?
|
52
|
-
non_comment_line_number == line_number
|
53
|
-
end
|
32
|
+
non_comment_token_line_numbers.none?(line_number)
|
54
33
|
end
|
55
34
|
|
56
35
|
private
|
57
36
|
|
58
37
|
def extra_enabled_comments_with_names(extras:, names:)
|
59
|
-
each_directive do |
|
60
|
-
next unless comment_only_line?(
|
38
|
+
each_directive do |directive|
|
39
|
+
next unless comment_only_line?(directive.line_number)
|
61
40
|
|
62
|
-
if
|
63
|
-
handle_enable_all(names, extras
|
41
|
+
if directive.enabled_all?
|
42
|
+
handle_enable_all(directive, names, extras)
|
64
43
|
else
|
65
|
-
handle_switch(
|
44
|
+
handle_switch(directive, names, extras)
|
66
45
|
end
|
67
46
|
end
|
68
47
|
|
@@ -72,9 +51,11 @@ module RuboCop
|
|
72
51
|
def analyze # rubocop:todo Metrics/AbcSize
|
73
52
|
analyses = Hash.new { |hash, key| hash[key] = CopAnalysis.new([], nil) }
|
74
53
|
|
75
|
-
|
76
|
-
|
77
|
-
|
54
|
+
each_directive do |directive|
|
55
|
+
directive.cop_names.each do |cop_name|
|
56
|
+
cop_name = qualified_cop_name(cop_name)
|
57
|
+
analyses[cop_name] = analyze_cop(analyses[cop_name], directive)
|
58
|
+
end
|
78
59
|
end
|
79
60
|
|
80
61
|
analyses.each_with_object({}) do |element, hash|
|
@@ -83,37 +64,42 @@ module RuboCop
|
|
83
64
|
end
|
84
65
|
end
|
85
66
|
|
86
|
-
def analyze_cop(analysis,
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
67
|
+
def analyze_cop(analysis, directive)
|
68
|
+
# Disabling cops after comments like `#=SomeDslDirective` does not related to single line
|
69
|
+
if !comment_only_line?(directive.line_number) || directive.single_line?
|
70
|
+
analyze_single_line(analysis, directive)
|
71
|
+
elsif directive.disabled?
|
72
|
+
analyze_disabled(analysis, directive)
|
91
73
|
else
|
92
|
-
analyze_rest(analysis,
|
74
|
+
analyze_rest(analysis, directive)
|
93
75
|
end
|
94
76
|
end
|
95
77
|
|
96
|
-
def analyze_single_line(analysis,
|
97
|
-
return analysis unless disabled
|
78
|
+
def analyze_single_line(analysis, directive)
|
79
|
+
return analysis unless directive.disabled?
|
80
|
+
|
81
|
+
line = directive.line_number
|
82
|
+
start_line = analysis.start_line_number
|
98
83
|
|
99
|
-
CopAnalysis.new(analysis.line_ranges + [(line..line)],
|
100
|
-
analysis.start_line_number)
|
84
|
+
CopAnalysis.new(analysis.line_ranges + [(line..line)], start_line)
|
101
85
|
end
|
102
86
|
|
103
|
-
def analyze_disabled(analysis,
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
87
|
+
def analyze_disabled(analysis, directive)
|
88
|
+
line = directive.line_number
|
89
|
+
start_line = analysis.start_line_number
|
90
|
+
|
91
|
+
# Cop already disabled on this line, so we end the current disabled
|
92
|
+
# range before we start a new range.
|
93
|
+
return CopAnalysis.new(analysis.line_ranges + [start_line..line], line) if start_line
|
109
94
|
|
110
95
|
CopAnalysis.new(analysis.line_ranges, line)
|
111
96
|
end
|
112
97
|
|
113
|
-
def analyze_rest(analysis,
|
114
|
-
|
115
|
-
|
116
|
-
|
98
|
+
def analyze_rest(analysis, directive)
|
99
|
+
line = directive.line_number
|
100
|
+
start_line = analysis.start_line_number
|
101
|
+
|
102
|
+
return CopAnalysis.new(analysis.line_ranges + [start_line..line], nil) if start_line
|
117
103
|
|
118
104
|
CopAnalysis.new(analysis.line_ranges, nil)
|
119
105
|
end
|
@@ -124,54 +110,17 @@ module RuboCop
|
|
124
110
|
analysis.line_ranges + [(analysis.start_line_number..Float::INFINITY)]
|
125
111
|
end
|
126
112
|
|
127
|
-
def each_mentioned_cop
|
128
|
-
each_directive do |comment, cop_names, disabled|
|
129
|
-
comment_line_number = comment.loc.expression.line
|
130
|
-
single_line = !comment_only_line?(comment_line_number) ||
|
131
|
-
directive_on_comment_line?(comment)
|
132
|
-
|
133
|
-
cop_names.each do |cop_name|
|
134
|
-
yield qualified_cop_name(cop_name), disabled, comment_line_number,
|
135
|
-
single_line
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def directive_on_comment_line?(comment)
|
141
|
-
comment.text[1..-1].match?(COMMENT_DIRECTIVE_REGEXP)
|
142
|
-
end
|
143
|
-
|
144
113
|
def each_directive
|
145
114
|
processed_source.comments.each do |comment|
|
146
|
-
directive =
|
147
|
-
|
148
|
-
|
149
|
-
yield comment, *directive
|
115
|
+
directive = DirectiveComment.new(comment)
|
116
|
+
yield directive if directive.cop_names
|
150
117
|
end
|
151
118
|
end
|
152
119
|
|
153
|
-
def directive_parts(comment)
|
154
|
-
match = comment.text.match(COMMENT_DIRECTIVE_REGEXP)
|
155
|
-
return unless match
|
156
|
-
|
157
|
-
switch, cops_string = match.captures
|
158
|
-
|
159
|
-
cop_names =
|
160
|
-
cops_string == 'all' ? all_cop_names : cops_string.split(/,\s*/)
|
161
|
-
|
162
|
-
disabled = %w[disable todo].include?(switch)
|
163
|
-
|
164
|
-
[cop_names, disabled]
|
165
|
-
end
|
166
|
-
|
167
120
|
def qualified_cop_name(cop_name)
|
168
121
|
Cop::Registry.qualified_cop_name(cop_name.strip, processed_source.file_path)
|
169
122
|
end
|
170
123
|
|
171
|
-
def all_cop_names
|
172
|
-
@all_cop_names ||= Cop::Registry.global.names - [REDUNDANT_DISABLE]
|
173
|
-
end
|
174
|
-
|
175
124
|
def non_comment_token_line_numbers
|
176
125
|
@non_comment_token_line_numbers ||= begin
|
177
126
|
non_comment_tokens = processed_source.tokens.reject(&:comment?)
|
@@ -179,12 +128,7 @@ module RuboCop
|
|
179
128
|
end
|
180
129
|
end
|
181
130
|
|
182
|
-
def
|
183
|
-
_, cops = comment.text.match(COMMENT_DIRECTIVE_REGEXP).captures
|
184
|
-
cops == 'all'
|
185
|
-
end
|
186
|
-
|
187
|
-
def handle_enable_all(names, extras, comment)
|
131
|
+
def handle_enable_all(directive, names, extras)
|
188
132
|
enabled_cops = 0
|
189
133
|
names.each do |name, counter|
|
190
134
|
next unless counter.positive?
|
@@ -193,19 +137,19 @@ module RuboCop
|
|
193
137
|
enabled_cops += 1
|
194
138
|
end
|
195
139
|
|
196
|
-
extras[comment] << 'all' if enabled_cops.zero?
|
140
|
+
extras[directive.comment] << 'all' if enabled_cops.zero?
|
197
141
|
end
|
198
142
|
|
199
143
|
# Collect cops that have been disabled or enabled by name in a directive comment
|
200
144
|
# so that `Lint/RedundantCopEnableDirective` can register offenses correctly.
|
201
|
-
def handle_switch(
|
202
|
-
cop_names.each do |name|
|
203
|
-
if disabled
|
145
|
+
def handle_switch(directive, names, extras)
|
146
|
+
directive.cop_names.each do |name|
|
147
|
+
if directive.disabled?
|
204
148
|
names[name] += 1
|
205
149
|
elsif (names[name]).positive?
|
206
150
|
names[name] -= 1
|
207
151
|
else
|
208
|
-
extras[comment] << name
|
152
|
+
extras[directive.comment] << name
|
209
153
|
end
|
210
154
|
end
|
211
155
|
end
|
data/lib/rubocop/config.rb
CHANGED
@@ -45,9 +45,7 @@ module RuboCop
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def check
|
48
|
-
deprecation_check
|
49
|
-
warn("#{loaded_path} - #{deprecation_message}")
|
50
|
-
end
|
48
|
+
deprecation_check { |deprecation_message| warn("#{loaded_path} - #{deprecation_message}") }
|
51
49
|
@validator.validate
|
52
50
|
make_excludes_absolute
|
53
51
|
self
|
@@ -67,8 +65,7 @@ module RuboCop
|
|
67
65
|
|
68
66
|
# True if this is a config file that is shipped with RuboCop
|
69
67
|
def internal?
|
70
|
-
base_config_path = File.expand_path(File.join(ConfigLoader::RUBOCOP_HOME,
|
71
|
-
'config'))
|
68
|
+
base_config_path = File.expand_path(File.join(ConfigLoader::RUBOCOP_HOME, 'config'))
|
72
69
|
File.expand_path(loaded_path).start_with?(base_config_path)
|
73
70
|
end
|
74
71
|
|
@@ -79,8 +76,7 @@ module RuboCop
|
|
79
76
|
|
80
77
|
self[key]['Exclude'].map! do |exclude_elem|
|
81
78
|
if exclude_elem.is_a?(String) && !absolute?(exclude_elem)
|
82
|
-
File.expand_path(File.join(base_dir_for_path_parameters,
|
83
|
-
exclude_elem))
|
79
|
+
File.expand_path(File.join(base_dir_for_path_parameters, exclude_elem))
|
84
80
|
else
|
85
81
|
exclude_elem
|
86
82
|
end
|
@@ -122,17 +118,14 @@ module RuboCop
|
|
122
118
|
# Note: the 'Enabled' attribute is same as that returned by `for_cop`
|
123
119
|
def for_badge(badge)
|
124
120
|
cop_config = for_cop(badge.to_s)
|
125
|
-
fetch(badge.department.to_s) { return cop_config }
|
126
|
-
.merge(cop_config)
|
121
|
+
fetch(badge.department.to_s) { return cop_config }.merge(cop_config)
|
127
122
|
end
|
128
123
|
|
129
124
|
# @return [Config] for the given department name.
|
130
125
|
# Note: the 'Enabled' attribute will be present only if specified
|
131
126
|
# at the department's level
|
132
127
|
def for_department(department_name)
|
133
|
-
@for_department ||= Hash.new
|
134
|
-
h[dept] = self[dept] || {}
|
135
|
-
end
|
128
|
+
@for_department ||= Hash.new { |h, dept| h[dept] = self[dept] || {} }
|
136
129
|
@for_department[department_name.to_s]
|
137
130
|
end
|
138
131
|
|
@@ -153,8 +146,7 @@ module RuboCop
|
|
153
146
|
|
154
147
|
# Optimization to quickly decide if the given file is hidden (on the top
|
155
148
|
# level) and cannot be matched by any pattern.
|
156
|
-
is_hidden = relative_file_path.start_with?('.') &&
|
157
|
-
!relative_file_path.start_with?('..')
|
149
|
+
is_hidden = relative_file_path.start_with?('.') && !relative_file_path.start_with?('..')
|
158
150
|
return false if is_hidden && !possibly_include_hidden?
|
159
151
|
|
160
152
|
absolute_file_path = File.expand_path(file)
|
@@ -163,8 +155,7 @@ module RuboCop
|
|
163
155
|
if block_given?
|
164
156
|
yield pattern, relative_file_path, absolute_file_path
|
165
157
|
else
|
166
|
-
match_path?(pattern, relative_file_path) ||
|
167
|
-
match_path?(pattern, absolute_file_path)
|
158
|
+
match_path?(pattern, relative_file_path) || match_path?(pattern, absolute_file_path)
|
168
159
|
end
|
169
160
|
end
|
170
161
|
end
|
@@ -177,8 +168,7 @@ module RuboCop
|
|
177
168
|
|
178
169
|
file_to_include?(file) do |pattern, relative_path, absolute_path|
|
179
170
|
/[A-Z]/.match?(pattern.to_s) &&
|
180
|
-
(match_path?(pattern, relative_path) ||
|
181
|
-
match_path?(pattern, absolute_path))
|
171
|
+
(match_path?(pattern, relative_path) || match_path?(pattern, absolute_path))
|
182
172
|
end
|
183
173
|
end
|
184
174
|
|
@@ -194,9 +184,7 @@ module RuboCop
|
|
194
184
|
|
195
185
|
def file_to_exclude?(file)
|
196
186
|
file = File.expand_path(file)
|
197
|
-
patterns_to_exclude.any?
|
198
|
-
match_path?(pattern, file)
|
199
|
-
end
|
187
|
+
patterns_to_exclude.any? { |pattern| match_path?(pattern, file) }
|
200
188
|
end
|
201
189
|
|
202
190
|
def patterns_to_include
|
@@ -267,8 +255,7 @@ module RuboCop
|
|
267
255
|
private
|
268
256
|
|
269
257
|
def target_rails_version_from_bundler_lock_file
|
270
|
-
@target_rails_version_from_bundler_lock_file ||=
|
271
|
-
read_rails_version_from_bundler_lock_file
|
258
|
+
@target_rails_version_from_bundler_lock_file ||= read_rails_version_from_bundler_lock_file
|
272
259
|
end
|
273
260
|
|
274
261
|
def read_rails_version_from_bundler_lock_file
|
@@ -288,9 +275,7 @@ module RuboCop
|
|
288
275
|
return true if cop_options['Enabled'] == true
|
289
276
|
|
290
277
|
department = department_of(qualified_cop_name)
|
291
|
-
cop_enabled = cop_options.fetch('Enabled')
|
292
|
-
!for_all_cops['DisabledByDefault']
|
293
|
-
end
|
278
|
+
cop_enabled = cop_options.fetch('Enabled') { !for_all_cops['DisabledByDefault'] }
|
294
279
|
return true if cop_enabled == 'override_department'
|
295
280
|
return false if department && department['Enabled'] == false
|
296
281
|
|
@@ -22,8 +22,7 @@ module RuboCop
|
|
22
22
|
class << self
|
23
23
|
include FileFinder
|
24
24
|
|
25
|
-
attr_accessor :debug, :ignore_parent_exclusion,
|
26
|
-
:disable_pending_cops, :enable_pending_cops
|
25
|
+
attr_accessor :debug, :ignore_parent_exclusion, :disable_pending_cops, :enable_pending_cops
|
27
26
|
attr_writer :default_configuration, :project_root
|
28
27
|
attr_reader :loaded_features
|
29
28
|
|
@@ -58,9 +57,7 @@ module RuboCop
|
|
58
57
|
|
59
58
|
def load_yaml_configuration(absolute_path)
|
60
59
|
file_contents = read_file(absolute_path)
|
61
|
-
yaml_code = Dir.chdir(File.dirname(absolute_path))
|
62
|
-
ERB.new(file_contents).result
|
63
|
-
end
|
60
|
+
yaml_code = Dir.chdir(File.dirname(absolute_path)) { ERB.new(file_contents).result }
|
64
61
|
check_duplication(yaml_code, absolute_path)
|
65
62
|
hash = yaml_safe_load(yaml_code, absolute_path) || {}
|
66
63
|
|
@@ -156,9 +153,7 @@ module RuboCop
|
|
156
153
|
|
157
154
|
warn Rainbow(PENDING_BANNER).yellow
|
158
155
|
|
159
|
-
pending_cops.each
|
160
|
-
warn_pending_cop cop
|
161
|
-
end
|
156
|
+
pending_cops.each { |cop| warn_pending_cop cop }
|
162
157
|
|
163
158
|
warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
|
164
159
|
end
|
@@ -246,10 +241,9 @@ module RuboCop
|
|
246
241
|
# stderr. Care is taken to use the standard OS exit code for a "file not
|
247
242
|
# found" error.
|
248
243
|
def read_file(absolute_path)
|
249
|
-
|
244
|
+
File.read(absolute_path, encoding: Encoding::UTF_8)
|
250
245
|
rescue Errno::ENOENT
|
251
|
-
raise ConfigNotFoundError,
|
252
|
-
"Configuration file not found: #{absolute_path}"
|
246
|
+
raise ConfigNotFoundError, "Configuration file not found: #{absolute_path}"
|
253
247
|
end
|
254
248
|
|
255
249
|
def yaml_safe_load(yaml_code, filename)
|
@@ -37,16 +37,30 @@ module RuboCop
|
|
37
37
|
inherit_mode: determine_inherit_mode(hash, k))
|
38
38
|
end
|
39
39
|
hash[k] = v
|
40
|
+
fix_include_paths(base_config.loaded_path, hash, path, k, v) if v.key?('Include')
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
45
|
+
# When one .rubocop.yml file inherits from another .rubocop.yml file, the Include paths in the
|
46
|
+
# base configuration are relative to the directory where the base configuration file is. For the
|
47
|
+
# derived configuration, we need to make those paths relative to where the derived configuration
|
48
|
+
# file is.
|
49
|
+
def fix_include_paths(base_config_path, hash, path, key, value)
|
50
|
+
return unless File.basename(base_config_path).start_with?('.rubocop')
|
51
|
+
|
52
|
+
base_dir = File.dirname(base_config_path)
|
53
|
+
derived_dir = File.dirname(path)
|
54
|
+
hash[key]['Include'] = value['Include'].map do |include_path|
|
55
|
+
PathUtil.relative_path(File.join(base_dir, include_path), derived_dir)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
44
59
|
def resolve_inheritance_from_gems(hash)
|
45
60
|
gems = hash.delete('inherit_gem')
|
46
61
|
(gems || {}).each_pair do |gem_name, config_path|
|
47
62
|
if gem_name == 'rubocop'
|
48
|
-
raise ArgumentError,
|
49
|
-
"can't inherit configuration from the rubocop gem"
|
63
|
+
raise ArgumentError, "can't inherit configuration from the rubocop gem"
|
50
64
|
end
|
51
65
|
|
52
66
|
hash['inherit_from'] = Array(hash['inherit_from'])
|
@@ -77,8 +91,7 @@ module RuboCop
|
|
77
91
|
config = handle_disabled_by_default(config, default_configuration) if disabled_by_default
|
78
92
|
override_enabled_for_disabled_departments(default_configuration, config)
|
79
93
|
|
80
|
-
opts = { inherit_mode: config['inherit_mode'] || {},
|
81
|
-
unset_nil: unset_nil }
|
94
|
+
opts = { inherit_mode: config['inherit_mode'] || {}, unset_nil: unset_nil }
|
82
95
|
Config.new(merge(default_configuration, config, **opts), config_file)
|
83
96
|
end
|
84
97
|
|
@@ -112,8 +125,7 @@ module RuboCop
|
|
112
125
|
next unless key =~ %r{(.*)/.*}
|
113
126
|
|
114
127
|
department = Regexp.last_match(1)
|
115
|
-
next unless disabled?(derived_hash, department) ||
|
116
|
-
disabled?(base_hash, department)
|
128
|
+
next unless disabled?(derived_hash, department) || disabled?(base_hash, department)
|
117
129
|
|
118
130
|
# The `override_department` setting for the `Enabled` parameter is an
|
119
131
|
# internal setting that's not documented in the manual. It will cause a
|
@@ -155,13 +167,10 @@ module RuboCop
|
|
155
167
|
end
|
156
168
|
|
157
169
|
def warn_on_duplicate_setting(base_hash, derived_hash, key, **opts)
|
158
|
-
return unless duplicate_setting?(base_hash, derived_hash,
|
159
|
-
key, opts[:inherited_file])
|
170
|
+
return unless duplicate_setting?(base_hash, derived_hash, key, opts[:inherited_file])
|
160
171
|
|
161
|
-
inherit_mode = opts[:inherit_mode]['merge'] ||
|
162
|
-
|
163
|
-
return if base_hash[key].is_a?(Array) &&
|
164
|
-
inherit_mode && inherit_mode.include?(key)
|
172
|
+
inherit_mode = opts[:inherit_mode]['merge'] || opts[:inherit_mode]['override']
|
173
|
+
return if base_hash[key].is_a?(Array) && inherit_mode && inherit_mode.include?(key)
|
165
174
|
|
166
175
|
puts "#{PathUtil.smart_path(opts[:file])}: " \
|
167
176
|
"#{opts[:cop_name]}:#{key} overrides " \
|
@@ -251,8 +260,7 @@ module RuboCop
|
|
251
260
|
|
252
261
|
File.join(gem_path, relative_config_path)
|
253
262
|
rescue Gem::LoadError => e
|
254
|
-
raise Gem::LoadError,
|
255
|
-
"Unable to find gem #{gem_name}; is the gem installed? #{e}"
|
263
|
+
raise Gem::LoadError, "Unable to find gem #{gem_name}; is the gem installed? #{e}"
|
256
264
|
end
|
257
265
|
end
|
258
266
|
end
|