rubocop 1.84.2 → 1.88.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/config/default.yml +180 -86
- data/config/obsoletion.yml +26 -1
- data/lib/rubocop/cache_config.rb +1 -1
- data/lib/rubocop/cli/command/auto_generate_config.rb +34 -2
- data/lib/rubocop/cli/command/list_enabled_cops_for.rb +40 -0
- data/lib/rubocop/cli/command/mcp.rb +19 -0
- data/lib/rubocop/cli/command/show_cops.rb +2 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +4 -8
- data/lib/rubocop/cli/command/suggest_extensions.rb +1 -1
- data/lib/rubocop/cli.rb +9 -7
- data/lib/rubocop/comment_config.rb +12 -15
- data/lib/rubocop/config.rb +14 -10
- data/lib/rubocop/config_finder.rb +1 -1
- data/lib/rubocop/config_loader.rb +17 -2
- data/lib/rubocop/config_loader_resolver.rb +13 -4
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -2
- data/lib/rubocop/config_store.rb +2 -2
- data/lib/rubocop/config_validator.rb +1 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +2 -1
- data/lib/rubocop/cop/base.rb +25 -4
- data/lib/rubocop/cop/bundler/gem_comment.rb +2 -2
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -5
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +33 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors.rb +28 -0
- data/lib/rubocop/cop/documentation.rb +2 -3
- data/lib/rubocop/cop/exclude_limit.rb +31 -5
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/require_mfa.rb +5 -5
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
- data/lib/rubocop/cop/internal_affairs/itblock_handler.rb +69 -0
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +5 -3
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +41 -4
- data/lib/rubocop/cop/layout/class_structure.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +23 -7
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +12 -2
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +16 -2
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +16 -2
- data/lib/rubocop/cop/layout/end_alignment.rb +8 -5
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +7 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +12 -0
- data/lib/rubocop/cop/layout/line_length.rb +5 -3
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +9 -2
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +53 -3
- data/lib/rubocop/cop/layout/parameter_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/redundant_line_break.rb +3 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -1
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -0
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -11
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb +1 -10
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/constant_reassignment.rb +93 -11
- data/lib/rubocop/cop/lint/constant_resolution.rb +6 -6
- data/lib/rubocop/cop/lint/data_define_override.rb +63 -0
- data/lib/rubocop/cop/lint/debugger.rb +0 -1
- data/lib/rubocop/cop/lint/deprecated_constants.rb +2 -8
- data/lib/rubocop/cop/lint/duplicate_methods.rb +55 -8
- data/lib/rubocop/cop/lint/empty_block.rb +4 -4
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +6 -1
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +8 -1
- data/lib/rubocop/cop/lint/empty_when.rb +8 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +19 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +4 -2
- data/lib/rubocop/cop/lint/float_comparison.rb +1 -0
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +25 -5
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +11 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +8 -11
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +5 -5
- data/lib/rubocop/cop/lint/multiple_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -0
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +16 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +4 -2
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +19 -10
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +3 -0
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +7 -7
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +3 -13
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +4 -1
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +6 -12
- data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +15 -4
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +36 -12
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +4 -0
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +10 -3
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +5 -0
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +8 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +9 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +13 -4
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +2 -1
- data/lib/rubocop/cop/lint/require_relative_self_path.rb +7 -5
- data/lib/rubocop/cop/lint/rescue_type.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +18 -0
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +7 -1
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/script_permission.rb +5 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +24 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +14 -0
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +3 -1
- data/lib/rubocop/cop/lint/suppressed_exception_in_number_conversion.rb +12 -0
- data/lib/rubocop/cop/lint/symbol_conversion.rb +21 -4
- data/lib/rubocop/cop/lint/syntax.rb +25 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +28 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +5 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +4 -2
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +2 -2
- data/lib/rubocop/cop/lint/unreachable_pattern_branch.rb +113 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +10 -0
- data/lib/rubocop/cop/lint/useless_assignment.rb +14 -14
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +4 -4
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +2 -0
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +8 -4
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -1
- data/lib/rubocop/cop/lint/useless_times.rb +22 -1
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +35 -9
- data/lib/rubocop/cop/lint/void.rb +32 -12
- data/lib/rubocop/cop/metrics/block_length.rb +1 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +23 -0
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +1 -1
- data/lib/rubocop/cop/migration/department_name.rb +12 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_max.rb +6 -5
- data/lib/rubocop/cop/mixin/hash_transform_method/autocorrection.rb +63 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +10 -60
- data/lib/rubocop/cop/mixin/project_index_help.rb +48 -0
- data/lib/rubocop/cop/mixin.rb +86 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_method.rb +2 -2
- data/lib/rubocop/cop/naming/predicate_prefix.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/offense.rb +8 -0
- data/lib/rubocop/cop/registry.rb +62 -38
- data/lib/rubocop/cop/security/eval.rb +15 -2
- data/lib/rubocop/cop/security/io_methods.rb +1 -1
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +14 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +4 -2
- data/lib/rubocop/cop/style/alias.rb +15 -3
- data/lib/rubocop/cop/style/and_or.rb +2 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +25 -7
- data/lib/rubocop/cop/style/array_first_last.rb +12 -1
- data/lib/rubocop/cop/style/array_intersect.rb +4 -0
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +3 -0
- data/lib/rubocop/cop/style/array_join.rb +4 -2
- data/lib/rubocop/cop/style/ascii_comments.rb +6 -3
- data/lib/rubocop/cop/style/attr.rb +5 -2
- data/lib/rubocop/cop/style/bare_percent_literals.rb +3 -1
- data/lib/rubocop/cop/style/begin_block.rb +3 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +37 -31
- data/lib/rubocop/cop/style/case_equality.rb +18 -2
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/class_and_module_children.rb +18 -2
- data/lib/rubocop/cop/style/class_equality_comparison.rb +21 -13
- data/lib/rubocop/cop/style/class_methods_definitions.rb +11 -5
- data/lib/rubocop/cop/style/collection_compact.rb +36 -16
- data/lib/rubocop/cop/style/colon_method_call.rb +16 -7
- data/lib/rubocop/cop/style/combinable_loops.rb +5 -0
- data/lib/rubocop/cop/style/comparable_clamp.rb +12 -1
- data/lib/rubocop/cop/style/concat_array_literals.rb +7 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +6 -5
- data/lib/rubocop/cop/style/constant_visibility.rb +4 -1
- data/lib/rubocop/cop/style/copyright.rb +22 -11
- data/lib/rubocop/cop/style/date_time.rb +4 -4
- data/lib/rubocop/cop/style/dig_chain.rb +5 -0
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +6 -1
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +2 -0
- data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_class_definition.rb +43 -20
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/encoding.rb +7 -1
- data/lib/rubocop/cop/style/end_block.rb +3 -1
- data/lib/rubocop/cop/style/endless_method.rb +8 -3
- data/lib/rubocop/cop/style/fetch_env_var.rb +1 -1
- data/lib/rubocop/cop/style/file_open.rb +84 -0
- data/lib/rubocop/cop/style/file_write.rb +21 -16
- data/lib/rubocop/cop/style/for.rb +3 -0
- data/lib/rubocop/cop/style/format_string.rb +4 -3
- data/lib/rubocop/cop/style/format_string_token.rb +29 -2
- data/lib/rubocop/cop/style/global_vars.rb +5 -2
- data/lib/rubocop/cop/style/guard_clause.rb +9 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +21 -5
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -1
- data/lib/rubocop/cop/style/hash_lookup_method.rb +19 -7
- data/lib/rubocop/cop/style/hash_slice.rb +16 -0
- data/lib/rubocop/cop/style/hash_transform_keys.rb +17 -7
- data/lib/rubocop/cop/style/hash_transform_values.rb +17 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +16 -7
- data/lib/rubocop/cop/style/if_unless_modifier.rb +15 -4
- data/lib/rubocop/cop/style/if_with_semicolon.rb +7 -5
- data/lib/rubocop/cop/style/inline_comment.rb +4 -1
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/magic_comment_format.rb +3 -3
- data/lib/rubocop/cop/style/map_join.rb +123 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +5 -3
- data/lib/rubocop/cop/style/min_max_comparison.rb +1 -1
- data/lib/rubocop/cop/style/module_member_existence_check.rb +7 -14
- data/lib/rubocop/cop/style/multiline_if_then.rb +3 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +106 -12
- data/lib/rubocop/cop/style/nil_comparison.rb +2 -3
- data/lib/rubocop/cop/style/nil_lambda.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +5 -11
- data/lib/rubocop/cop/style/not.rb +2 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -2
- data/lib/rubocop/cop/style/one_class_per_file.rb +115 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +4 -3
- data/lib/rubocop/cop/style/parallel_assignment.rb +12 -1
- data/lib/rubocop/cop/style/partition_instead_of_double_select.rb +270 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -0
- data/lib/rubocop/cop/style/predicate_with_kind.rb +84 -0
- data/lib/rubocop/cop/style/proc.rb +3 -2
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/reduce_to_hash.rb +200 -0
- data/lib/rubocop/cop/style/redundant_array_constructor.rb +2 -2
- data/lib/rubocop/cop/style/redundant_begin.rb +3 -3
- data/lib/rubocop/cop/style/redundant_constant_base.rb +5 -5
- data/lib/rubocop/cop/style/redundant_each.rb +3 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -1
- data/lib/rubocop/cop/style/redundant_format.rb +1 -0
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +26 -10
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +16 -0
- data/lib/rubocop/cop/style/redundant_min_max_by.rb +93 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +25 -22
- data/lib/rubocop/cop/style/redundant_percent_q.rb +4 -1
- data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +2 -2
- data/lib/rubocop/cop/style/redundant_return.rb +3 -1
- data/lib/rubocop/cop/style/redundant_self.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +0 -5
- data/lib/rubocop/cop/style/redundant_struct_keyword_init.rb +114 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +31 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +3 -3
- data/lib/rubocop/cop/style/safe_navigation.rb +7 -7
- data/lib/rubocop/cop/style/select_by_kind.rb +158 -0
- data/lib/rubocop/cop/style/select_by_range.rb +197 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +51 -21
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +18 -1
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +3 -1
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +4 -2
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +13 -0
- data/lib/rubocop/cop/style/symbol_proc.rb +7 -6
- data/lib/rubocop/cop/style/tally_method.rb +181 -0
- data/lib/rubocop/cop/style/top_level_method_definition.rb +2 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -0
- data/lib/rubocop/cop/style/unless_logical_operators.rb +3 -3
- data/lib/rubocop/cop/style/while_until_do.rb +7 -0
- data/lib/rubocop/cop/style/while_until_modifier.rb +16 -0
- data/lib/rubocop/cop/style/word_array.rb +1 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +1 -1
- data/lib/rubocop/cop/style/yoda_expression.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -3
- data/lib/rubocop/cop/team.rb +86 -35
- data/lib/rubocop/cop/variable_force/branch.rb +2 -2
- data/lib/rubocop/directive_comment.rb +2 -1
- data/lib/rubocop/file_patterns.rb +9 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +19 -9
- data/lib/rubocop/formatter/formatter_set.rb +1 -1
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +0 -2
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
- data/lib/rubocop/formatter.rb +22 -21
- data/lib/rubocop/lsp/diagnostic.rb +1 -0
- data/lib/rubocop/lsp/routes.rb +10 -3
- data/lib/rubocop/lsp/runtime.rb +1 -2
- data/lib/rubocop/mcp/server.rb +200 -0
- data/lib/rubocop/options.rb +35 -4
- data/lib/rubocop/path_util.rb +14 -2
- data/lib/rubocop/plugin/loader.rb +1 -1
- data/lib/rubocop/project_index_loader.rb +66 -0
- data/lib/rubocop/result_cache.rb +22 -10
- data/lib/rubocop/rspec/cop_helper.rb +8 -0
- data/lib/rubocop/rspec/shared_contexts.rb +32 -2
- data/lib/rubocop/runner.rb +124 -53
- data/lib/rubocop/server/cache.rb +5 -7
- data/lib/rubocop/server/core.rb +8 -0
- data/lib/rubocop/target_finder.rb +14 -7
- data/lib/rubocop/target_ruby.rb +18 -12
- data/lib/rubocop/version.rb +21 -3
- data/lib/rubocop.rb +22 -96
- metadata +27 -5
data/config/obsoletion.yml
CHANGED
|
@@ -171,7 +171,7 @@ changed_parameters:
|
|
|
171
171
|
reason: "`SafeMode` has been removed. Use `SafeAutoCorrect` instead."
|
|
172
172
|
- cops: Bundler/GemComment
|
|
173
173
|
parameters: Whitelist
|
|
174
|
-
alternative:
|
|
174
|
+
alternative: AllowedGems
|
|
175
175
|
- cops:
|
|
176
176
|
- Lint/SafeNavigationChain
|
|
177
177
|
- Lint/SafeNavigationConsistency
|
|
@@ -238,6 +238,26 @@ changed_parameters:
|
|
|
238
238
|
reason: "`AllowOnlyRestArgument` has no effect with TargetRubyVersion >= 3.2."
|
|
239
239
|
severity: warning
|
|
240
240
|
minimum_ruby_version: 3.2
|
|
241
|
+
- cops: Bundler/GemComment
|
|
242
|
+
parameters: IgnoredGems
|
|
243
|
+
alternative: AllowedGems
|
|
244
|
+
severity: warning
|
|
245
|
+
- cops: Lint/NumberConversion
|
|
246
|
+
parameters: IgnoredClasses
|
|
247
|
+
alternative: AllowedClasses
|
|
248
|
+
severity: warning
|
|
249
|
+
- cops: Lint/MissingCopEnableDirective
|
|
250
|
+
parameters: MaximumRangeSize
|
|
251
|
+
alternative: MaxRangeSize
|
|
252
|
+
severity: warning
|
|
253
|
+
- cops: Metrics/CollectionLiteralLength
|
|
254
|
+
parameters: LengthThreshold
|
|
255
|
+
alternative: Max
|
|
256
|
+
severity: warning
|
|
257
|
+
- cops: Style/FetchEnvVar
|
|
258
|
+
parameters: AllowedVars
|
|
259
|
+
alternative: AllowedVariables
|
|
260
|
+
severity: warning
|
|
241
261
|
|
|
242
262
|
# Enforced styles that have been removed or replaced
|
|
243
263
|
changed_enforced_styles:
|
|
@@ -245,3 +265,8 @@ changed_enforced_styles:
|
|
|
245
265
|
parameters: EnforcedStyle
|
|
246
266
|
value: rails
|
|
247
267
|
alternative: indented_internal_methods
|
|
268
|
+
- cops: Style/EmptyClassDefinition
|
|
269
|
+
parameters: EnforcedStyle
|
|
270
|
+
value: class_definition
|
|
271
|
+
alternative: class_keyword
|
|
272
|
+
severity: warning
|
data/lib/rubocop/cache_config.rb
CHANGED
|
@@ -35,7 +35,7 @@ module RuboCop
|
|
|
35
35
|
root_dir do
|
|
36
36
|
next cache_root_override if cache_root_override
|
|
37
37
|
|
|
38
|
-
config_path = ConfigFinder.find_config_path(
|
|
38
|
+
config_path = ConfigFinder.find_config_path(PathUtil.pwd)
|
|
39
39
|
file_contents = File.read(config_path)
|
|
40
40
|
|
|
41
41
|
# Returns early if `CacheRootDirectory` is not used before requiring `erb` or `yaml`.
|
|
@@ -24,13 +24,45 @@ module RuboCop
|
|
|
24
24
|
|
|
25
25
|
def run
|
|
26
26
|
add_formatter
|
|
27
|
+
use_temporary_cache
|
|
28
|
+
reset_auto_gen_tmp_dir
|
|
27
29
|
reset_config_and_auto_gen_file
|
|
28
30
|
line_length_contents = maybe_run_line_length_cop
|
|
29
|
-
run_all_cops(line_length_contents)
|
|
31
|
+
result = run_all_cops(line_length_contents)
|
|
32
|
+
reset_auto_gen_tmp_dir
|
|
33
|
+
result
|
|
34
|
+
ensure
|
|
35
|
+
# `auto_gen_tmp_dir` points `ExcludeLimit.tmp_dir` at this command's
|
|
36
|
+
# tmp directory. Clear that process-global state on the way out so
|
|
37
|
+
# later in-process callers (e.g. other specs in the same test worker)
|
|
38
|
+
# don't read this run's leftover directory.
|
|
39
|
+
RuboCop::ExcludeLimit.tmp_dir = nil
|
|
30
40
|
end
|
|
31
41
|
|
|
32
42
|
private
|
|
33
43
|
|
|
44
|
+
def use_temporary_cache
|
|
45
|
+
# Use a separate cache directory to ensure MinDigits and Max values are calculated.
|
|
46
|
+
# This allows parallel execution (which requires cache) while ensuring MinDigits
|
|
47
|
+
# and Max values are computed, since the cache starts empty.
|
|
48
|
+
@options[:cache_root] = auto_gen_tmp_dir.join('cache').to_s
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def reset_auto_gen_tmp_dir
|
|
52
|
+
auto_gen_tmp_dir.rmtree if auto_gen_tmp_dir.exist?
|
|
53
|
+
auto_gen_tmp_dir.mkpath
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def auto_gen_tmp_dir
|
|
57
|
+
@auto_gen_tmp_dir ||= Pathname.new(
|
|
58
|
+
RuboCop::CacheConfig.root_dir_from_toplevel_config
|
|
59
|
+
).join('auto-gen-tmp').tap do |path|
|
|
60
|
+
path.mkpath
|
|
61
|
+
# Set the temp directory path for ExcludeLimit to use
|
|
62
|
+
RuboCop::ExcludeLimit.tmp_dir = path
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
34
66
|
def maybe_run_line_length_cop
|
|
35
67
|
if only_exclude?
|
|
36
68
|
skip_line_length_cop(PHASE_1_SKIPPED_ONLY_EXCLUDE)
|
|
@@ -153,7 +185,7 @@ module RuboCop
|
|
|
153
185
|
def relative_path_to_todo_from_options_config
|
|
154
186
|
return AUTO_GENERATED_FILE unless @options[:config]
|
|
155
187
|
|
|
156
|
-
base = Pathname.new(
|
|
188
|
+
base = Pathname.new(PathUtil.pwd)
|
|
157
189
|
config_dir = Pathname.new(@options[:config]).realpath.dirname
|
|
158
190
|
|
|
159
191
|
# Don't have the path start with `/`
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
class CLI
|
|
5
|
+
module Command
|
|
6
|
+
# Lists the cops that will inspect the given file or directory.
|
|
7
|
+
# @api private
|
|
8
|
+
class ListEnabledCopsFor < Base
|
|
9
|
+
self.command_name = :list_enabled_cops_for
|
|
10
|
+
|
|
11
|
+
def initialize(env)
|
|
12
|
+
super
|
|
13
|
+
|
|
14
|
+
# Load the configs so the require()s are done for custom cops
|
|
15
|
+
@config = @config_store.for(@options[:list_enabled_cops_for])
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def run
|
|
19
|
+
print_available_cops
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def print_available_cops
|
|
25
|
+
registry = Cop::Registry.global
|
|
26
|
+
|
|
27
|
+
registry.departments.sort.each do |department|
|
|
28
|
+
puts cops_of_department(registry, department).sort
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def cops_of_department(registry, department)
|
|
33
|
+
registry.with_department(department)
|
|
34
|
+
.map(&:cop_name)
|
|
35
|
+
.select { |cop_name| @config.cop_enabled?(cop_name) }
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
class CLI
|
|
5
|
+
module Command
|
|
6
|
+
# Start Model Context Protocol of RuboCop.
|
|
7
|
+
# @api private
|
|
8
|
+
class MCP < Base
|
|
9
|
+
self.command_name = :mcp
|
|
10
|
+
|
|
11
|
+
def run
|
|
12
|
+
require_relative '../../mcp/server'
|
|
13
|
+
|
|
14
|
+
RuboCop::MCP::Server.new(@config_store).start
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -25,7 +25,7 @@ module RuboCop
|
|
|
25
25
|
super
|
|
26
26
|
|
|
27
27
|
# Load the configs so the require()s are done for custom cops
|
|
28
|
-
@config = @config_store.for(
|
|
28
|
+
@config = @config_store.for(PathUtil.pwd)
|
|
29
29
|
|
|
30
30
|
@cop_matchers = @options[:show_cops].map do |pattern|
|
|
31
31
|
if pattern.include?('*')
|
|
@@ -46,7 +46,7 @@ module RuboCop
|
|
|
46
46
|
registry = Cop::Registry.global
|
|
47
47
|
show_all = @cop_matchers.empty?
|
|
48
48
|
|
|
49
|
-
puts "# Available cops (#{registry.length}) + config for #{
|
|
49
|
+
puts "# Available cops (#{registry.length}) + config for #{PathUtil.pwd}: " if show_all
|
|
50
50
|
|
|
51
51
|
registry.departments.sort!.each do |department|
|
|
52
52
|
print_cops_of_department(registry, department, show_all)
|
|
@@ -12,7 +12,7 @@ module RuboCop
|
|
|
12
12
|
def initialize(env)
|
|
13
13
|
super
|
|
14
14
|
|
|
15
|
-
@config = @config_store.for(
|
|
15
|
+
@config = @config_store.for(PathUtil.pwd)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def run
|
|
@@ -25,10 +25,10 @@ module RuboCop
|
|
|
25
25
|
puts Cop::Documentation.default_base_url if cops_array.empty?
|
|
26
26
|
|
|
27
27
|
cops_array.each do |cop_name|
|
|
28
|
-
cop =
|
|
29
|
-
next
|
|
28
|
+
cop = Cop::Registry.global.find_by_cop_name(cop_name)
|
|
29
|
+
next unless cop
|
|
30
30
|
|
|
31
|
-
url = Cop::Documentation.url_for(cop
|
|
31
|
+
url = Cop::Documentation.url_for(cop, @config)
|
|
32
32
|
puts url if url
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -38,10 +38,6 @@ module RuboCop
|
|
|
38
38
|
def cops_array
|
|
39
39
|
@cops_array ||= @options[:show_docs_url]
|
|
40
40
|
end
|
|
41
|
-
|
|
42
|
-
def registry_hash
|
|
43
|
-
@registry_hash ||= Cop::Registry.global.to_h
|
|
44
|
-
end
|
|
45
41
|
end
|
|
46
42
|
end
|
|
47
43
|
end
|
|
@@ -60,7 +60,7 @@ module RuboCop
|
|
|
60
60
|
def print_opt_out_instruction
|
|
61
61
|
puts
|
|
62
62
|
puts 'You can opt out of this message by adding the following to your config ' \
|
|
63
|
-
'(see https://docs.rubocop.org/rubocop/
|
|
63
|
+
'(see https://docs.rubocop.org/rubocop/plugins.html#plugin-suggestions ' \
|
|
64
64
|
'for more options):'
|
|
65
65
|
puts ' AllCops:'
|
|
66
66
|
puts ' SuggestExtensions: false'
|
data/lib/rubocop/cli.rb
CHANGED
|
@@ -13,7 +13,7 @@ module RuboCop
|
|
|
13
13
|
DEFAULT_PARALLEL_OPTIONS = %i[
|
|
14
14
|
color config debug display_style_guide display_time display_only_fail_level_offenses
|
|
15
15
|
display_only_failed editor_mode except extra_details fail_level fix_layout format formatters
|
|
16
|
-
ignore_disable_comments lint only only_guide_cops require safe
|
|
16
|
+
ignore_disable_comments lint only only_guide_cops out require safe
|
|
17
17
|
autocorrect safe_autocorrect autocorrect_all
|
|
18
18
|
].freeze
|
|
19
19
|
|
|
@@ -76,7 +76,9 @@ module RuboCop
|
|
|
76
76
|
STATUS_ERROR
|
|
77
77
|
ensure
|
|
78
78
|
elapsed_time = Process.clock_gettime(Process::CLOCK_MONOTONIC) - time_start
|
|
79
|
-
|
|
79
|
+
if @options[:debug] || @options[:display_time]
|
|
80
|
+
puts "Finished in #{elapsed_time.round(5)} seconds"
|
|
81
|
+
end
|
|
80
82
|
end
|
|
81
83
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
82
84
|
|
|
@@ -187,6 +189,8 @@ module RuboCop
|
|
|
187
189
|
ConfigLoader.enable_pending_cops = @options[:enable_pending_cops]
|
|
188
190
|
ConfigLoader.ignore_parent_exclusion = @options[:ignore_parent_exclusion]
|
|
189
191
|
ConfigLoader.ignore_unrecognized_cops = @options[:ignore_unrecognized_cops]
|
|
192
|
+
ConfigLoader.enabled_by_default = @options[:enable_all_cops]
|
|
193
|
+
ConfigLoader.disabled_by_default = @options[:disable_all_cops]
|
|
190
194
|
end
|
|
191
195
|
|
|
192
196
|
def set_options_to_pending_cops_reporter
|
|
@@ -198,17 +202,15 @@ module RuboCop
|
|
|
198
202
|
RuboCop::LSP.enable if @options[:editor_mode]
|
|
199
203
|
end
|
|
200
204
|
|
|
201
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
|
202
205
|
def handle_exiting_options
|
|
203
206
|
return unless Options::EXITING_OPTIONS.any? { |o| @options.key? o }
|
|
204
207
|
|
|
205
208
|
run_command(:version) if @options[:version] || @options[:verbose_version]
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
+
%i[show_cops list_enabled_cops_for show_docs_url lsp mcp].each do |name|
|
|
210
|
+
run_command(name) if @options[name]
|
|
211
|
+
end
|
|
209
212
|
raise Finished
|
|
210
213
|
end
|
|
211
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
|
212
214
|
|
|
213
215
|
def apply_default_formatter
|
|
214
216
|
# This must be done after the options have already been processed,
|
|
@@ -95,7 +95,8 @@ module RuboCop
|
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
99
|
+
def analyze
|
|
99
100
|
return {} if @no_directives
|
|
100
101
|
|
|
101
102
|
analyses = Hash.new { |hash, key| hash[key] = CopAnalysis.new([], nil) }
|
|
@@ -103,9 +104,9 @@ module RuboCop
|
|
|
103
104
|
|
|
104
105
|
each_directive do |directive|
|
|
105
106
|
if directive.push?
|
|
106
|
-
|
|
107
|
-
@stack.push(
|
|
108
|
-
apply_push(analyses,
|
|
107
|
+
restore_point = analyses.transform_values(&:dup)
|
|
108
|
+
@stack.push(restore_point)
|
|
109
|
+
apply_push(analyses, resolve_push_cops(directive), directive.line_number)
|
|
109
110
|
elsif directive.pop?
|
|
110
111
|
pop_state(analyses, directive.line_number) if @stack.any?
|
|
111
112
|
else
|
|
@@ -121,10 +122,7 @@ module RuboCop
|
|
|
121
122
|
hash[cop_name] = cop_line_ranges(analysis)
|
|
122
123
|
end
|
|
123
124
|
end
|
|
124
|
-
|
|
125
|
-
def snapshot_cops(analyses, cop_names)
|
|
126
|
-
cop_names.to_h { |name| [name, analyses[name].dup] }
|
|
127
|
-
end
|
|
125
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
128
126
|
|
|
129
127
|
def resolve_push_cops(directive)
|
|
130
128
|
directive.push_args.transform_values do |names|
|
|
@@ -155,13 +153,12 @@ module RuboCop
|
|
|
155
153
|
end
|
|
156
154
|
|
|
157
155
|
def pop_state(analyses, line)
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
new_range =
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
analyses[cop] = CopAnalysis.new(ranges, new_start)
|
|
156
|
+
restore_point = @stack.pop
|
|
157
|
+
(restore_point.keys | analyses.keys).each do |cop|
|
|
158
|
+
current = analyses[cop]
|
|
159
|
+
new_range = current.start_line_number ? [current.start_line_number..(line - 1)] : []
|
|
160
|
+
new_start = restore_point[cop]&.start_line_number ? line : nil
|
|
161
|
+
analyses[cop] = CopAnalysis.new(current.line_ranges + new_range, new_start)
|
|
165
162
|
end
|
|
166
163
|
end
|
|
167
164
|
|
data/lib/rubocop/config.rb
CHANGED
|
@@ -217,6 +217,9 @@ module RuboCop
|
|
|
217
217
|
for_all_cops['StringLiteralsFrozenByDefault']
|
|
218
218
|
end
|
|
219
219
|
|
|
220
|
+
# Returns true if the file matches any include pattern. If a block is given, the block is called
|
|
221
|
+
# to determine if the pattern is relevant (true returned by the block) or should be skipped
|
|
222
|
+
# (false returned).
|
|
220
223
|
def file_to_include?(file)
|
|
221
224
|
relative_file_path = path_relative_to_config(file)
|
|
222
225
|
|
|
@@ -228,11 +231,9 @@ module RuboCop
|
|
|
228
231
|
absolute_file_path = File.expand_path(file)
|
|
229
232
|
|
|
230
233
|
patterns_to_include.any? do |pattern|
|
|
231
|
-
if block_given?
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
match_path?(pattern, relative_file_path) || match_path?(pattern, absolute_file_path)
|
|
235
|
-
end
|
|
234
|
+
next if block_given? && !yield(pattern)
|
|
235
|
+
|
|
236
|
+
match_relative_or_absolute_path?(pattern, relative_file_path, absolute_file_path)
|
|
236
237
|
end
|
|
237
238
|
end
|
|
238
239
|
|
|
@@ -242,10 +243,7 @@ module RuboCop
|
|
|
242
243
|
# `bundler-console` conveys `Bundler::Console`).
|
|
243
244
|
return true if File.extname(file) == '.gemspec'
|
|
244
245
|
|
|
245
|
-
file_to_include?(file)
|
|
246
|
-
/[A-Z]/.match?(pattern.to_s) &&
|
|
247
|
-
(match_path?(pattern, relative_path) || match_path?(pattern, absolute_path))
|
|
248
|
-
end
|
|
246
|
+
file_to_include?(file) { |pattern| /[A-Z]/.match?(pattern.to_s) }
|
|
249
247
|
end
|
|
250
248
|
|
|
251
249
|
# Returns true if there's a chance that an Include pattern matches hidden
|
|
@@ -286,7 +284,7 @@ module RuboCop
|
|
|
286
284
|
loaded_path != File.join(Dir.home, ConfigLoader::DOTFILE)
|
|
287
285
|
File.expand_path(File.dirname(loaded_path))
|
|
288
286
|
else
|
|
289
|
-
|
|
287
|
+
PathUtil.pwd
|
|
290
288
|
end
|
|
291
289
|
end
|
|
292
290
|
|
|
@@ -345,6 +343,12 @@ module RuboCop
|
|
|
345
343
|
|
|
346
344
|
private
|
|
347
345
|
|
|
346
|
+
def match_relative_or_absolute_path?(pattern, relative_file_path, absolute_file_path)
|
|
347
|
+
should_use_absolute_path = absolute?(pattern.to_s) || pattern.to_s.start_with?('..') ||
|
|
348
|
+
relative_file_path.start_with?('..')
|
|
349
|
+
match_path?(pattern, should_use_absolute_path ? absolute_file_path : relative_file_path)
|
|
350
|
+
end
|
|
351
|
+
|
|
348
352
|
# @return [Float, nil] The Rails version as a `major.minor` Float.
|
|
349
353
|
def target_rails_version_from_bundler_lock_file
|
|
350
354
|
@target_rails_version_from_bundler_lock_file ||= read_rails_version_from_bundler_lock_file
|
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
|
24
24
|
include FileFinder
|
|
25
25
|
|
|
26
26
|
attr_accessor :debug, :ignore_parent_exclusion, :disable_pending_cops, :enable_pending_cops,
|
|
27
|
-
:ignore_unrecognized_cops
|
|
27
|
+
:enabled_by_default, :disabled_by_default, :ignore_unrecognized_cops
|
|
28
28
|
attr_writer :default_configuration, :cache_root
|
|
29
29
|
attr_reader :loaded_plugins, :loaded_features
|
|
30
30
|
|
|
@@ -41,6 +41,8 @@ module RuboCop
|
|
|
41
41
|
@loaded_features = Set.new
|
|
42
42
|
@disable_pending_cops = nil
|
|
43
43
|
@enable_pending_cops = nil
|
|
44
|
+
@enabled_by_default = nil
|
|
45
|
+
@disabled_by_default = nil
|
|
44
46
|
@ignore_parent_exclusion = nil
|
|
45
47
|
@ignore_unrecognized_cops = nil
|
|
46
48
|
@cache_root = nil
|
|
@@ -121,7 +123,7 @@ module RuboCop
|
|
|
121
123
|
end
|
|
122
124
|
|
|
123
125
|
def configuration_from_file(config_file, check: true)
|
|
124
|
-
return default_configuration if config_file == DEFAULT_FILE
|
|
126
|
+
return apply_default_overrides(default_configuration) if config_file == DEFAULT_FILE
|
|
125
127
|
|
|
126
128
|
config = load_file(config_file, check: check)
|
|
127
129
|
config.validate_after_resolution if check
|
|
@@ -190,6 +192,19 @@ module RuboCop
|
|
|
190
192
|
resolver.merge_with_default(config, config_file, unset_nil: unset_nil)
|
|
191
193
|
end
|
|
192
194
|
|
|
195
|
+
# Applies CLI overrides for `AllCops/EnabledByDefault` and
|
|
196
|
+
# `AllCops/DisabledByDefault` to the given configuration. Used when the
|
|
197
|
+
# configuration would otherwise be returned without going through
|
|
198
|
+
# `merge_with_default` (e.g. there is no user-supplied `.rubocop.yml`).
|
|
199
|
+
def apply_default_overrides(config)
|
|
200
|
+
return config if @enabled_by_default.nil? && @disabled_by_default.nil?
|
|
201
|
+
|
|
202
|
+
hash = config.transform_values do |params|
|
|
203
|
+
params.is_a?(Hash) ? params.merge('Enabled' => !@disabled_by_default) : params
|
|
204
|
+
end
|
|
205
|
+
Config.new(hash, config.loaded_path)
|
|
206
|
+
end
|
|
207
|
+
|
|
193
208
|
# @api private
|
|
194
209
|
# Used to add plugins that were required inside a config or from
|
|
195
210
|
# the CLI using `--plugin`.
|
|
@@ -45,6 +45,7 @@ module RuboCop
|
|
|
45
45
|
base_config.each do |k, v|
|
|
46
46
|
next unless v.is_a?(Hash)
|
|
47
47
|
|
|
48
|
+
only_base_has_include = v.key?('Include') && !hash.dig(k, 'Include')
|
|
48
49
|
if hash.key?(k)
|
|
49
50
|
v = merge(v, hash[k],
|
|
50
51
|
cop_name: k, file: file, debug: debug,
|
|
@@ -52,7 +53,7 @@ module RuboCop
|
|
|
52
53
|
inherit_mode: determine_inherit_mode(hash, k))
|
|
53
54
|
end
|
|
54
55
|
hash[k] = v
|
|
55
|
-
fix_include_paths(base_config.loaded_path, hash, path, k, v) if
|
|
56
|
+
fix_include_paths(base_config.loaded_path, hash, path, k, v) if only_base_has_include
|
|
56
57
|
end
|
|
57
58
|
end
|
|
58
59
|
end
|
|
@@ -91,11 +92,11 @@ module RuboCop
|
|
|
91
92
|
# only cops from user configuration are enabled. If
|
|
92
93
|
# AllCops:EnabledByDefault is true, it changes the Enabled params so that
|
|
93
94
|
# only cops explicitly disabled in user configuration are disabled.
|
|
95
|
+
# When the `--disable-all-cops` or `--enable-all-cops` CLI option is given,
|
|
96
|
+
# it takes precedence over the configuration values.
|
|
94
97
|
def merge_with_default(config, config_file, unset_nil:)
|
|
95
98
|
default_configuration = ConfigLoader.default_configuration
|
|
96
|
-
|
|
97
|
-
disabled_by_default = config.for_all_cops['DisabledByDefault']
|
|
98
|
-
enabled_by_default = config.for_all_cops['EnabledByDefault']
|
|
99
|
+
disabled_by_default, enabled_by_default = resolve_default_overrides(config)
|
|
99
100
|
|
|
100
101
|
if disabled_by_default || enabled_by_default
|
|
101
102
|
default_configuration = transform(default_configuration) do |params|
|
|
@@ -168,6 +169,14 @@ module RuboCop
|
|
|
168
169
|
|
|
169
170
|
private
|
|
170
171
|
|
|
172
|
+
def resolve_default_overrides(config)
|
|
173
|
+
if ConfigLoader.disabled_by_default || ConfigLoader.enabled_by_default
|
|
174
|
+
[ConfigLoader.disabled_by_default, ConfigLoader.enabled_by_default]
|
|
175
|
+
else
|
|
176
|
+
[config.for_all_cops['DisabledByDefault'], config.for_all_cops['EnabledByDefault']]
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
171
180
|
def disabled?(hash, department)
|
|
172
181
|
hash[department].is_a?(Hash) && hash[department]['Enabled'] == false
|
|
173
182
|
end
|
|
@@ -39,8 +39,10 @@ module RuboCop
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def plugin_loaded?
|
|
42
|
-
# Plugins loaded via `
|
|
43
|
-
|
|
42
|
+
# Plugins loaded via `plugins` are Plugin objects with an `about.name` attribute.
|
|
43
|
+
# Plugins loaded via `require` are included in `loaded_features` as strings.
|
|
44
|
+
config.loaded_plugins.any? { |plugin| plugin.about.name == gem } ||
|
|
45
|
+
config.loaded_features.include?(gem)
|
|
44
46
|
end
|
|
45
47
|
end
|
|
46
48
|
end
|
data/lib/rubocop/config_store.rb
CHANGED
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def force_default_config!
|
|
39
|
-
@options_config = ConfigLoader.default_configuration
|
|
39
|
+
@options_config = ConfigLoader.apply_default_overrides(ConfigLoader.default_configuration)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def unvalidated
|
|
@@ -49,7 +49,7 @@ module RuboCop
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def for_pwd
|
|
52
|
-
for_dir(
|
|
52
|
+
for_dir(PathUtil.pwd)
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
# If type (file/dir) is known beforehand,
|
|
@@ -9,7 +9,7 @@ module RuboCop
|
|
|
9
9
|
|
|
10
10
|
# @api private
|
|
11
11
|
COMMON_PARAMS = %w[Exclude Include Severity inherit_mode AutoCorrect StyleGuide Details
|
|
12
|
-
Enabled Reference References].freeze
|
|
12
|
+
Enabled Reference References Safe SafeAutoCorrect].freeze
|
|
13
13
|
# @api private
|
|
14
14
|
INTERNAL_PARAMS = %w[Description StyleGuide
|
|
15
15
|
VersionAdded VersionChanged VersionRemoved
|
|
@@ -50,7 +50,8 @@ module RuboCop
|
|
|
50
50
|
|
|
51
51
|
def disable_offense(offense_range)
|
|
52
52
|
unbreakable_range = multiline_ranges(offense_range)&.find do |range|
|
|
53
|
-
|
|
53
|
+
offense_range.overlaps?(range) &&
|
|
54
|
+
eol_comment_would_be_inside_literal?(offense_range, range)
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
if unbreakable_range
|
data/lib/rubocop/cop/base.rb
CHANGED
|
@@ -41,6 +41,7 @@ module RuboCop
|
|
|
41
41
|
include AutocorrectLogic
|
|
42
42
|
|
|
43
43
|
attr_reader :config, :processed_source
|
|
44
|
+
attr_accessor :project_index
|
|
44
45
|
|
|
45
46
|
# Reports of an investigation.
|
|
46
47
|
# Immutable
|
|
@@ -306,7 +307,9 @@ module RuboCop
|
|
|
306
307
|
def ready
|
|
307
308
|
return self if self.class.support_multiple_source?
|
|
308
309
|
|
|
309
|
-
self.class.new(@config, @options)
|
|
310
|
+
self.class.new(@config, @options).tap do |fresh|
|
|
311
|
+
fresh.project_index = @project_index
|
|
312
|
+
end
|
|
310
313
|
end
|
|
311
314
|
|
|
312
315
|
### Reserved for Cop::Cop
|
|
@@ -416,7 +419,10 @@ module RuboCop
|
|
|
416
419
|
### Actually private methods
|
|
417
420
|
|
|
418
421
|
def reset_investigation
|
|
419
|
-
@currently_disabled_lines =
|
|
422
|
+
@currently_disabled_lines = nil
|
|
423
|
+
@current_offenses = nil
|
|
424
|
+
@processed_source = nil
|
|
425
|
+
@current_corrector = nil
|
|
420
426
|
end
|
|
421
427
|
|
|
422
428
|
# @return [Symbol, Corrector] offense status
|
|
@@ -492,8 +498,23 @@ module RuboCop
|
|
|
492
498
|
patterns = cop_config[parameter]
|
|
493
499
|
return default_result unless patterns
|
|
494
500
|
|
|
495
|
-
|
|
496
|
-
|
|
501
|
+
file_patterns = FilePatterns.from(patterns)
|
|
502
|
+
relative_file_path = config.path_relative_to_config(file)
|
|
503
|
+
return true if file_patterns.match?(relative_file_path)
|
|
504
|
+
|
|
505
|
+
if parameter == 'Include' && !relative_file_path.start_with?('..')
|
|
506
|
+
matches_absolute_include_pattern?(patterns, file)
|
|
507
|
+
else
|
|
508
|
+
file_patterns.match?(file)
|
|
509
|
+
end
|
|
510
|
+
end
|
|
511
|
+
|
|
512
|
+
def matches_absolute_include_pattern?(patterns, file)
|
|
513
|
+
absolute_file_path = absolute?(file) ? file : File.expand_path(file)
|
|
514
|
+
patterns.any? do |pattern|
|
|
515
|
+
(absolute?(pattern.to_s) || pattern.to_s.start_with?('..')) &&
|
|
516
|
+
match_path?(pattern, absolute_file_path)
|
|
517
|
+
end
|
|
497
518
|
end
|
|
498
519
|
|
|
499
520
|
def enabled_line?(line_number)
|
|
@@ -128,8 +128,8 @@ module RuboCop
|
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
def ignored_gem?(node)
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
allowed_gems = Array(cop_config['AllowedGems'])
|
|
132
|
+
allowed_gems.include?(node.first_argument.value)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
def checked_options_present?(node)
|
|
@@ -59,11 +59,7 @@ module RuboCop
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def content_if_comment_present(corrector, node)
|
|
62
|
-
|
|
63
|
-
children(node).last.source_range,
|
|
64
|
-
side: :right
|
|
65
|
-
).end.resize(1)
|
|
66
|
-
if range.source == '#'
|
|
62
|
+
if processed_source.comment_at_line(children(node).last.last_line)
|
|
67
63
|
select_content_to_be_inserted_after_last_element(corrector, node)
|
|
68
64
|
else
|
|
69
65
|
node.loc.end.source
|