rubocop 1.72.1 → 1.81.7
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 +22 -18
- data/config/default.yml +240 -65
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +8 -3
- data/exe/rubocop +1 -8
- data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
- data/lib/rubocop/cli.rb +19 -4
- data/lib/rubocop/config.rb +35 -6
- data/lib/rubocop/config_loader.rb +8 -40
- data/lib/rubocop/config_loader_resolver.rb +9 -7
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +46 -2
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/config_validator.rb +7 -6
- data/lib/rubocop/cop/autocorrect_logic.rb +22 -14
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +7 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -2
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -2
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +37 -15
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +4 -4
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +6 -2
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +6 -1
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/class_structure.rb +36 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +32 -14
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +34 -4
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +4 -7
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +13 -1
- data/lib/rubocop/cop/layout/line_length.rb +43 -10
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +9 -5
- data/lib/rubocop/cop/layout/redundant_line_break.rb +9 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +11 -5
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +10 -0
- data/lib/rubocop/cop/layout/space_around_keyword.rb +6 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +12 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_brackets.rb +5 -38
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +12 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +3 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +2 -3
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +2 -5
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +13 -7
- data/lib/rubocop/cop/lint/debugger.rb +2 -4
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +5 -2
- data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -23
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +5 -42
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +14 -64
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +0 -6
- data/lib/rubocop/cop/lint/float_comparison.rb +32 -10
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +124 -10
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +17 -8
- data/lib/rubocop/cop/lint/mixed_case_range.rb +2 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +1 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -1
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +101 -2
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +43 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +3 -0
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +1 -1
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +4 -4
- data/lib/rubocop/cop/lint/self_assignment.rb +31 -5
- data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -1
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +12 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +2 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_loop.rb +5 -5
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +30 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +2 -0
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +9 -12
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +1 -0
- data/lib/rubocop/cop/lint/useless_or.rb +98 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +3 -3
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +16 -2
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +1 -0
- data/lib/rubocop/cop/metrics/method_length.rb +1 -0
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -1
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -3
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +2 -2
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -2
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
- data/lib/rubocop/cop/mixin/hash_subset.rb +19 -4
- data/lib/rubocop/cop/mixin/line_length_help.rb +24 -8
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +2 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +12 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +1 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +18 -2
- data/lib/rubocop/cop/naming/block_forwarding.rb +3 -3
- data/lib/rubocop/cop/naming/file_name.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +187 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
- data/lib/rubocop/cop/naming/{predicate_name.rb → predicate_prefix.rb} +4 -4
- data/lib/rubocop/cop/naming/variable_name.rb +51 -6
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/eval.rb +2 -1
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +32 -10
- data/lib/rubocop/cop/style/accessor_grouping.rb +32 -6
- data/lib/rubocop/cop/style/arguments_forwarding.rb +21 -24
- data/lib/rubocop/cop/style/array_intersect.rb +113 -38
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/bitwise_predicate.rb +8 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +3 -2
- data/lib/rubocop/cop/style/case_like_if.rb +1 -1
- data/lib/rubocop/cop/style/class_and_module_children.rb +48 -10
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/style/collection_methods.rb +1 -0
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +1 -0
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +12 -5
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +26 -8
- data/lib/rubocop/cop/style/constant_visibility.rb +14 -9
- data/lib/rubocop/cop/style/data_inheritance.rb +7 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -5
- data/lib/rubocop/cop/style/dig_chain.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +3 -3
- data/lib/rubocop/cop/style/empty_literal.rb +4 -0
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
- data/lib/rubocop/cop/style/endless_method.rb +176 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +3 -3
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +3 -3
- data/lib/rubocop/cop/style/exponential_notation.rb +5 -4
- data/lib/rubocop/cop/style/fetch_env_var.rb +32 -6
- data/lib/rubocop/cop/style/float_division.rb +15 -1
- data/lib/rubocop/cop/style/for.rb +1 -0
- data/lib/rubocop/cop/style/format_string_token.rb +38 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +3 -0
- data/lib/rubocop/cop/style/guard_clause.rb +2 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +16 -8
- data/lib/rubocop/cop/style/hash_each_methods.rb +3 -2
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -1
- data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +3 -3
- data/lib/rubocop/cop/style/if_inside_else.rb +10 -13
- data/lib/rubocop/cop/style/if_unless_modifier.rb +35 -8
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +10 -6
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
- data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
- data/lib/rubocop/cop/style/it_assignment.rb +69 -12
- data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +13 -7
- data/lib/rubocop/cop/style/lambda.rb +1 -0
- data/lib/rubocop/cop/style/lambda_call.rb +7 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/map_into_array.rb +4 -1
- data/lib/rubocop/cop/style/map_to_hash.rb +12 -3
- data/lib/rubocop/cop/style/map_to_set.rb +1 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +9 -8
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +16 -0
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -1
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -9
- data/lib/rubocop/cop/style/next.rb +44 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
- data/lib/rubocop/cop/style/object_then.rb +1 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +17 -9
- data/lib/rubocop/cop/style/parallel_assignment.rb +32 -20
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -0
- data/lib/rubocop/cop/style/raise_args.rb +8 -8
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +35 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +57 -0
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +14 -4
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -9
- data/lib/rubocop/cop/style/redundant_format.rb +79 -18
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +1 -4
- data/lib/rubocop/cop/style/redundant_parentheses.rb +73 -18
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -0
- data/lib/rubocop/cop/style/redundant_self.rb +9 -5
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +3 -0
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +61 -14
- data/lib/rubocop/cop/style/select_by_regexp.rb +4 -1
- data/lib/rubocop/cop/style/semicolon.rb +23 -7
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +3 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +10 -7
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +75 -101
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +18 -15
- data/lib/rubocop/cop/style/struct_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/super_arguments.rb +1 -2
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +3 -1
- data/lib/rubocop/cop/style/top_level_method_definition.rb +1 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +52 -1
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/format_string.rb +15 -2
- data/lib/rubocop/cop/variable_force/assignment.rb +7 -3
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +3 -8
- data/lib/rubocop/cop/variable_force.rb +26 -9
- data/lib/rubocop/cops_documentation_generator.rb +23 -7
- data/lib/rubocop/directive_comment.rb +1 -1
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +19 -5
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/lsp/diagnostic.rb +25 -24
- data/lib/rubocop/lsp/routes.rb +65 -9
- data/lib/rubocop/lsp/runtime.rb +5 -5
- data/lib/rubocop/lsp/server.rb +2 -2
- data/lib/rubocop/lsp/stdin_runner.rb +3 -17
- data/lib/rubocop/magic_comment.rb +8 -0
- data/lib/rubocop/pending_cops_reporter.rb +56 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +2 -0
- data/lib/rubocop/plugin/load_error.rb +1 -1
- data/lib/rubocop/plugin.rb +9 -2
- data/lib/rubocop/result_cache.rb +14 -12
- data/lib/rubocop/rspec/cop_helper.rb +6 -1
- data/lib/rubocop/rspec/expect_offense.rb +9 -3
- data/lib/rubocop/rspec/shared_contexts.rb +34 -0
- data/lib/rubocop/rspec/support.rb +3 -0
- data/lib/rubocop/runner.rb +10 -4
- data/lib/rubocop/server/cache.rb +17 -12
- data/lib/rubocop/server/client_command/base.rb +10 -0
- data/lib/rubocop/server/client_command/exec.rb +2 -1
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/target_finder.rb +13 -9
- data/lib/rubocop/target_ruby.rb +11 -2
- data/lib/rubocop/version.rb +14 -7
- data/lib/rubocop.rb +17 -2
- data/lib/ruby_lsp/rubocop/addon.rb +25 -10
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +57 -5
- metadata +24 -8
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
data/config/internal_affairs.yml
CHANGED
|
@@ -6,6 +6,26 @@ InternalAffairs/CopDescription:
|
|
|
6
6
|
Include:
|
|
7
7
|
- 'lib/rubocop/cop/**/*.rb'
|
|
8
8
|
|
|
9
|
+
InternalAffairs/ExampleHeredocDelimiter:
|
|
10
|
+
Include:
|
|
11
|
+
- 'spec/rubocop/cop/**/*.rb'
|
|
12
|
+
|
|
13
|
+
InternalAffairs/ExampleDescription:
|
|
14
|
+
Include:
|
|
15
|
+
- 'spec/rubocop/cop/**/*.rb'
|
|
16
|
+
|
|
17
|
+
InternalAffairs/NodeTypeGroup:
|
|
18
|
+
Include:
|
|
19
|
+
- 'lib/rubocop/cop/**/*.rb'
|
|
20
|
+
|
|
21
|
+
InternalAffairs/OnSendWithoutOnCSend:
|
|
22
|
+
Include:
|
|
23
|
+
- 'lib/rubocop/cop/**/*.rb'
|
|
24
|
+
|
|
25
|
+
InternalAffairs/UndefinedConfig:
|
|
26
|
+
Include:
|
|
27
|
+
- 'lib/rubocop/cop/**/*.rb'
|
|
28
|
+
|
|
9
29
|
InternalAffairs/UselessMessageAssertion:
|
|
10
30
|
Include:
|
|
11
31
|
- '**/*_spec.rb'
|
data/config/obsoletion.yml
CHANGED
|
@@ -31,6 +31,9 @@ renamed:
|
|
|
31
31
|
Lint/UnneededRequireStatement: Lint/RedundantRequireStatement
|
|
32
32
|
Lint/UnneededSplatExpansion: Lint/RedundantSplatExpansion
|
|
33
33
|
Metrics/LineLength: Layout/LineLength
|
|
34
|
+
Naming/PredicateName:
|
|
35
|
+
new_name: Naming/PredicatePrefix
|
|
36
|
+
severity: warning
|
|
34
37
|
Naming/UncommunicativeBlockParamName: Naming/BlockParameterName
|
|
35
38
|
Naming/UncommunicativeMethodParamName: Naming/MethodParameterName
|
|
36
39
|
Style/AccessorMethodName: Naming/AccessorMethodName
|
|
@@ -43,7 +46,9 @@ renamed:
|
|
|
43
46
|
Style/MethodCallParentheses: Style/MethodCallWithoutArgsParentheses
|
|
44
47
|
Style/MethodName: Naming/MethodName
|
|
45
48
|
Style/OpMethod: Naming/BinaryOperatorParameterName
|
|
46
|
-
Style/PredicateName:
|
|
49
|
+
Style/PredicateName:
|
|
50
|
+
new_name: Naming/PredicatePrefix
|
|
51
|
+
severity: warning
|
|
47
52
|
Style/SingleSpaceBeforeFirstArg: Layout/SpaceBeforeFirstArg
|
|
48
53
|
Style/UnneededCapitalW: Style/RedundantCapitalW
|
|
49
54
|
Style/UnneededCondition: Style/RedundantCondition
|
|
@@ -177,10 +182,10 @@ changed_parameters:
|
|
|
177
182
|
- cops: Naming/HeredocDelimiterNaming
|
|
178
183
|
parameters: Blacklist
|
|
179
184
|
alternative: ForbiddenDelimiters
|
|
180
|
-
- cops: Naming/
|
|
185
|
+
- cops: Naming/PredicatePrefix
|
|
181
186
|
parameters: NamePrefixBlacklist
|
|
182
187
|
alternative: ForbiddenPrefixes
|
|
183
|
-
- cops: Naming/
|
|
188
|
+
- cops: Naming/PredicatePrefix
|
|
184
189
|
parameters: NameWhitelist
|
|
185
190
|
alternative: AllowedMethods
|
|
186
191
|
- cops:
|
data/exe/rubocop
CHANGED
|
@@ -12,13 +12,6 @@ if RuboCop::Server.running?
|
|
|
12
12
|
exit_status = RuboCop::Server::ClientCommand::Exec.new.run
|
|
13
13
|
else
|
|
14
14
|
require 'rubocop'
|
|
15
|
-
|
|
16
|
-
cli = RuboCop::CLI.new
|
|
17
|
-
|
|
18
|
-
time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
19
|
-
exit_status = cli.run
|
|
20
|
-
elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
|
|
21
|
-
|
|
22
|
-
puts "Finished in #{elapsed_time} seconds" if cli.options[:debug] || cli.options[:display_time]
|
|
15
|
+
exit_status = RuboCop::CLI.new.run
|
|
23
16
|
end
|
|
24
17
|
exit exit_status
|
|
@@ -83,7 +83,7 @@ module RuboCop
|
|
|
83
83
|
execute_runner
|
|
84
84
|
@options.delete(:only)
|
|
85
85
|
@config_store = ConfigStore.new
|
|
86
|
-
@config_store.
|
|
86
|
+
@config_store.apply_options!(@options)
|
|
87
87
|
# Save the todo configuration of the LineLength cop.
|
|
88
88
|
File.read(AUTO_GENERATED_FILE).lines.drop_while { |line| line.start_with?('#') }.join
|
|
89
89
|
end
|
|
@@ -99,7 +99,7 @@ module RuboCop
|
|
|
99
99
|
|
|
100
100
|
def reset_config_and_auto_gen_file
|
|
101
101
|
@config_store = ConfigStore.new
|
|
102
|
-
@config_store.
|
|
102
|
+
@config_store.apply_options!(@options)
|
|
103
103
|
File.open(AUTO_GENERATED_FILE, 'w') {} # create or truncate if exists
|
|
104
104
|
add_inheritance_from_auto_generated_file(@options[:config])
|
|
105
105
|
end
|
data/lib/rubocop/cli.rb
CHANGED
|
@@ -12,7 +12,7 @@ module RuboCop
|
|
|
12
12
|
STATUS_INTERRUPTED = Signal.list['INT'] + 128
|
|
13
13
|
DEFAULT_PARALLEL_OPTIONS = %i[
|
|
14
14
|
color config debug display_style_guide display_time display_only_fail_level_offenses
|
|
15
|
-
display_only_failed editor_mode except extra_details fail_level fix_layout format
|
|
15
|
+
display_only_failed editor_mode except extra_details fail_level fix_layout format formatters
|
|
16
16
|
ignore_disable_comments lint only only_guide_cops require safe
|
|
17
17
|
autocorrect safe_autocorrect autocorrect_all
|
|
18
18
|
].freeze
|
|
@@ -37,6 +37,8 @@ module RuboCop
|
|
|
37
37
|
#
|
|
38
38
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
39
39
|
def run(args = ARGV)
|
|
40
|
+
time_start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
41
|
+
|
|
40
42
|
@options, paths = Options.new.parse(args)
|
|
41
43
|
@env = Environment.new(@options, @config_store, paths)
|
|
42
44
|
|
|
@@ -48,11 +50,12 @@ module RuboCop
|
|
|
48
50
|
validate_options_vs_config
|
|
49
51
|
parallel_by_default!
|
|
50
52
|
apply_default_formatter
|
|
53
|
+
report_pending_cops
|
|
51
54
|
execute_runners
|
|
52
55
|
end
|
|
53
56
|
end
|
|
54
57
|
rescue ConfigNotFoundError, IncorrectCopNameError, OptionArgumentError => e
|
|
55
|
-
warn e.message
|
|
58
|
+
warn Rainbow(e.message).red
|
|
56
59
|
STATUS_ERROR
|
|
57
60
|
rescue RuboCop::Error => e
|
|
58
61
|
warn Rainbow("Error: #{e.message}").red
|
|
@@ -71,6 +74,9 @@ module RuboCop
|
|
|
71
74
|
warn e.message
|
|
72
75
|
warn e.backtrace
|
|
73
76
|
STATUS_ERROR
|
|
77
|
+
ensure
|
|
78
|
+
elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
|
|
79
|
+
puts "Finished in #{elapsed_time} seconds" if @options[:debug] || @options[:display_time]
|
|
74
80
|
end
|
|
75
81
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
76
82
|
|
|
@@ -155,10 +161,10 @@ module RuboCop
|
|
|
155
161
|
|
|
156
162
|
def act_on_options
|
|
157
163
|
set_options_to_config_loader
|
|
164
|
+
set_options_to_pending_cops_reporter
|
|
158
165
|
handle_editor_mode
|
|
159
166
|
|
|
160
|
-
@config_store.
|
|
161
|
-
@config_store.force_default_config! if @options[:force_default_config]
|
|
167
|
+
@config_store.apply_options!(@options)
|
|
162
168
|
|
|
163
169
|
handle_exiting_options
|
|
164
170
|
|
|
@@ -179,6 +185,11 @@ module RuboCop
|
|
|
179
185
|
ConfigLoader.ignore_unrecognized_cops = @options[:ignore_unrecognized_cops]
|
|
180
186
|
end
|
|
181
187
|
|
|
188
|
+
def set_options_to_pending_cops_reporter
|
|
189
|
+
PendingCopsReporter.disable_pending_cops = @options[:disable_pending_cops]
|
|
190
|
+
PendingCopsReporter.enable_pending_cops = @options[:enable_pending_cops]
|
|
191
|
+
end
|
|
192
|
+
|
|
182
193
|
def handle_editor_mode
|
|
183
194
|
RuboCop::LSP.enable if @options[:editor_mode]
|
|
184
195
|
end
|
|
@@ -208,5 +219,9 @@ module RuboCop
|
|
|
208
219
|
[[formatter, @options[:output_path]]]
|
|
209
220
|
end
|
|
210
221
|
end
|
|
222
|
+
|
|
223
|
+
def report_pending_cops
|
|
224
|
+
PendingCopsReporter.warn_if_needed(@config_store.for_pwd)
|
|
225
|
+
end
|
|
211
226
|
end
|
|
212
227
|
end
|
data/lib/rubocop/config.rb
CHANGED
|
@@ -27,14 +27,43 @@ module RuboCop
|
|
|
27
27
|
config
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
# rubocop:disable Metrics/AbcSize
|
|
30
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
31
31
|
def initialize(hash = RuboCop::ConfigLoader.default_configuration, loaded_path = nil)
|
|
32
32
|
@loaded_path = loaded_path
|
|
33
33
|
@for_cop = Hash.new do |h, cop|
|
|
34
34
|
cop_name = cop.respond_to?(:cop_name) ? cop.cop_name : cop
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
|
|
36
|
+
if ConfigObsoletion.deprecated_cop_name?(cop)
|
|
37
|
+
# Since a deprecated cop will no longer have a qualified name (as the badge is no
|
|
38
|
+
# longer valid), and since we do not want to automatically enable the cop, we just
|
|
39
|
+
# set the configuration to an empty hash if it is unset.
|
|
40
|
+
# This is necessary to allow a renamed cop have its old configuration merged in
|
|
41
|
+
# before being used (which is necessary to allow it to be disabled via config).
|
|
42
|
+
cop_options = self[cop_name].dup || {}
|
|
43
|
+
else
|
|
44
|
+
qualified_cop_name = Cop::Registry.qualified_cop_name(cop_name, loaded_path, warn: false)
|
|
45
|
+
cop_options = self[qualified_cop_name].dup || {}
|
|
46
|
+
cop_options['Enabled'] = enable_cop?(qualified_cop_name, cop_options)
|
|
47
|
+
|
|
48
|
+
# If the cop has deprecated names (ie. it has been renamed), it is possible that
|
|
49
|
+
# users will still have old configuration for the cop's old name. In this case,
|
|
50
|
+
# if `ConfigObsoletion` is configured to warn rather than error (and therefore
|
|
51
|
+
# RuboCop runs), we want to respect the old configuration, so merge it in.
|
|
52
|
+
#
|
|
53
|
+
# NOTE: If there is configuration for both the cop and a deprecated names, the old
|
|
54
|
+
# configuration will be merged on top of the new configuration!
|
|
55
|
+
ConfigObsoletion.deprecated_names_for(cop).each do |deprecated_cop_name|
|
|
56
|
+
deprecated_config = @for_cop[deprecated_cop_name]
|
|
57
|
+
next if deprecated_config.empty?
|
|
58
|
+
|
|
59
|
+
warn Rainbow(<<~WARNING).yellow
|
|
60
|
+
Warning: Using `#{deprecated_cop_name}` configuration in #{loaded_path} for `#{cop}`.
|
|
61
|
+
WARNING
|
|
62
|
+
|
|
63
|
+
cop_options.merge!(@for_cop[deprecated_cop_name])
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
38
67
|
h[cop] = h[cop_name] = cop_options
|
|
39
68
|
end
|
|
40
69
|
@hash = hash
|
|
@@ -43,7 +72,7 @@ module RuboCop
|
|
|
43
72
|
@badge_config_cache = {}.compare_by_identity
|
|
44
73
|
@clusivity_config_exists_cache = {}
|
|
45
74
|
end
|
|
46
|
-
# rubocop:enable Metrics/AbcSize
|
|
75
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
47
76
|
|
|
48
77
|
def loaded_plugins
|
|
49
78
|
@loaded_plugins ||= ConfigLoader.loaded_plugins
|
|
@@ -262,7 +291,7 @@ module RuboCop
|
|
|
262
291
|
end
|
|
263
292
|
|
|
264
293
|
def parser_engine
|
|
265
|
-
@parser_engine ||= for_all_cops.fetch('ParserEngine', :
|
|
294
|
+
@parser_engine ||= for_all_cops.fetch('ParserEngine', :default).to_sym
|
|
266
295
|
end
|
|
267
296
|
|
|
268
297
|
def target_rails_version
|
|
@@ -22,14 +22,6 @@ module RuboCop
|
|
|
22
22
|
class << self
|
|
23
23
|
include FileFinder
|
|
24
24
|
|
|
25
|
-
PENDING_BANNER = <<~BANNER
|
|
26
|
-
The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file.
|
|
27
|
-
|
|
28
|
-
Please also note that you can opt-in to new cops by default by adding this to your config:
|
|
29
|
-
AllCops:
|
|
30
|
-
NewCops: enable
|
|
31
|
-
BANNER
|
|
32
|
-
|
|
33
25
|
attr_accessor :debug, :ignore_parent_exclusion, :disable_pending_cops, :enable_pending_cops,
|
|
34
26
|
:ignore_unrecognized_cops
|
|
35
27
|
attr_writer :default_configuration
|
|
@@ -63,7 +55,6 @@ module RuboCop
|
|
|
63
55
|
loaded_features = resolver.resolve_requires(path, hash)
|
|
64
56
|
add_loaded_features(loaded_features)
|
|
65
57
|
|
|
66
|
-
resolver.override_department_setting_for_cops({}, hash)
|
|
67
58
|
resolver.resolve_inheritance_from_gems(hash)
|
|
68
59
|
resolver.resolve_inheritance(path, hash, file, debug?)
|
|
69
60
|
hash.delete('inherit_from')
|
|
@@ -84,7 +75,9 @@ module RuboCop
|
|
|
84
75
|
|
|
85
76
|
puts "configuration from #{absolute_path}" if debug?
|
|
86
77
|
|
|
87
|
-
|
|
78
|
+
unless hash.is_a?(Hash)
|
|
79
|
+
raise(ValidationError, "Malformed configuration in #{absolute_path}")
|
|
80
|
+
end
|
|
88
81
|
|
|
89
82
|
hash
|
|
90
83
|
end
|
|
@@ -92,8 +85,12 @@ module RuboCop
|
|
|
92
85
|
def add_missing_namespaces(path, hash)
|
|
93
86
|
# Using `hash.each_key` will cause the
|
|
94
87
|
# `can't add a new key into hash during iteration` error
|
|
88
|
+
obsoletion = ConfigObsoletion.new(hash)
|
|
89
|
+
|
|
95
90
|
hash_keys = hash.keys
|
|
96
91
|
hash_keys.each do |key|
|
|
92
|
+
next if obsoletion.deprecated_cop_name?(key)
|
|
93
|
+
|
|
97
94
|
q = Cop::Registry.qualified_cop_name(key, path)
|
|
98
95
|
next if q == key
|
|
99
96
|
|
|
@@ -129,21 +126,7 @@ module RuboCop
|
|
|
129
126
|
add_excludes_from_files(config, config_file)
|
|
130
127
|
end
|
|
131
128
|
|
|
132
|
-
merge_with_default(config, config_file)
|
|
133
|
-
unless possible_new_cops?(merged_config)
|
|
134
|
-
pending_cops = pending_cops_only_qualified(merged_config.pending_cops)
|
|
135
|
-
warn_on_pending_cops(pending_cops) unless pending_cops.empty?
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
def pending_cops_only_qualified(pending_cops)
|
|
141
|
-
pending_cops.select { |cop| Cop::Registry.qualified_cop?(cop.name) }
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def possible_new_cops?(config)
|
|
145
|
-
disable_pending_cops || enable_pending_cops ||
|
|
146
|
-
config.disabled_new_cops? || config.enabled_new_cops?
|
|
129
|
+
merge_with_default(config, config_file)
|
|
147
130
|
end
|
|
148
131
|
|
|
149
132
|
def add_excludes_from_files(config, config_file)
|
|
@@ -205,21 +188,6 @@ module RuboCop
|
|
|
205
188
|
ConfigFinder.project_root
|
|
206
189
|
end
|
|
207
190
|
|
|
208
|
-
def warn_on_pending_cops(pending_cops)
|
|
209
|
-
warn Rainbow(PENDING_BANNER).yellow
|
|
210
|
-
|
|
211
|
-
pending_cops.each { |cop| warn_pending_cop cop }
|
|
212
|
-
|
|
213
|
-
warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow
|
|
214
|
-
end
|
|
215
|
-
|
|
216
|
-
def warn_pending_cop(cop)
|
|
217
|
-
version = cop.metadata['VersionAdded'] || 'N/A'
|
|
218
|
-
|
|
219
|
-
warn Rainbow("#{cop.name}: # new in #{version}").yellow
|
|
220
|
-
warn Rainbow(' Enabled: true').yellow
|
|
221
|
-
end
|
|
222
|
-
|
|
223
191
|
# Merges the given configuration with the default one.
|
|
224
192
|
def merge_with_default(config, config_file, unset_nil: true)
|
|
225
193
|
resolver.merge_with_default(config, config_file, unset_nil: unset_nil)
|
|
@@ -9,7 +9,8 @@ module RuboCop
|
|
|
9
9
|
# @api private
|
|
10
10
|
class ConfigLoaderResolver # rubocop:disable Metrics/ClassLength
|
|
11
11
|
def resolve_plugins(rubocop_config, plugins)
|
|
12
|
-
|
|
12
|
+
plugins = Array(plugins) - ConfigLoader.loaded_plugins.map { |plugin| plugin.about.name }
|
|
13
|
+
return if plugins.empty?
|
|
13
14
|
|
|
14
15
|
Plugin.integrate_plugins(rubocop_config, plugins)
|
|
15
16
|
end
|
|
@@ -123,7 +124,7 @@ module RuboCop
|
|
|
123
124
|
elsif merge_hashes?(base_hash, derived_hash, key)
|
|
124
125
|
result[key] = merge(base_hash[key], derived_hash[key], **opts)
|
|
125
126
|
elsif should_union?(derived_hash, base_hash, opts[:inherit_mode], key)
|
|
126
|
-
result[key] = base_hash[key] | derived_hash[key]
|
|
127
|
+
result[key] = Array(base_hash[key]) | Array(derived_hash[key])
|
|
127
128
|
elsif opts[:debug]
|
|
128
129
|
warn_on_duplicate_setting(base_hash, derived_hash, key, **opts)
|
|
129
130
|
end
|
|
@@ -205,7 +206,7 @@ module RuboCop
|
|
|
205
206
|
end
|
|
206
207
|
|
|
207
208
|
def should_union?(derived_hash, base_hash, root_mode, key)
|
|
208
|
-
return false unless base_hash[key].is_a?(Array)
|
|
209
|
+
return false unless base_hash[key].is_a?(Array) || derived_hash[key].is_a?(Array)
|
|
209
210
|
|
|
210
211
|
derived_mode = derived_hash['inherit_mode']
|
|
211
212
|
return false if should_override?(derived_mode, key)
|
|
@@ -294,10 +295,11 @@ module RuboCop
|
|
|
294
295
|
begin
|
|
295
296
|
gem = Bundler.load.specs[gem_name].first
|
|
296
297
|
gem_path = gem.full_gem_path if gem
|
|
297
|
-
rescue
|
|
298
|
-
#
|
|
299
|
-
|
|
300
|
-
# The Gemfile exists but contains an uninstalled git source
|
|
298
|
+
rescue StandardError
|
|
299
|
+
# The Gemfile has a problem, which could be one of:
|
|
300
|
+
# - No Gemfile found. Bundler may be loaded manually
|
|
301
|
+
# - The Gemfile exists but contains an uninstalled git source
|
|
302
|
+
# - The Gemfile exists but cannot be loaded for some other reason
|
|
301
303
|
end
|
|
302
304
|
end
|
|
303
305
|
|
|
@@ -15,7 +15,7 @@ module RuboCop
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def violated?
|
|
18
|
-
return false if
|
|
18
|
+
return false if plugin_loaded?
|
|
19
19
|
|
|
20
20
|
affected_cops.any?
|
|
21
21
|
end
|
|
@@ -38,8 +38,9 @@ module RuboCop
|
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
def
|
|
42
|
-
|
|
41
|
+
def plugin_loaded?
|
|
42
|
+
# Plugins loaded via `require` are included in `loaded_features`.
|
|
43
|
+
config.loaded_plugins.include?(gem) || config.loaded_features.include?(gem)
|
|
43
44
|
end
|
|
44
45
|
end
|
|
45
46
|
end
|
|
@@ -6,17 +6,28 @@ module RuboCop
|
|
|
6
6
|
# a cop or moving it to a new department.
|
|
7
7
|
# @api private
|
|
8
8
|
class RenamedCop < CopRule
|
|
9
|
-
attr_reader :new_name
|
|
9
|
+
attr_reader :new_name, :metadata
|
|
10
10
|
|
|
11
|
-
def initialize(config, old_name,
|
|
11
|
+
def initialize(config, old_name, name_or_hash)
|
|
12
12
|
super(config, old_name)
|
|
13
|
-
|
|
13
|
+
|
|
14
|
+
if name_or_hash.is_a?(Hash)
|
|
15
|
+
@metadata = name_or_hash
|
|
16
|
+
@new_name = name_or_hash['new_name']
|
|
17
|
+
else
|
|
18
|
+
@metadata = {}
|
|
19
|
+
@new_name = name_or_hash
|
|
20
|
+
end
|
|
14
21
|
end
|
|
15
22
|
|
|
16
23
|
def rule_message
|
|
17
24
|
"The `#{old_name}` cop has been #{verb} to `#{new_name}`."
|
|
18
25
|
end
|
|
19
26
|
|
|
27
|
+
def warning?
|
|
28
|
+
severity == 'warning'
|
|
29
|
+
end
|
|
30
|
+
|
|
20
31
|
private
|
|
21
32
|
|
|
22
33
|
def moved?
|
|
@@ -29,6 +40,10 @@ module RuboCop
|
|
|
29
40
|
def verb
|
|
30
41
|
moved? ? 'moved' : 'renamed'
|
|
31
42
|
end
|
|
43
|
+
|
|
44
|
+
def severity
|
|
45
|
+
metadata['severity']
|
|
46
|
+
end
|
|
32
47
|
end
|
|
33
48
|
end
|
|
34
49
|
end
|
|
@@ -23,9 +23,40 @@ module RuboCop
|
|
|
23
23
|
class << self
|
|
24
24
|
attr_accessor :files
|
|
25
25
|
|
|
26
|
+
def global
|
|
27
|
+
@global ||= new(Config.new)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def reset!
|
|
31
|
+
@global = nil
|
|
32
|
+
@deprecated_names = {}
|
|
33
|
+
LOAD_RULES_CACHE[rules_cache_key] = nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def rules_cache_key
|
|
37
|
+
files.hash
|
|
38
|
+
end
|
|
39
|
+
|
|
26
40
|
def legacy_cop_names
|
|
27
41
|
# Used by DepartmentName#qualified_legacy_cop_name
|
|
28
|
-
|
|
42
|
+
global.legacy_cop_names
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def deprecated_cop_name?(name)
|
|
46
|
+
global.deprecated_cop_name?(name)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def deprecated_names_for(cop)
|
|
50
|
+
@deprecated_names ||= {}
|
|
51
|
+
return @deprecated_names[cop] if @deprecated_names.key?(cop)
|
|
52
|
+
|
|
53
|
+
@deprecated_names[cop] = global.rules.filter_map do |rule|
|
|
54
|
+
next unless rule.cop_rule?
|
|
55
|
+
next unless rule.respond_to?(:new_name)
|
|
56
|
+
next unless rule.new_name == cop
|
|
57
|
+
|
|
58
|
+
rule.old_name
|
|
59
|
+
end
|
|
29
60
|
end
|
|
30
61
|
end
|
|
31
62
|
|
|
@@ -45,12 +76,21 @@ module RuboCop
|
|
|
45
76
|
raise ValidationError, messages.join("\n")
|
|
46
77
|
end
|
|
47
78
|
|
|
79
|
+
def legacy_cop_names
|
|
80
|
+
# Used by DepartmentName#qualified_legacy_cop_name
|
|
81
|
+
cop_rules.map(&:old_name)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def deprecated_cop_name?(name)
|
|
85
|
+
legacy_cop_names.include?(name)
|
|
86
|
+
end
|
|
87
|
+
|
|
48
88
|
private
|
|
49
89
|
|
|
50
90
|
# Default rules for obsoletions are in config/obsoletion.yml
|
|
51
91
|
# Additional rules files can be added with `RuboCop::ConfigObsoletion.files << filename`
|
|
52
92
|
def load_rules # rubocop:disable Metrics/AbcSize
|
|
53
|
-
rules = LOAD_RULES_CACHE[self.class.
|
|
93
|
+
rules = LOAD_RULES_CACHE[self.class.rules_cache_key] ||=
|
|
54
94
|
self.class.files.each_with_object({}) do |filename, hash|
|
|
55
95
|
hash.merge!(YAML.safe_load(File.read(filename)) || {}) do |_key, first, second|
|
|
56
96
|
case first
|
|
@@ -107,5 +147,9 @@ module RuboCop
|
|
|
107
147
|
rule.message
|
|
108
148
|
end
|
|
109
149
|
end
|
|
150
|
+
|
|
151
|
+
def cop_rules
|
|
152
|
+
rules.select(&:cop_rule?)
|
|
153
|
+
end
|
|
110
154
|
end
|
|
111
155
|
end
|
data/lib/rubocop/config_store.rb
CHANGED
|
@@ -25,6 +25,11 @@ module RuboCop
|
|
|
25
25
|
@validated = true
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
+
def apply_options!(options)
|
|
29
|
+
self.options_config = options[:config] if options[:config]
|
|
30
|
+
force_default_config! if options[:force_default_config]
|
|
31
|
+
end
|
|
32
|
+
|
|
28
33
|
def options_config=(options_config)
|
|
29
34
|
loaded_config = ConfigLoader.load_file(options_config)
|
|
30
35
|
@options_config = ConfigLoader.merge_with_default(loaded_config, options_config)
|
|
@@ -9,16 +9,16 @@ module RuboCop
|
|
|
9
9
|
|
|
10
10
|
# @api private
|
|
11
11
|
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode AutoCorrect StyleGuide Details
|
|
12
|
-
Enabled].freeze
|
|
12
|
+
Enabled Reference References].freeze
|
|
13
13
|
# @api private
|
|
14
14
|
INTERNAL_PARAMS = %w[Description StyleGuide
|
|
15
15
|
VersionAdded VersionChanged VersionRemoved
|
|
16
|
-
Reference Safe SafeAutoCorrect].freeze
|
|
16
|
+
Reference References Safe SafeAutoCorrect].freeze
|
|
17
17
|
# @api private
|
|
18
18
|
NEW_COPS_VALUES = %w[pending disable enable].freeze
|
|
19
19
|
|
|
20
20
|
# @api private
|
|
21
|
-
CONFIG_CHECK_KEYS = %w[Enabled Safe SafeAutoCorrect AutoCorrect].to_set.freeze
|
|
21
|
+
CONFIG_CHECK_KEYS = %w[Enabled Safe SafeAutoCorrect AutoCorrect References].to_set.freeze
|
|
22
22
|
CONFIG_CHECK_DEPARTMENTS = %w[pending override_department].freeze
|
|
23
23
|
CONFIG_CHECK_AUTOCORRECTS = %w[always contextual disabled].freeze
|
|
24
24
|
private_constant :CONFIG_CHECK_KEYS, :CONFIG_CHECK_DEPARTMENTS
|
|
@@ -118,6 +118,7 @@ module RuboCop
|
|
|
118
118
|
invalid_cop_names.each do |name|
|
|
119
119
|
# There could be a custom cop with this name. If so, don't warn
|
|
120
120
|
next if Cop::Registry.global.contains_cop_matching?([name])
|
|
121
|
+
next if ConfigObsoletion.deprecated_cop_name?(name)
|
|
121
122
|
|
|
122
123
|
# Special case for inherit_mode, which is a directive that we keep in
|
|
123
124
|
# the configuration (even though it's not a cop), because it's easier
|
|
@@ -259,8 +260,7 @@ module RuboCop
|
|
|
259
260
|
end
|
|
260
261
|
end
|
|
261
262
|
|
|
262
|
-
# rubocop:disable Metrics/
|
|
263
|
-
def check_cop_config_value(hash, parent = nil)
|
|
263
|
+
def check_cop_config_value(hash, parent = nil) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
264
264
|
hash.each do |key, value|
|
|
265
265
|
check_cop_config_value(value, key) if value.is_a?(Hash)
|
|
266
266
|
|
|
@@ -270,6 +270,8 @@ module RuboCop
|
|
|
270
270
|
supposed_values = 'a boolean'
|
|
271
271
|
elsif key == 'AutoCorrect' && !CONFIG_CHECK_AUTOCORRECTS.include?(value)
|
|
272
272
|
supposed_values = '`always`, `contextual`, `disabled`, or a boolean'
|
|
273
|
+
elsif key == 'References'
|
|
274
|
+
supposed_values = 'an array of strings'
|
|
273
275
|
else
|
|
274
276
|
next
|
|
275
277
|
end
|
|
@@ -277,7 +279,6 @@ module RuboCop
|
|
|
277
279
|
raise ValidationError, param_error_message(parent, key, value, supposed_values)
|
|
278
280
|
end
|
|
279
281
|
end
|
|
280
|
-
# rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity
|
|
281
282
|
|
|
282
283
|
# FIXME: Handling colors in exception messages like this is ugly.
|
|
283
284
|
def param_error_message(parent, key, value, supposed_values)
|
|
@@ -35,8 +35,8 @@ module RuboCop
|
|
|
35
35
|
# `false` is the same as `disabled` for backward compatibility.
|
|
36
36
|
return false if ['disabled', false].include?(cop_config['AutoCorrect'])
|
|
37
37
|
|
|
38
|
-
# When LSP is enabled, it is considered as editing
|
|
39
|
-
# and autocorrection with `AutoCorrect: contextual` will not be performed.
|
|
38
|
+
# When LSP is enabled or the `--editor-mode` option is on, it is considered as editing
|
|
39
|
+
# source code, and autocorrection with `AutoCorrect: contextual` will not be performed.
|
|
40
40
|
return false if contextual_autocorrect? && LSP.enabled?
|
|
41
41
|
|
|
42
42
|
# :safe_autocorrect is a derived option based on several command-line
|
|
@@ -50,7 +50,7 @@ module RuboCop
|
|
|
50
50
|
|
|
51
51
|
def disable_offense(offense_range)
|
|
52
52
|
unbreakable_range = multiline_ranges(offense_range)&.find do |range|
|
|
53
|
-
|
|
53
|
+
eol_comment_would_be_inside_literal?(offense_range, range)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
if unbreakable_range
|
|
@@ -75,22 +75,26 @@ module RuboCop
|
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
def disable_offense_with_eol_or_surround_comment(range)
|
|
78
|
-
|
|
79
|
-
needed_line_length = (range.source_line + eol_comment).length
|
|
80
|
-
|
|
81
|
-
if needed_line_length <= max_line_length
|
|
82
|
-
disable_offense_at_end_of_line(range_of_first_line(range), eol_comment)
|
|
83
|
-
else
|
|
78
|
+
if line_with_eol_comment_too_long?(range)
|
|
84
79
|
disable_offense_before_and_after(range_by_lines(range))
|
|
80
|
+
else
|
|
81
|
+
disable_offense_at_end_of_line(range_of_first_line(range))
|
|
85
82
|
end
|
|
86
83
|
end
|
|
87
84
|
|
|
88
|
-
def
|
|
89
|
-
|
|
85
|
+
def eol_comment_would_be_inside_literal?(offense_range, literal_range)
|
|
86
|
+
return true if line_with_eol_comment_too_long?(offense_range)
|
|
87
|
+
|
|
88
|
+
offense_line = offense_range.line
|
|
89
|
+
offense_line >= literal_range.first_line && offense_line < literal_range.last_line
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def line_with_eol_comment_too_long?(range)
|
|
93
|
+
(range.source_line + eol_comment).length > max_line_length
|
|
90
94
|
end
|
|
91
95
|
|
|
92
96
|
def surrounding_heredoc?(node)
|
|
93
|
-
node.
|
|
97
|
+
node.any_str_type? && node.heredoc?
|
|
94
98
|
end
|
|
95
99
|
|
|
96
100
|
def heredoc_range(node)
|
|
@@ -102,7 +106,7 @@ module RuboCop
|
|
|
102
106
|
end
|
|
103
107
|
|
|
104
108
|
def string_continuation?(node)
|
|
105
|
-
node.
|
|
109
|
+
node.any_str_type? && node.source.match?(/\\\s*$/)
|
|
106
110
|
end
|
|
107
111
|
|
|
108
112
|
def multiline_string?(node)
|
|
@@ -132,10 +136,14 @@ module RuboCop
|
|
|
132
136
|
config.for_cop('Layout/LineLength')['Max'] || 120
|
|
133
137
|
end
|
|
134
138
|
|
|
135
|
-
def disable_offense_at_end_of_line(range
|
|
139
|
+
def disable_offense_at_end_of_line(range)
|
|
136
140
|
Corrector.new(range).insert_after(range, eol_comment)
|
|
137
141
|
end
|
|
138
142
|
|
|
143
|
+
def eol_comment
|
|
144
|
+
" # rubocop:todo #{cop_name}"
|
|
145
|
+
end
|
|
146
|
+
|
|
139
147
|
def disable_offense_before_and_after(range_by_lines)
|
|
140
148
|
range_with_newline = range_by_lines.resize(range_by_lines.size + 1)
|
|
141
149
|
leading_whitespace = range_by_lines.source_line[/^\s*/]
|
|
@@ -45,7 +45,7 @@ module RuboCop
|
|
|
45
45
|
|
|
46
46
|
gem_declarations(processed_source.ast)
|
|
47
47
|
.each_cons(2) do |previous, current|
|
|
48
|
-
next unless consecutive_lines(previous, current)
|
|
48
|
+
next unless consecutive_lines?(previous, current)
|
|
49
49
|
next unless case_insensitive_out_of_order?(gem_name(current), gem_name(previous))
|
|
50
50
|
|
|
51
51
|
register_offense(previous, current)
|