rubocop 1.84.2 → 1.87.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 +106 -16
- data/config/obsoletion.yml +5 -0
- data/lib/rubocop/cache_config.rb +1 -1
- data/lib/rubocop/cli/command/auto_generate_config.rb +28 -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 +8 -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.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/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_block_association.rb +1 -1
- 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/deprecated_constants.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +55 -8
- data/lib/rubocop/cop/lint/empty_block.rb +1 -1
- 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/erb_new_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +7 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -1
- 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/non_deterministic_require_order.rb +4 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -6
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +3 -13
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +2 -11
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +23 -6
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +3 -3
- data/lib/rubocop/cop/lint/require_relative_self_path.rb +3 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -0
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +7 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +25 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -0
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +1 -1
- 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 +4 -9
- 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 +1 -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/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 +14 -2
- data/lib/rubocop/cop/style/and_or.rb +1 -0
- data/lib/rubocop/cop/style/arguments_forwarding.rb +25 -7
- 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 +25 -33
- data/lib/rubocop/cop/style/case_equality.rb +4 -0
- 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/collection_compact.rb +36 -16
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -1
- data/lib/rubocop/cop/style/concat_array_literals.rb +2 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +0 -4
- data/lib/rubocop/cop/style/copyright.rb +22 -11
- data/lib/rubocop/cop/style/date_time.rb +2 -2
- 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/file_open.rb +84 -0
- data/lib/rubocop/cop/style/file_write.rb +18 -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_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 +14 -3
- 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 +1 -1
- 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 +4 -0
- 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_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 +2 -0
- 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_modifier.rb +16 -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/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 +5 -2
- 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 +2 -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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9386e7f8b3fc90e4096eb5436a4d35612586e27dd1ff46ba40e1051a7909fd52
|
|
4
|
+
data.tar.gz: 615ec2ec69759dce081efc1fddb8469a7ddf6a72223fea741368b501f333bce0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c07cb70ee9d4c997a85c079361624d43574b78e6c364e8d0ff939b4d826c19b0e1ef2aad9569aea4f2f247b9b792ae9b21a776f69161da1c9a193e2f3de74d40
|
|
7
|
+
data.tar.gz: f6b44267bdfeba1237e06af52009143f13a7c0419a5ccaddf47dc9701c328f2b2ef6d87811ae5c8f05ece533ca236425e599c77a5a283ba44c641de09fc1b7e6
|
data/config/default.yml
CHANGED
|
@@ -3,20 +3,16 @@
|
|
|
3
3
|
AllCops:
|
|
4
4
|
RubyInterpreters:
|
|
5
5
|
- ruby
|
|
6
|
-
- macruby
|
|
7
6
|
- rake
|
|
8
7
|
- jruby
|
|
9
|
-
- rbx
|
|
10
8
|
# Include common Ruby source files.
|
|
11
9
|
Include:
|
|
12
10
|
- '**/*.rb'
|
|
13
11
|
- '**/*.arb'
|
|
14
12
|
- '**/*.axlsx'
|
|
15
13
|
- '**/*.builder'
|
|
16
|
-
- '**/*.fcgi'
|
|
17
14
|
- '**/*.gemfile'
|
|
18
15
|
- '**/*.gemspec'
|
|
19
|
-
- '**/*.god'
|
|
20
16
|
- '**/*.jb'
|
|
21
17
|
- '**/*.jbuilder'
|
|
22
18
|
- '**/*.mspec'
|
|
@@ -25,15 +21,12 @@ AllCops:
|
|
|
25
21
|
- '**/*.podspec'
|
|
26
22
|
- '**/*.rabl'
|
|
27
23
|
- '**/*.rake'
|
|
28
|
-
- '**/*.rbuild'
|
|
29
24
|
- '**/*.rbw'
|
|
30
|
-
- '**/*.rbx'
|
|
31
25
|
- '**/*.ru'
|
|
32
26
|
- '**/*.ruby'
|
|
33
27
|
- '**/*.schema'
|
|
34
28
|
- '**/*.spec'
|
|
35
29
|
- '**/*.thor'
|
|
36
|
-
- '**/*.watchr'
|
|
37
30
|
- '**/.irbrc'
|
|
38
31
|
- '**/.pryrc'
|
|
39
32
|
- '**/.simplecov'
|
|
@@ -43,7 +36,6 @@ AllCops:
|
|
|
43
36
|
- '**/Brewfile'
|
|
44
37
|
- '**/Buildfile'
|
|
45
38
|
- '**/Capfile'
|
|
46
|
-
- '**/Cheffile'
|
|
47
39
|
- '**/Dangerfile'
|
|
48
40
|
- '**/Deliverfile'
|
|
49
41
|
- '**/Fastfile'
|
|
@@ -60,7 +52,6 @@ AllCops:
|
|
|
60
52
|
- '**/Snapfile'
|
|
61
53
|
- '**/Steepfile'
|
|
62
54
|
- '**/Thorfile'
|
|
63
|
-
- '**/Vagabondfile'
|
|
64
55
|
- '**/Vagrantfile'
|
|
65
56
|
Exclude:
|
|
66
57
|
- 'node_modules/**/*'
|
|
@@ -113,11 +104,17 @@ AllCops:
|
|
|
113
104
|
# When `NewCops` is `disable`, pending cops are disabled in bulk. Can be overridden by
|
|
114
105
|
# the `--disable-pending-cops` command-line option.
|
|
115
106
|
NewCops: pending
|
|
107
|
+
# When `true`, RuboCop builds a project index (a project-wide map of declarations and references)
|
|
108
|
+
# once per run and makes it available to cops that opt in.
|
|
109
|
+
# The project index is implemented by the optional `rubydex` gem; when `rubydex` is not installed,
|
|
110
|
+
# a warning is shown and the flag has no effect.
|
|
111
|
+
# The default `false` preserves RuboCop's traditional file-local analysis.
|
|
112
|
+
UseProjectIndex: false
|
|
116
113
|
# Enables the result cache if `true`. Can be overridden by the `--cache` command
|
|
117
114
|
# line option.
|
|
118
115
|
UseCache: true
|
|
119
116
|
# Threshold for how many files can be stored in the result cache before some
|
|
120
|
-
# of the files are automatically removed.
|
|
117
|
+
# of the files are automatically removed. Set to false to disable cache pruning.
|
|
121
118
|
MaxFilesInCache: 20000
|
|
122
119
|
# The cache will be stored in "rubocop_cache" under this directory. If
|
|
123
120
|
# CacheRootDirectory is ~ (nil), which it is by default, the root will be
|
|
@@ -538,6 +535,10 @@ Layout/ClosingParenthesisIndentation:
|
|
|
538
535
|
Description: 'Checks the indentation of hanging closing parentheses.'
|
|
539
536
|
Enabled: true
|
|
540
537
|
VersionAdded: '0.49'
|
|
538
|
+
VersionChanged: '1.86'
|
|
539
|
+
# By default the indentation width from `Layout/IndentationWidth` is used,
|
|
540
|
+
# but it can be overridden by setting this parameter.
|
|
541
|
+
IndentationWidth: ~
|
|
541
542
|
|
|
542
543
|
Layout/CommentIndentation:
|
|
543
544
|
Description: 'Indentation of comments.'
|
|
@@ -546,7 +547,10 @@ Layout/CommentIndentation:
|
|
|
546
547
|
# with a comment on the preceding line.
|
|
547
548
|
AllowForAlignment: false
|
|
548
549
|
VersionAdded: '0.49'
|
|
549
|
-
VersionChanged: '1.
|
|
550
|
+
VersionChanged: '1.86'
|
|
551
|
+
# By default the indentation width from `Layout/IndentationWidth` is used,
|
|
552
|
+
# but it can be overridden by setting this parameter.
|
|
553
|
+
IndentationWidth: ~
|
|
550
554
|
|
|
551
555
|
Layout/ConditionPosition:
|
|
552
556
|
Description: >-
|
|
@@ -1705,6 +1709,7 @@ Lint/ConstantReassignment:
|
|
|
1705
1709
|
Description: 'Checks for constant reassignments.'
|
|
1706
1710
|
Enabled: pending
|
|
1707
1711
|
VersionAdded: '1.70'
|
|
1712
|
+
VersionChanged: '1.87'
|
|
1708
1713
|
|
|
1709
1714
|
Lint/ConstantResolution:
|
|
1710
1715
|
Description: 'Checks that constants are fully qualified with `::`.'
|
|
@@ -1720,6 +1725,11 @@ Lint/CopDirectiveSyntax:
|
|
|
1720
1725
|
Enabled: pending
|
|
1721
1726
|
VersionAdded: '1.72'
|
|
1722
1727
|
|
|
1728
|
+
Lint/DataDefineOverride:
|
|
1729
|
+
Description: 'Disallow overriding the `Data` built-in methods via `Data.define`.'
|
|
1730
|
+
Enabled: pending
|
|
1731
|
+
VersionAdded: '1.85'
|
|
1732
|
+
|
|
1723
1733
|
Lint/Debugger:
|
|
1724
1734
|
Description: 'Checks for debugger calls.'
|
|
1725
1735
|
Enabled: true
|
|
@@ -2409,8 +2419,9 @@ Lint/SafeNavigationConsistency:
|
|
|
2409
2419
|
consistent and appropriate safe navigation, without excess or deficiency,
|
|
2410
2420
|
is used for all method calls on the same object.
|
|
2411
2421
|
Enabled: true
|
|
2422
|
+
SafeAutoCorrect: false
|
|
2412
2423
|
VersionAdded: '0.55'
|
|
2413
|
-
VersionChanged: '
|
|
2424
|
+
VersionChanged: '1.85'
|
|
2414
2425
|
AllowedMethods:
|
|
2415
2426
|
- present?
|
|
2416
2427
|
- blank?
|
|
@@ -2587,6 +2598,11 @@ Lint/UnreachableLoop:
|
|
|
2587
2598
|
# eg. `exactly(2).times`
|
|
2588
2599
|
- !ruby/regexp /(exactly|at_least|at_most)\(\d+\)\.times/
|
|
2589
2600
|
|
|
2601
|
+
Lint/UnreachablePatternBranch:
|
|
2602
|
+
Description: 'Checks for unreachable `in` pattern branches after an unconditional catch-all pattern.'
|
|
2603
|
+
Enabled: pending
|
|
2604
|
+
VersionAdded: '1.85'
|
|
2605
|
+
|
|
2590
2606
|
Lint/UnusedBlockArgument:
|
|
2591
2607
|
Description: 'Checks for unused block arguments.'
|
|
2592
2608
|
StyleGuide: '#underscore-unused-vars'
|
|
@@ -3982,10 +3998,13 @@ Style/EmptyClassDefinition:
|
|
|
3982
3998
|
Description: 'Enforces consistent style for empty class definitions.'
|
|
3983
3999
|
Enabled: pending
|
|
3984
4000
|
VersionAdded: '1.84'
|
|
3985
|
-
|
|
4001
|
+
VersionChanged: '1.86'
|
|
4002
|
+
EnforcedStyle: class_keyword
|
|
3986
4003
|
SupportedStyles:
|
|
3987
|
-
-
|
|
4004
|
+
- class_keyword
|
|
3988
4005
|
- class_new
|
|
4006
|
+
- class_definition # Deprecated.
|
|
4007
|
+
AllowedParentClasses: []
|
|
3989
4008
|
|
|
3990
4009
|
Style/EmptyElse:
|
|
3991
4010
|
Description: 'Avoid empty else-clauses.'
|
|
@@ -4145,6 +4164,12 @@ Style/FileNull:
|
|
|
4145
4164
|
SafeAutoCorrect: false
|
|
4146
4165
|
VersionAdded: '1.69'
|
|
4147
4166
|
|
|
4167
|
+
Style/FileOpen:
|
|
4168
|
+
Description: 'Checks for `File.open` without a block, which can leak file descriptors.'
|
|
4169
|
+
Enabled: pending
|
|
4170
|
+
Safe: false
|
|
4171
|
+
VersionAdded: '1.85'
|
|
4172
|
+
|
|
4148
4173
|
Style/FileRead:
|
|
4149
4174
|
Description: 'Favor `File.(bin)read` convenience methods.'
|
|
4150
4175
|
StyleGuide: '#file-read'
|
|
@@ -4642,6 +4667,12 @@ Style/MapIntoArray:
|
|
|
4642
4667
|
VersionChanged: '1.67'
|
|
4643
4668
|
Safe: false
|
|
4644
4669
|
|
|
4670
|
+
Style/MapJoin:
|
|
4671
|
+
Description: 'Checks for redundant `map(&:to_s)` before `join`.'
|
|
4672
|
+
Enabled: pending
|
|
4673
|
+
Safe: false
|
|
4674
|
+
VersionAdded: '1.85'
|
|
4675
|
+
|
|
4645
4676
|
Style/MapToHash:
|
|
4646
4677
|
Description: 'Prefer `to_h` with a block over `map.to_h`.'
|
|
4647
4678
|
Enabled: pending
|
|
@@ -4779,7 +4810,6 @@ Style/ModuleMemberExistenceCheck:
|
|
|
4779
4810
|
Description: 'Checks for usage of `Module` methods returning arrays that can be replaced with equivalent predicates.'
|
|
4780
4811
|
Enabled: pending
|
|
4781
4812
|
VersionAdded: '1.82'
|
|
4782
|
-
AllowedMethods: []
|
|
4783
4813
|
|
|
4784
4814
|
Style/MultilineBlockChain:
|
|
4785
4815
|
Description: 'Avoid multi-line chains of blocks.'
|
|
@@ -5091,6 +5121,16 @@ Style/ObjectThen:
|
|
|
5091
5121
|
- then
|
|
5092
5122
|
- yield_self
|
|
5093
5123
|
|
|
5124
|
+
Style/OneClassPerFile:
|
|
5125
|
+
Description: 'Checks that each source file defines at most one top-level class or module.'
|
|
5126
|
+
Enabled: pending
|
|
5127
|
+
VersionAdded: '1.85'
|
|
5128
|
+
VersionChanged: '1.86'
|
|
5129
|
+
AllowedClasses: []
|
|
5130
|
+
Exclude:
|
|
5131
|
+
- 'spec/**/*'
|
|
5132
|
+
- 'test/**/*'
|
|
5133
|
+
|
|
5094
5134
|
Style/OneLineConditional:
|
|
5095
5135
|
Description: >-
|
|
5096
5136
|
Favor the ternary operator (?:) or multi-line constructs over
|
|
@@ -5179,6 +5219,14 @@ Style/ParenthesesAroundCondition:
|
|
|
5179
5219
|
AllowSafeAssignment: true
|
|
5180
5220
|
AllowInMultilineConditions: false
|
|
5181
5221
|
|
|
5222
|
+
Style/PartitionInsteadOfDoubleSelect:
|
|
5223
|
+
Description: >-
|
|
5224
|
+
Checks for consecutive `select`/`filter`/`find_all` and `reject` calls
|
|
5225
|
+
on the same receiver with the same block body.
|
|
5226
|
+
Enabled: pending
|
|
5227
|
+
Safe: false
|
|
5228
|
+
VersionAdded: '1.85'
|
|
5229
|
+
|
|
5182
5230
|
Style/PercentLiteralDelimiters:
|
|
5183
5231
|
Description: 'Use `%`-literal delimiters consistently.'
|
|
5184
5232
|
StyleGuide: '#percent-literal-braces'
|
|
@@ -5211,6 +5259,12 @@ Style/PerlBackrefs:
|
|
|
5211
5259
|
Enabled: true
|
|
5212
5260
|
VersionAdded: '0.13'
|
|
5213
5261
|
|
|
5262
|
+
Style/PredicateWithKind:
|
|
5263
|
+
Description: 'Prefer `any?(Klass)` to `any? { |x| x.is_a?(Klass) }`.'
|
|
5264
|
+
Enabled: pending
|
|
5265
|
+
SafeAutoCorrect: false
|
|
5266
|
+
VersionAdded: '1.85'
|
|
5267
|
+
|
|
5214
5268
|
Style/PreferredHashMethods:
|
|
5215
5269
|
Description: 'Checks use of `has_key?` and `has_value?` Hash methods.'
|
|
5216
5270
|
StyleGuide: '#hash-key'
|
|
@@ -5261,6 +5315,12 @@ Style/RandomWithOffset:
|
|
|
5261
5315
|
Enabled: true
|
|
5262
5316
|
VersionAdded: '0.52'
|
|
5263
5317
|
|
|
5318
|
+
Style/ReduceToHash:
|
|
5319
|
+
Description: 'Use `to_h { ... }` instead of `each_with_object`, `inject`, or `reduce` to build a hash.'
|
|
5320
|
+
Enabled: pending
|
|
5321
|
+
Safe: false
|
|
5322
|
+
VersionAdded: '1.85'
|
|
5323
|
+
|
|
5264
5324
|
Style/RedundantArgument:
|
|
5265
5325
|
Description: 'Checks for a redundant argument passed to certain methods.'
|
|
5266
5326
|
Enabled: pending
|
|
@@ -5430,6 +5490,11 @@ Style/RedundantLineContinuation:
|
|
|
5430
5490
|
Enabled: pending
|
|
5431
5491
|
VersionAdded: '1.49'
|
|
5432
5492
|
|
|
5493
|
+
Style/RedundantMinMaxBy:
|
|
5494
|
+
Description: 'Identifies places where `max_by`/`min_by` can be replaced by `max`/`min`.'
|
|
5495
|
+
Enabled: pending
|
|
5496
|
+
VersionAdded: '1.85'
|
|
5497
|
+
|
|
5433
5498
|
Style/RedundantParentheses:
|
|
5434
5499
|
Description: "Checks for parentheses that seem not to serve any purpose."
|
|
5435
5500
|
Enabled: true
|
|
@@ -5507,6 +5572,13 @@ Style/RedundantStringEscape:
|
|
|
5507
5572
|
Enabled: pending
|
|
5508
5573
|
VersionAdded: '1.37'
|
|
5509
5574
|
|
|
5575
|
+
Style/RedundantStructKeywordInit:
|
|
5576
|
+
Description: 'Checks for redundant `keyword_init` option for `Struct.new`.'
|
|
5577
|
+
Enabled: false
|
|
5578
|
+
SafeAutoCorrect: false
|
|
5579
|
+
VersionAdded: '1.85'
|
|
5580
|
+
VersionChanged: '1.86'
|
|
5581
|
+
|
|
5510
5582
|
Style/RegexpLiteral:
|
|
5511
5583
|
Description: 'Use / or %r around regular expressions.'
|
|
5512
5584
|
StyleGuide: '#percent-r'
|
|
@@ -5613,8 +5685,20 @@ Style/Sample:
|
|
|
5613
5685
|
Enabled: true
|
|
5614
5686
|
VersionAdded: '0.30'
|
|
5615
5687
|
|
|
5688
|
+
Style/SelectByKind:
|
|
5689
|
+
Description: 'Prefer grep/grep_v to select/reject/find/detect with a kind check.'
|
|
5690
|
+
Enabled: pending
|
|
5691
|
+
SafeAutoCorrect: false
|
|
5692
|
+
VersionAdded: '1.85'
|
|
5693
|
+
|
|
5694
|
+
Style/SelectByRange:
|
|
5695
|
+
Description: 'Prefer grep/grep_v to select/reject/find/detect with a range check.'
|
|
5696
|
+
Enabled: pending
|
|
5697
|
+
SafeAutoCorrect: false
|
|
5698
|
+
VersionAdded: '1.85'
|
|
5699
|
+
|
|
5616
5700
|
Style/SelectByRegexp:
|
|
5617
|
-
Description: 'Prefer grep/grep_v to select/reject with a regexp match.'
|
|
5701
|
+
Description: 'Prefer grep/grep_v to select/reject/find/detect with a regexp match.'
|
|
5618
5702
|
Enabled: pending
|
|
5619
5703
|
SafeAutoCorrect: false
|
|
5620
5704
|
VersionAdded: '1.22'
|
|
@@ -5873,6 +5957,12 @@ Style/SymbolProc:
|
|
|
5873
5957
|
AllowedPatterns: []
|
|
5874
5958
|
AllowComments: false
|
|
5875
5959
|
|
|
5960
|
+
Style/TallyMethod:
|
|
5961
|
+
Description: 'Prefer `Enumerable#tally` over manual counting patterns.'
|
|
5962
|
+
Enabled: pending
|
|
5963
|
+
Safe: false
|
|
5964
|
+
VersionAdded: '1.85'
|
|
5965
|
+
|
|
5876
5966
|
Style/TernaryParentheses:
|
|
5877
5967
|
Description: 'Checks for use of parentheses around ternary conditions.'
|
|
5878
5968
|
Enabled: true
|
data/config/obsoletion.yml
CHANGED
|
@@ -245,3 +245,8 @@ changed_enforced_styles:
|
|
|
245
245
|
parameters: EnforcedStyle
|
|
246
246
|
value: rails
|
|
247
247
|
alternative: indented_internal_methods
|
|
248
|
+
- cops: Style/EmptyClassDefinition
|
|
249
|
+
parameters: EnforcedStyle
|
|
250
|
+
value: class_definition
|
|
251
|
+
alternative: class_keyword
|
|
252
|
+
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,39 @@ 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
|
|
30
34
|
end
|
|
31
35
|
|
|
32
36
|
private
|
|
33
37
|
|
|
38
|
+
def use_temporary_cache
|
|
39
|
+
# Use a separate cache directory to ensure MinDigits and Max values are calculated.
|
|
40
|
+
# This allows parallel execution (which requires cache) while ensuring MinDigits
|
|
41
|
+
# and Max values are computed, since the cache starts empty.
|
|
42
|
+
@options[:cache_root] = auto_gen_tmp_dir.join('cache').to_s
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def reset_auto_gen_tmp_dir
|
|
46
|
+
auto_gen_tmp_dir.rmtree if auto_gen_tmp_dir.exist?
|
|
47
|
+
auto_gen_tmp_dir.mkpath
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def auto_gen_tmp_dir
|
|
51
|
+
@auto_gen_tmp_dir ||= Pathname.new(
|
|
52
|
+
RuboCop::CacheConfig.root_dir_from_toplevel_config
|
|
53
|
+
).join('auto-gen-tmp').tap do |path|
|
|
54
|
+
path.mkpath
|
|
55
|
+
# Set the temp directory path for ExcludeLimit to use
|
|
56
|
+
RuboCop::ExcludeLimit.tmp_dir = path
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
34
60
|
def maybe_run_line_length_cop
|
|
35
61
|
if only_exclude?
|
|
36
62
|
skip_line_length_cop(PHASE_1_SKIPPED_ONLY_EXCLUDE)
|
|
@@ -153,7 +179,7 @@ module RuboCop
|
|
|
153
179
|
def relative_path_to_todo_from_options_config
|
|
154
180
|
return AUTO_GENERATED_FILE unless @options[:config]
|
|
155
181
|
|
|
156
|
-
base = Pathname.new(
|
|
182
|
+
base = Pathname.new(PathUtil.pwd)
|
|
157
183
|
config_dir = Pathname.new(@options[:config]).realpath.dirname
|
|
158
184
|
|
|
159
185
|
# 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
|