rubocop 1.48.1 → 1.62.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +7 -5
- data/assets/output.css.erb +159 -0
- data/assets/output.html.erb +1 -160
- data/config/default.yml +217 -35
- data/config/obsoletion.yml +5 -0
- data/lib/rubocop/cli/command/auto_generate_config.rb +22 -8
- data/lib/rubocop/cli/command/execute_runner.rb +7 -2
- data/lib/rubocop/cli/command/lsp.rb +19 -0
- data/lib/rubocop/cli.rb +16 -8
- data/lib/rubocop/config.rb +9 -3
- data/lib/rubocop/config_finder.rb +14 -4
- data/lib/rubocop/config_loader.rb +8 -9
- data/lib/rubocop/config_loader_resolver.rb +4 -3
- data/lib/rubocop/config_obsoletion/parameter_rule.rb +9 -1
- data/lib/rubocop/config_obsoletion.rb +13 -10
- data/lib/rubocop/config_validator.rb +14 -7
- data/lib/rubocop/cop/autocorrect_logic.rb +36 -13
- data/lib/rubocop/cop/base.rb +23 -4
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -0
- data/lib/rubocop/cop/bundler/duplicated_group.rb +127 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +3 -3
- data/lib/rubocop/cop/bundler/gem_version.rb +2 -2
- data/lib/rubocop/cop/bundler/ordered_gems.rb +9 -1
- data/lib/rubocop/cop/cop.rb +2 -2
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +4 -8
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +5 -13
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +7 -4
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/exclude_limit.rb +1 -1
- data/lib/rubocop/cop/gemspec/dependency_version.rb +2 -2
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +3 -3
- data/lib/rubocop/cop/gemspec/development_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +9 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -1
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +33 -9
- data/lib/rubocop/cop/internal_affairs/example_description.rb +45 -24
- data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +19 -20
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +53 -0
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +127 -33
- data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
- data/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +11 -2
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +29 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -0
- data/lib/rubocop/cop/internal_affairs.rb +2 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/class_structure.rb +8 -0
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +1 -2
- data/lib/rubocop/cop/layout/dot_position.rb +1 -5
- data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +42 -9
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +27 -4
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -0
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -0
- data/lib/rubocop/cop/layout/end_alignment.rb +20 -4
- data/lib/rubocop/cop/layout/extra_spacing.rb +3 -4
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -1
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +22 -7
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +25 -34
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +7 -19
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +42 -52
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +38 -55
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +6 -6
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +4 -1
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +3 -3
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +17 -9
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -0
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +8 -27
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +7 -26
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +4 -21
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +18 -3
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +6 -30
- data/lib/rubocop/cop/layout/redundant_line_break.rb +33 -11
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +4 -4
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +5 -0
- data/lib/rubocop/cop/layout/space_after_comma.rb +9 -1
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_operators.rb +53 -21
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +19 -10
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_parens.rb +3 -3
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +5 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +13 -1
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +4 -4
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +2 -2
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +19 -5
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +3 -3
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -1
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +122 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +46 -19
- data/lib/rubocop/cop/lint/empty_block.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +6 -7
- data/lib/rubocop/cop/lint/float_comparison.rb +10 -0
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +2 -1
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -1
- data/lib/rubocop/cop/lint/identity_comparison.rb +0 -1
- data/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb +5 -3
- data/lib/rubocop/cop/lint/inherit_exception.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +56 -0
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +1 -1
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +85 -0
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/missing_super.rb +34 -5
- data/lib/rubocop/cop/lint/mixed_case_range.rb +111 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +6 -21
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +10 -7
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -5
- data/lib/rubocop/cop/lint/number_conversion.rb +14 -4
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +2 -2
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +0 -1
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +130 -0
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +12 -3
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +72 -8
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +35 -15
- data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +1 -3
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +14 -8
- data/lib/rubocop/cop/lint/script_permission.rb +3 -3
- data/lib/rubocop/cop/lint/self_assignment.rb +38 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +1 -2
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
- data/lib/rubocop/cop/lint/shadowed_exception.rb +5 -11
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +7 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +12 -12
- data/lib/rubocop/cop/lint/suppressed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/symbol_conversion.rb +8 -3
- data/lib/rubocop/cop/lint/syntax.rb +6 -3
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +19 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +23 -9
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -1
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +2 -2
- data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -3
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -2
- data/lib/rubocop/cop/lint/useless_assignment.rb +94 -10
- data/lib/rubocop/cop/lint/useless_method_definition.rb +10 -2
- data/lib/rubocop/cop/lint/useless_times.rb +2 -2
- data/lib/rubocop/cop/lint/void.rb +104 -14
- data/lib/rubocop/cop/metrics/abc_size.rb +3 -3
- data/lib/rubocop/cop/metrics/block_length.rb +1 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +8 -2
- data/lib/rubocop/cop/metrics/method_length.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -2
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +31 -3
- data/lib/rubocop/cop/migration/department_name.rb +2 -2
- data/lib/rubocop/cop/mixin/allowed_receivers.rb +34 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/comments_help.rb +19 -11
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +14 -11
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +1 -1
- data/lib/rubocop/cop/mixin/heredoc.rb +6 -2
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +4 -3
- data/lib/rubocop/cop/mixin/percent_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +6 -8
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -1
- data/lib/rubocop/cop/mixin/string_help.rb +4 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -1
- data/lib/rubocop/cop/naming/block_forwarding.rb +13 -5
- data/lib/rubocop/cop/naming/constant_name.rb +2 -3
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -1
- data/lib/rubocop/cop/naming/inclusive_language.rb +23 -4
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +26 -11
- data/lib/rubocop/cop/naming/predicate_name.rb +2 -2
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +11 -3
- data/lib/rubocop/cop/naming/variable_name.rb +6 -1
- data/lib/rubocop/cop/registry.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +2 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +6 -2
- data/lib/rubocop/cop/style/alias.rb +9 -8
- data/lib/rubocop/cop/style/arguments_forwarding.rb +411 -63
- data/lib/rubocop/cop/style/array_first_last.rb +64 -0
- data/lib/rubocop/cop/style/array_intersect.rb +13 -5
- data/lib/rubocop/cop/style/attr.rb +11 -1
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +21 -14
- data/lib/rubocop/cop/style/begin_block.rb +1 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +2 -2
- data/lib/rubocop/cop/style/block_comments.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +5 -4
- data/lib/rubocop/cop/style/case_like_if.rb +5 -5
- data/lib/rubocop/cop/style/class_and_module_children.rb +2 -2
- data/lib/rubocop/cop/style/class_check.rb +1 -0
- data/lib/rubocop/cop/style/class_equality_comparison.rb +58 -40
- data/lib/rubocop/cop/style/class_vars.rb +3 -3
- data/lib/rubocop/cop/style/collection_compact.rb +35 -12
- data/lib/rubocop/cop/style/collection_methods.rb +2 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +2 -2
- data/lib/rubocop/cop/style/combinable_loops.rb +36 -8
- data/lib/rubocop/cop/style/commented_keyword.rb +5 -2
- data/lib/rubocop/cop/style/concat_array_literals.rb +2 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +11 -10
- data/lib/rubocop/cop/style/copyright.rb +6 -3
- data/lib/rubocop/cop/style/data_inheritance.rb +75 -0
- data/lib/rubocop/cop/style/date_time.rb +5 -4
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/dir_empty.rb +8 -14
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +2 -2
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +7 -7
- data/lib/rubocop/cop/style/each_with_object.rb +2 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +6 -1
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +8 -19
- data/lib/rubocop/cop/style/exact_regexp_match.rb +69 -0
- data/lib/rubocop/cop/style/explicit_block_argument.rb +2 -2
- data/lib/rubocop/cop/style/file_empty.rb +3 -3
- data/lib/rubocop/cop/style/file_read.rb +2 -2
- data/lib/rubocop/cop/style/for.rb +3 -1
- data/lib/rubocop/cop/style/format_string.rb +24 -3
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +4 -2
- data/lib/rubocop/cop/style/guard_clause.rb +28 -0
- data/lib/rubocop/cop/style/hash_conversion.rb +10 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +106 -33
- data/lib/rubocop/cop/style/hash_except.rb +25 -13
- data/lib/rubocop/cop/style/hash_syntax.rb +9 -2
- 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 +34 -5
- data/lib/rubocop/cop/style/if_inside_else.rb +6 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +41 -12
- data/lib/rubocop/cop/style/if_with_semicolon.rb +2 -2
- data/lib/rubocop/cop/style/inverse_methods.rb +14 -13
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +54 -8
- data/lib/rubocop/cop/style/lambda.rb +3 -3
- data/lib/rubocop/cop/style/lambda_call.rb +5 -0
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +8 -10
- data/lib/rubocop/cop/style/map_to_hash.rb +19 -6
- data/lib/rubocop/cop/style/map_to_set.rb +4 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +27 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +45 -40
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +20 -0
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +2 -2
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +16 -4
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +6 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +14 -0
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +3 -11
- data/lib/rubocop/cop/style/next.rb +1 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +2 -0
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +5 -3
- data/lib/rubocop/cop/style/open_struct_use.rb +1 -1
- data/lib/rubocop/cop/style/operator_method_call.rb +8 -2
- data/lib/rubocop/cop/style/parallel_assignment.rb +29 -23
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -3
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +4 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +10 -4
- data/lib/rubocop/cop/style/redundant_array_constructor.rb +77 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +10 -2
- data/lib/rubocop/cop/style/redundant_begin.rb +10 -2
- data/lib/rubocop/cop/style/redundant_conditional.rb +2 -10
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +39 -0
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +93 -5
- data/lib/rubocop/cop/style/redundant_each.rb +7 -4
- data/lib/rubocop/cop/style/redundant_exception.rb +32 -12
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +9 -7
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +118 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +203 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +72 -23
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +100 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_constructor.rb +46 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +3 -2
- data/lib/rubocop/cop/style/redundant_return.rb +14 -3
- data/lib/rubocop/cop/style/redundant_self.rb +17 -2
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +8 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +10 -9
- data/lib/rubocop/cop/style/redundant_sort_by.rb +2 -2
- data/lib/rubocop/cop/style/redundant_string_escape.rb +5 -4
- data/lib/rubocop/cop/style/regexp_literal.rb +11 -2
- data/lib/rubocop/cop/style/require_order.rb +11 -5
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -3
- data/lib/rubocop/cop/style/return_nil.rb +6 -2
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +95 -0
- data/lib/rubocop/cop/style/sample.rb +3 -4
- data/lib/rubocop/cop/style/select_by_regexp.rb +22 -11
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +20 -4
- data/lib/rubocop/cop/style/signal_exception.rb +1 -1
- data/lib/rubocop/cop/style/single_argument_dig.rb +7 -3
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +67 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/slicing_with_range.rb +76 -10
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +8 -4
- data/lib/rubocop/cop/style/special_global_vars.rb +3 -4
- data/lib/rubocop/cop/style/string_chars.rb +1 -0
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +30 -5
- data/lib/rubocop/cop/style/strip.rb +7 -4
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/super_with_args_parentheses.rb +35 -0
- data/lib/rubocop/cop/style/symbol_array.rb +35 -15
- data/lib/rubocop/cop/style/symbol_proc.rb +36 -0
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +1 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_logical_operators.rb +1 -0
- data/lib/rubocop/cop/style/unpack_first.rb +11 -14
- data/lib/rubocop/cop/style/yaml_file_read.rb +66 -0
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -2
- data/lib/rubocop/cop/style/yoda_expression.rb +8 -7
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/regexp_ranges.rb +113 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +45 -4
- data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
- data/lib/rubocop/cop/variable_force.rb +1 -0
- data/lib/rubocop/cops_documentation_generator.rb +26 -7
- data/lib/rubocop/directive_comment.rb +10 -8
- data/lib/rubocop/ext/regexp_node.rb +10 -5
- data/lib/rubocop/ext/regexp_parser.rb +5 -2
- data/lib/rubocop/file_finder.rb +4 -7
- data/lib/rubocop/formatter/disabled_config_formatter.rb +17 -6
- data/lib/rubocop/formatter/html_formatter.rb +35 -14
- data/lib/rubocop/formatter/json_formatter.rb +0 -1
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/formatter/offense_count_formatter.rb +12 -2
- data/lib/rubocop/formatter/simple_text_formatter.rb +1 -1
- data/lib/rubocop/formatter.rb +1 -1
- data/lib/rubocop/lsp/logger.rb +22 -0
- data/lib/rubocop/lsp/routes.rb +246 -0
- data/lib/rubocop/lsp/runtime.rb +99 -0
- data/lib/rubocop/lsp/server.rb +71 -0
- data/lib/rubocop/lsp/severity.rb +27 -0
- data/lib/rubocop/lsp.rb +29 -0
- data/lib/rubocop/magic_comment.rb +13 -11
- data/lib/rubocop/options.rb +26 -10
- data/lib/rubocop/path_util.rb +6 -2
- data/lib/rubocop/result_cache.rb +6 -3
- data/lib/rubocop/rspec/cop_helper.rb +8 -2
- data/lib/rubocop/rspec/expect_offense.rb +8 -8
- data/lib/rubocop/rspec/shared_contexts.rb +42 -18
- data/lib/rubocop/rspec/support.rb +2 -0
- data/lib/rubocop/runner.rb +15 -6
- data/lib/rubocop/server/cache.rb +1 -1
- data/lib/rubocop/server/client_command/exec.rb +3 -3
- data/lib/rubocop/server/helper.rb +1 -1
- data/lib/rubocop/server/server_command/exec.rb +1 -2
- data/lib/rubocop/string_interpreter.rb +3 -3
- data/lib/rubocop/target_finder.rb +91 -81
- data/lib/rubocop/target_ruby.rb +85 -78
- data/lib/rubocop/version.rb +27 -8
- data/lib/rubocop.rb +22 -0
- metadata +59 -14
- /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
@@ -1,8 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RuboCop
|
4
|
-
# This class finds target files to inspect by scanning the directory tree
|
5
|
-
# and picking ruby files.
|
4
|
+
# This class finds target files to inspect by scanning the directory tree and picking ruby files.
|
6
5
|
# @api private
|
7
6
|
class TargetFinder
|
8
7
|
HIDDEN_PATH_SUBSTRING = "#{File::SEPARATOR}."
|
@@ -12,21 +11,8 @@ module RuboCop
|
|
12
11
|
@options = options
|
13
12
|
end
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
def debug?
|
20
|
-
@options[:debug]
|
21
|
-
end
|
22
|
-
|
23
|
-
def fail_fast?
|
24
|
-
@options[:fail_fast]
|
25
|
-
end
|
26
|
-
|
27
|
-
# Generate a list of target files by expanding globbing patterns
|
28
|
-
# (if any). If args is empty, recursively find all Ruby source
|
29
|
-
# files under the current directory
|
14
|
+
# Generate a list of target files by expanding globbing patterns (if any). If args is empty,
|
15
|
+
# recursively find all Ruby source files under the current directory
|
30
16
|
# @return [Array] array of file paths
|
31
17
|
def find(args, mode)
|
32
18
|
return target_files_in_dir if args.empty?
|
@@ -44,12 +30,11 @@ module RuboCop
|
|
44
30
|
files.map { |f| File.expand_path(f) }.uniq
|
45
31
|
end
|
46
32
|
|
47
|
-
# Finds all Ruby source files under the current or other supplied
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
# so you can include other Ruby files like Rakefiles and gemspecs.
|
33
|
+
# Finds all Ruby source files under the current or other supplied directory. A Ruby source file
|
34
|
+
# is defined as a file with the `.rb` extension or a file with no extension that has a ruby
|
35
|
+
# shebang line as its first line.
|
36
|
+
# It is possible to specify includes and excludes using the config file, so you can include
|
37
|
+
# other Ruby files like Rakefiles and gemspecs.
|
53
38
|
# @param base_dir Root directory under which to search for
|
54
39
|
# ruby source files
|
55
40
|
# @return [Array] Array of filenames
|
@@ -66,20 +51,10 @@ module RuboCop
|
|
66
51
|
target_files.sort_by!(&order)
|
67
52
|
end
|
68
53
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end && ruby_file?(file)
|
74
|
-
|
75
|
-
base_dir_config.file_to_include?(file)
|
76
|
-
end
|
77
|
-
|
78
|
-
# Search for files recursively starting at the given base directory using
|
79
|
-
# the given flags that determine how the match is made. Excluded files will
|
80
|
-
# be removed later by the caller, but as an optimization find_files removes
|
81
|
-
# the top level directories that are excluded in configuration in the
|
82
|
-
# normal way (dir/**/*).
|
54
|
+
# Search for files recursively starting at the given base directory using the given flags that
|
55
|
+
# determine how the match is made. Excluded files will be removed later by the caller, but as an
|
56
|
+
# optimization find_files removes the top level directories that are excluded in configuration
|
57
|
+
# in the normal way (dir/**/*).
|
83
58
|
def find_files(base_dir, flags)
|
84
59
|
# get all wanted directories first to improve speed of finding all files
|
85
60
|
exclude_pattern = combined_exclude_glob_patterns(base_dir)
|
@@ -93,9 +68,24 @@ module RuboCop
|
|
93
68
|
Dir.glob(patterns, flags).select { |path| FileTest.file?(path) }
|
94
69
|
end
|
95
70
|
|
71
|
+
private
|
72
|
+
|
73
|
+
def to_inspect?(file, hidden_files, base_dir_config)
|
74
|
+
return false if base_dir_config.file_to_exclude?(file)
|
75
|
+
return true if !hidden_files.bsearch do |hidden_file|
|
76
|
+
file <=> hidden_file
|
77
|
+
end && ruby_file?(file)
|
78
|
+
|
79
|
+
base_dir_config.file_to_include?(file)
|
80
|
+
end
|
81
|
+
|
96
82
|
def wanted_dir_patterns(base_dir, exclude_pattern, flags)
|
97
|
-
base_dir
|
98
|
-
|
83
|
+
# Escape glob characters in base_dir to avoid unwanted behavior.
|
84
|
+
base_dir = base_dir.gsub(/[\\\{\}\[\]\*\?]/) do |reserved_glob_character|
|
85
|
+
"\\#{reserved_glob_character}"
|
86
|
+
end
|
87
|
+
|
88
|
+
dirs = Dir.glob(File.join(base_dir, '*/'), flags)
|
99
89
|
.reject do |dir|
|
100
90
|
next true if dir.end_with?('/./', '/../')
|
101
91
|
next true if File.fnmatch?(exclude_pattern, dir, flags)
|
@@ -114,27 +104,12 @@ module RuboCop
|
|
114
104
|
end
|
115
105
|
|
116
106
|
def combined_exclude_glob_patterns(base_dir)
|
117
|
-
exclude = @config_store.for(base_dir).for_all_cops['Exclude']
|
107
|
+
exclude = @config_store.for(base_dir).for_all_cops['Exclude'] || []
|
118
108
|
patterns = exclude.select { |pattern| pattern.is_a?(String) && pattern.end_with?('/**/*') }
|
119
109
|
.map { |pattern| pattern.sub("#{base_dir}/", '') }
|
120
110
|
"#{base_dir}/{#{patterns.join(',')}}"
|
121
111
|
end
|
122
112
|
|
123
|
-
def ruby_extension?(file)
|
124
|
-
ruby_extensions.include?(File.extname(file))
|
125
|
-
end
|
126
|
-
|
127
|
-
def ruby_extensions
|
128
|
-
@ruby_extensions ||= begin
|
129
|
-
ext_patterns = all_cops_include.select { |pattern| pattern.start_with?('**/*.') }
|
130
|
-
ext_patterns.map { |pattern| pattern.sub('**/*', '') }
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def ruby_filename?(file)
|
135
|
-
ruby_filenames.include?(File.basename(file))
|
136
|
-
end
|
137
|
-
|
138
113
|
def ruby_filenames
|
139
114
|
@ruby_filenames ||= begin
|
140
115
|
file_patterns = all_cops_include.reject { |pattern| pattern.start_with?('**/*.') }
|
@@ -146,53 +121,72 @@ module RuboCop
|
|
146
121
|
@all_cops_include ||= @config_store.for_pwd.for_all_cops['Include'].map(&:to_s)
|
147
122
|
end
|
148
123
|
|
149
|
-
def
|
150
|
-
|
124
|
+
def process_explicit_path(path, mode)
|
125
|
+
files = path.include?('*') ? Dir[path] : [path]
|
151
126
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
warn("Unprocessable file #{file}: #{e.class}, #{e.message}") if debug?
|
127
|
+
if mode == :only_recognized_file_types || force_exclusion?
|
128
|
+
files.select! { |file| included_file?(file) }
|
129
|
+
end
|
156
130
|
|
157
|
-
|
131
|
+
force_exclusion? ? without_excluded(files) : files
|
158
132
|
end
|
159
133
|
|
160
|
-
def
|
161
|
-
|
134
|
+
def without_excluded(files)
|
135
|
+
files.reject do |file|
|
136
|
+
# When --ignore-parent-exclusion is given, we must look at the configuration associated with
|
137
|
+
# the file, but in the default case when --ignore-parent-exclusion is not given, can safely
|
138
|
+
# look only at the configuration for the current directory, since it's only the Exclude
|
139
|
+
# parameters we're going to check.
|
140
|
+
config = @config_store.for(ignore_parent_exclusion? ? file : '.')
|
141
|
+
config.file_to_exclude?(file)
|
142
|
+
end
|
162
143
|
end
|
163
144
|
|
164
|
-
def
|
165
|
-
|
145
|
+
def included_file?(file)
|
146
|
+
ruby_file?(file) || configured_include?(file)
|
166
147
|
end
|
167
148
|
|
168
149
|
def ruby_file?(file)
|
169
150
|
stdin? || ruby_extension?(file) || ruby_filename?(file) || ruby_executable?(file)
|
170
151
|
end
|
171
152
|
|
172
|
-
def
|
173
|
-
@
|
153
|
+
def stdin?
|
154
|
+
@options.key?(:stdin)
|
174
155
|
end
|
175
156
|
|
176
|
-
def
|
177
|
-
|
157
|
+
def ruby_extension?(file)
|
158
|
+
ruby_extensions.include?(File.extname(file))
|
178
159
|
end
|
179
160
|
|
180
|
-
def
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
files.select! { |file| included_file?(file) }
|
161
|
+
def ruby_extensions
|
162
|
+
@ruby_extensions ||= begin
|
163
|
+
ext_patterns = all_cops_include.select { |pattern| pattern.start_with?('**/*.') }
|
164
|
+
ext_patterns.map { |pattern| pattern.sub('**/*', '') }
|
185
165
|
end
|
166
|
+
end
|
186
167
|
|
187
|
-
|
168
|
+
def ruby_filename?(file)
|
169
|
+
ruby_filenames.include?(File.basename(file))
|
170
|
+
end
|
188
171
|
|
189
|
-
|
190
|
-
|
191
|
-
config.file_to_exclude?(file)
|
192
|
-
end
|
172
|
+
def configured_include?(file)
|
173
|
+
@config_store.for_pwd.file_to_include?(file)
|
193
174
|
end
|
194
175
|
|
195
|
-
|
176
|
+
def ruby_executable?(file)
|
177
|
+
return false unless File.extname(file).empty? && File.exist?(file)
|
178
|
+
|
179
|
+
first_line = File.open(file, &:readline)
|
180
|
+
/#!.*(#{ruby_interpreters(file).join('|')})/.match?(first_line)
|
181
|
+
rescue EOFError, ArgumentError => e
|
182
|
+
warn("Unprocessable file #{file}: #{e.class}, #{e.message}") if debug?
|
183
|
+
|
184
|
+
false
|
185
|
+
end
|
186
|
+
|
187
|
+
def ruby_interpreters(file)
|
188
|
+
@config_store.for(file).for_all_cops['RubyInterpreters']
|
189
|
+
end
|
196
190
|
|
197
191
|
def order
|
198
192
|
if fail_fast?
|
@@ -202,5 +196,21 @@ module RuboCop
|
|
202
196
|
:itself
|
203
197
|
end
|
204
198
|
end
|
199
|
+
|
200
|
+
def force_exclusion?
|
201
|
+
@options[:force_exclusion]
|
202
|
+
end
|
203
|
+
|
204
|
+
def ignore_parent_exclusion?
|
205
|
+
@options[:ignore_parent_exclusion]
|
206
|
+
end
|
207
|
+
|
208
|
+
def debug?
|
209
|
+
@options[:debug]
|
210
|
+
end
|
211
|
+
|
212
|
+
def fail_fast?
|
213
|
+
@options[:fail_fast]
|
214
|
+
end
|
205
215
|
end
|
206
216
|
end
|
data/lib/rubocop/target_ruby.rb
CHANGED
@@ -4,8 +4,8 @@ module RuboCop
|
|
4
4
|
# The kind of Ruby that code inspected by RuboCop is written in.
|
5
5
|
# @api private
|
6
6
|
class TargetRuby
|
7
|
-
KNOWN_RUBIES = [2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2, 3.3].freeze
|
8
|
-
DEFAULT_VERSION = 2.
|
7
|
+
KNOWN_RUBIES = [2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4].freeze
|
8
|
+
DEFAULT_VERSION = 2.7
|
9
9
|
|
10
10
|
OBSOLETE_RUBIES = {
|
11
11
|
1.9 => '0.41',
|
@@ -14,7 +14,8 @@ module RuboCop
|
|
14
14
|
2.2 => '0.68',
|
15
15
|
2.3 => '0.81',
|
16
16
|
2.4 => '1.12',
|
17
|
-
2.5 => '1.28'
|
17
|
+
2.5 => '1.28',
|
18
|
+
2.6 => '1.50'
|
18
19
|
}.freeze
|
19
20
|
private_constant :KNOWN_RUBIES, :OBSOLETE_RUBIES
|
20
21
|
|
@@ -47,6 +48,86 @@ module RuboCop
|
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
51
|
+
# The target ruby version may be found in a .gemspec file.
|
52
|
+
# @api private
|
53
|
+
class GemspecFile < Source
|
54
|
+
extend NodePattern::Macros
|
55
|
+
|
56
|
+
GEMSPEC_EXTENSION = '.gemspec'
|
57
|
+
|
58
|
+
# @!method required_ruby_version(node)
|
59
|
+
def_node_search :required_ruby_version, <<~PATTERN
|
60
|
+
(send _ :required_ruby_version= $_)
|
61
|
+
PATTERN
|
62
|
+
|
63
|
+
# @!method gem_requirement_versions(node)
|
64
|
+
def_node_matcher :gem_requirement_versions, <<~PATTERN
|
65
|
+
(send (const(const _ :Gem):Requirement) :new
|
66
|
+
{$str+ | (send $str :freeze)+ | (array $str+) | (array (send $str :freeze)+)}
|
67
|
+
)
|
68
|
+
PATTERN
|
69
|
+
|
70
|
+
def name
|
71
|
+
"`required_ruby_version` parameter (in #{gemspec_filename})"
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def find_version
|
77
|
+
file = gemspec_filepath
|
78
|
+
return unless file && File.file?(file)
|
79
|
+
|
80
|
+
right_hand_side = version_from_gemspec_file(file)
|
81
|
+
return if right_hand_side.nil?
|
82
|
+
|
83
|
+
find_default_minimal_known_ruby(right_hand_side)
|
84
|
+
end
|
85
|
+
|
86
|
+
def gemspec_filename
|
87
|
+
@gemspec_filename ||= begin
|
88
|
+
basename = Pathname.new(@config.base_dir_for_path_parameters).basename.to_s
|
89
|
+
"#{basename}#{GEMSPEC_EXTENSION}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def gemspec_filepath
|
94
|
+
@gemspec_filepath ||=
|
95
|
+
@config.find_file_upwards(gemspec_filename, @config.base_dir_for_path_parameters)
|
96
|
+
end
|
97
|
+
|
98
|
+
def version_from_gemspec_file(file)
|
99
|
+
processed_source = ProcessedSource.from_file(
|
100
|
+
file, DEFAULT_VERSION, parser_engine: @config.parser_engine
|
101
|
+
)
|
102
|
+
required_ruby_version(processed_source.ast).first
|
103
|
+
end
|
104
|
+
|
105
|
+
def version_from_right_hand_side(right_hand_side)
|
106
|
+
gem_requirement_versions = gem_requirement_versions(right_hand_side)
|
107
|
+
|
108
|
+
if right_hand_side.array_type? && right_hand_side.children.all?(&:str_type?)
|
109
|
+
version_from_array(right_hand_side)
|
110
|
+
elsif gem_requirement_versions
|
111
|
+
gem_requirement_versions.map(&:value)
|
112
|
+
elsif right_hand_side.str_type?
|
113
|
+
right_hand_side.value
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def version_from_array(array)
|
118
|
+
array.children.map(&:value)
|
119
|
+
end
|
120
|
+
|
121
|
+
def find_default_minimal_known_ruby(right_hand_side)
|
122
|
+
version = version_from_right_hand_side(right_hand_side)
|
123
|
+
requirement = Gem::Requirement.new(version)
|
124
|
+
|
125
|
+
KNOWN_RUBIES.detect do |v|
|
126
|
+
v >= DEFAULT_VERSION && requirement.satisfied_by?(Gem::Version.new("#{v}.99"))
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
50
131
|
# The target ruby version may be found in a .ruby-version file.
|
51
132
|
# @api private
|
52
133
|
class RubyVersionFile < Source
|
@@ -142,80 +223,6 @@ module RuboCop
|
|
142
223
|
end
|
143
224
|
end
|
144
225
|
|
145
|
-
# The target ruby version may be found in a .gemspec file.
|
146
|
-
# @api private
|
147
|
-
class GemspecFile < Source
|
148
|
-
extend NodePattern::Macros
|
149
|
-
|
150
|
-
GEMSPEC_EXTENSION = '.gemspec'
|
151
|
-
|
152
|
-
# @!method required_ruby_version(node)
|
153
|
-
def_node_search :required_ruby_version, <<~PATTERN
|
154
|
-
(send _ :required_ruby_version= $_)
|
155
|
-
PATTERN
|
156
|
-
|
157
|
-
# @!method gem_requirement?(node)
|
158
|
-
def_node_matcher :gem_requirement?, <<~PATTERN
|
159
|
-
(send (const(const _ :Gem):Requirement) :new $str)
|
160
|
-
PATTERN
|
161
|
-
|
162
|
-
def name
|
163
|
-
"`required_ruby_version` parameter (in #{gemspec_filename})"
|
164
|
-
end
|
165
|
-
|
166
|
-
private
|
167
|
-
|
168
|
-
def find_version
|
169
|
-
file = gemspec_filepath
|
170
|
-
return unless file && File.file?(file)
|
171
|
-
|
172
|
-
right_hand_side = version_from_gemspec_file(file)
|
173
|
-
return if right_hand_side.nil?
|
174
|
-
|
175
|
-
find_default_minimal_known_ruby(right_hand_side)
|
176
|
-
end
|
177
|
-
|
178
|
-
def gemspec_filename
|
179
|
-
@gemspec_filename ||= begin
|
180
|
-
basename = Pathname.new(@config.base_dir_for_path_parameters).basename.to_s
|
181
|
-
"#{basename}#{GEMSPEC_EXTENSION}"
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
def gemspec_filepath
|
186
|
-
@gemspec_filepath ||=
|
187
|
-
@config.find_file_upwards(gemspec_filename, @config.base_dir_for_path_parameters)
|
188
|
-
end
|
189
|
-
|
190
|
-
def version_from_gemspec_file(file)
|
191
|
-
processed_source = ProcessedSource.from_file(file, DEFAULT_VERSION)
|
192
|
-
required_ruby_version(processed_source.ast).first
|
193
|
-
end
|
194
|
-
|
195
|
-
def version_from_right_hand_side(right_hand_side)
|
196
|
-
if right_hand_side.array_type?
|
197
|
-
version_from_array(right_hand_side)
|
198
|
-
elsif gem_requirement?(right_hand_side)
|
199
|
-
right_hand_side.children.last.value
|
200
|
-
else
|
201
|
-
right_hand_side.value
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
205
|
-
def version_from_array(array)
|
206
|
-
array.children.map(&:value)
|
207
|
-
end
|
208
|
-
|
209
|
-
def find_default_minimal_known_ruby(right_hand_side)
|
210
|
-
version = version_from_right_hand_side(right_hand_side)
|
211
|
-
requirement = Gem::Requirement.new(version)
|
212
|
-
|
213
|
-
KNOWN_RUBIES.detect do |v|
|
214
|
-
v >= DEFAULT_VERSION && requirement.satisfied_by?(Gem::Version.new("#{v}.99"))
|
215
|
-
end
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
226
|
# If all else fails, a default version will be picked.
|
220
227
|
# @api private
|
221
228
|
class Default < Source
|
@@ -236,10 +243,10 @@ module RuboCop
|
|
236
243
|
|
237
244
|
SOURCES = [
|
238
245
|
RuboCopConfig,
|
246
|
+
GemspecFile,
|
239
247
|
RubyVersionFile,
|
240
248
|
ToolVersionsFile,
|
241
249
|
BundlerLockFile,
|
242
|
-
GemspecFile,
|
243
250
|
Default
|
244
251
|
].freeze
|
245
252
|
|
data/lib/rubocop/version.rb
CHANGED
@@ -3,20 +3,24 @@
|
|
3
3
|
module RuboCop
|
4
4
|
# This module holds the RuboCop version information.
|
5
5
|
module Version
|
6
|
-
STRING = '1.
|
6
|
+
STRING = '1.62.1'
|
7
7
|
|
8
|
-
MSG = '%<version>s (using
|
8
|
+
MSG = '%<version>s (using %<parser_version>s, ' \
|
9
9
|
'rubocop-ast %<rubocop_ast_version>s, ' \
|
10
10
|
'running on %<ruby_engine>s %<ruby_version>s)%<server_mode>s [%<ruby_platform>s]'
|
11
11
|
|
12
|
-
CANONICAL_FEATURE_NAMES = {
|
13
|
-
|
14
|
-
|
12
|
+
CANONICAL_FEATURE_NAMES = {
|
13
|
+
'Rspec' => 'RSpec', 'Graphql' => 'GraphQL', 'Md' => 'Markdown', 'Factory_bot' => 'FactoryBot',
|
14
|
+
'Thread_safety' => 'ThreadSafety'
|
15
|
+
}.freeze
|
16
|
+
EXTENSION_PATH_NAMES = {
|
17
|
+
'rubocop-md' => 'markdown', 'rubocop-factory_bot' => 'factory_bot'
|
18
|
+
}.freeze
|
15
19
|
|
16
20
|
# @api private
|
17
21
|
def self.version(debug: false, env: nil)
|
18
22
|
if debug
|
19
|
-
verbose_version = format(MSG, version: STRING, parser_version:
|
23
|
+
verbose_version = format(MSG, version: STRING, parser_version: parser_version,
|
20
24
|
rubocop_ast_version: RuboCop::AST::Version::STRING,
|
21
25
|
ruby_engine: RUBY_ENGINE, ruby_version: RUBY_VERSION,
|
22
26
|
server_mode: server_mode,
|
@@ -35,6 +39,21 @@ module RuboCop
|
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
42
|
+
# @api private
|
43
|
+
def self.parser_version
|
44
|
+
config_path = ConfigFinder.find_config_path(Dir.pwd)
|
45
|
+
yaml = YAML.safe_load(
|
46
|
+
File.read(config_path), permitted_classes: [Regexp, Symbol], aliases: true
|
47
|
+
)
|
48
|
+
|
49
|
+
if yaml.dig('AllCops', 'ParserEngine') == 'parser_prism'
|
50
|
+
require 'prism'
|
51
|
+
"Prism #{Prism::VERSION}"
|
52
|
+
else
|
53
|
+
"Parser #{Parser::VERSION}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
38
57
|
# @api private
|
39
58
|
def self.extension_versions(env)
|
40
59
|
features = Util.silence_warnings do
|
@@ -43,7 +62,7 @@ module RuboCop
|
|
43
62
|
env.config_store.unvalidated.for_pwd.loaded_features.sort
|
44
63
|
end
|
45
64
|
|
46
|
-
features.
|
65
|
+
features.filter_map do |loaded_feature|
|
47
66
|
next unless (match = loaded_feature.match(/rubocop-(?<feature>.*)/))
|
48
67
|
|
49
68
|
# Get the expected name of the folder containing the extension code.
|
@@ -61,7 +80,7 @@ module RuboCop
|
|
61
80
|
next unless (feature_version = feature_version(feature))
|
62
81
|
|
63
82
|
" - #{loaded_feature} #{feature_version}"
|
64
|
-
end
|
83
|
+
end
|
65
84
|
end
|
66
85
|
|
67
86
|
# Returns feature version in one of two ways:
|
data/lib/rubocop.rb
CHANGED
@@ -69,6 +69,7 @@ require_relative 'rubocop/cop/mixin/alignment'
|
|
69
69
|
require_relative 'rubocop/cop/mixin/allowed_identifiers'
|
70
70
|
require_relative 'rubocop/cop/mixin/allowed_methods'
|
71
71
|
require_relative 'rubocop/cop/mixin/allowed_pattern'
|
72
|
+
require_relative 'rubocop/cop/mixin/allowed_receivers'
|
72
73
|
require_relative 'rubocop/cop/mixin/auto_corrector' # rubocop:todo Naming/InclusiveLanguage
|
73
74
|
require_relative 'rubocop/cop/mixin/check_assignment'
|
74
75
|
require_relative 'rubocop/cop/mixin/check_line_breakable'
|
@@ -138,6 +139,7 @@ require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help
|
|
138
139
|
require_relative 'rubocop/cop/mixin/def_node' # relies on visibility_help
|
139
140
|
|
140
141
|
require_relative 'rubocop/cop/utils/format_string'
|
142
|
+
require_relative 'rubocop/cop/utils/regexp_ranges'
|
141
143
|
|
142
144
|
require_relative 'rubocop/cop/migration/department_name'
|
143
145
|
|
@@ -160,6 +162,7 @@ require_relative 'rubocop/cop/correctors/string_literal_corrector'
|
|
160
162
|
require_relative 'rubocop/cop/correctors/unused_arg_corrector'
|
161
163
|
|
162
164
|
require_relative 'rubocop/cop/bundler/duplicated_gem'
|
165
|
+
require_relative 'rubocop/cop/bundler/duplicated_group'
|
163
166
|
require_relative 'rubocop/cop/bundler/gem_comment'
|
164
167
|
require_relative 'rubocop/cop/bundler/gem_filename'
|
165
168
|
require_relative 'rubocop/cop/bundler/gem_version'
|
@@ -299,6 +302,7 @@ require_relative 'rubocop/cop/lint/duplicate_case_condition'
|
|
299
302
|
require_relative 'rubocop/cop/lint/duplicate_elsif_condition'
|
300
303
|
require_relative 'rubocop/cop/lint/duplicate_hash_key'
|
301
304
|
require_relative 'rubocop/cop/lint/duplicate_magic_comment'
|
305
|
+
require_relative 'rubocop/cop/lint/duplicate_match_pattern'
|
302
306
|
require_relative 'rubocop/cop/lint/duplicate_methods'
|
303
307
|
require_relative 'rubocop/cop/lint/duplicate_regexp_character_class_element'
|
304
308
|
require_relative 'rubocop/cop/lint/duplicate_require'
|
@@ -328,12 +332,15 @@ require_relative 'rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler'
|
|
328
332
|
require_relative 'rubocop/cop/lint/ineffective_access_modifier'
|
329
333
|
require_relative 'rubocop/cop/lint/inherit_exception'
|
330
334
|
require_relative 'rubocop/cop/lint/interpolation_check'
|
335
|
+
require_relative 'rubocop/cop/lint/it_without_arguments_in_block'
|
331
336
|
require_relative 'rubocop/cop/lint/lambda_without_literal_block'
|
332
337
|
require_relative 'rubocop/cop/lint/literal_as_condition'
|
338
|
+
require_relative 'rubocop/cop/lint/literal_assignment_in_condition'
|
333
339
|
require_relative 'rubocop/cop/lint/literal_in_interpolation'
|
334
340
|
require_relative 'rubocop/cop/lint/loop'
|
335
341
|
require_relative 'rubocop/cop/lint/missing_cop_enable_directive'
|
336
342
|
require_relative 'rubocop/cop/lint/missing_super'
|
343
|
+
require_relative 'rubocop/cop/lint/mixed_case_range'
|
337
344
|
require_relative 'rubocop/cop/lint/mixed_regexp_capture_types'
|
338
345
|
require_relative 'rubocop/cop/lint/multiple_comparison'
|
339
346
|
require_relative 'rubocop/cop/lint/nested_method_definition'
|
@@ -356,6 +363,7 @@ require_relative 'rubocop/cop/lint/rand_one'
|
|
356
363
|
require_relative 'rubocop/cop/lint/redundant_cop_disable_directive'
|
357
364
|
require_relative 'rubocop/cop/lint/redundant_cop_enable_directive'
|
358
365
|
require_relative 'rubocop/cop/lint/redundant_dir_glob_sort'
|
366
|
+
require_relative 'rubocop/cop/lint/redundant_regexp_quantifiers'
|
359
367
|
require_relative 'rubocop/cop/lint/redundant_require_statement'
|
360
368
|
require_relative 'rubocop/cop/lint/redundant_safe_navigation'
|
361
369
|
require_relative 'rubocop/cop/lint/redundant_splat_expansion'
|
@@ -448,6 +456,7 @@ require_relative 'rubocop/cop/style/alias'
|
|
448
456
|
require_relative 'rubocop/cop/style/and_or'
|
449
457
|
require_relative 'rubocop/cop/style/arguments_forwarding'
|
450
458
|
require_relative 'rubocop/cop/style/array_coercion'
|
459
|
+
require_relative 'rubocop/cop/style/array_first_last'
|
451
460
|
require_relative 'rubocop/cop/style/array_intersect'
|
452
461
|
require_relative 'rubocop/cop/style/array_join'
|
453
462
|
require_relative 'rubocop/cop/style/ascii_comments'
|
@@ -480,6 +489,7 @@ require_relative 'rubocop/cop/style/concat_array_literals'
|
|
480
489
|
require_relative 'rubocop/cop/style/conditional_assignment'
|
481
490
|
require_relative 'rubocop/cop/style/constant_visibility'
|
482
491
|
require_relative 'rubocop/cop/style/copyright'
|
492
|
+
require_relative 'rubocop/cop/style/data_inheritance'
|
483
493
|
require_relative 'rubocop/cop/style/date_time'
|
484
494
|
require_relative 'rubocop/cop/style/def_with_parentheses'
|
485
495
|
require_relative 'rubocop/cop/style/dir'
|
@@ -505,6 +515,7 @@ require_relative 'rubocop/cop/style/end_block'
|
|
505
515
|
require_relative 'rubocop/cop/style/env_home'
|
506
516
|
require_relative 'rubocop/cop/style/eval_with_location'
|
507
517
|
require_relative 'rubocop/cop/style/even_odd'
|
518
|
+
require_relative 'rubocop/cop/style/exact_regexp_match'
|
508
519
|
require_relative 'rubocop/cop/style/expand_path_arguments'
|
509
520
|
require_relative 'rubocop/cop/style/explicit_block_argument'
|
510
521
|
require_relative 'rubocop/cop/style/exponential_notation'
|
@@ -555,17 +566,24 @@ require_relative 'rubocop/cop/style/multiline_in_pattern_then'
|
|
555
566
|
require_relative 'rubocop/cop/style/numbered_parameters'
|
556
567
|
require_relative 'rubocop/cop/style/open_struct_use'
|
557
568
|
require_relative 'rubocop/cop/style/operator_method_call'
|
569
|
+
require_relative 'rubocop/cop/style/redundant_array_constructor'
|
558
570
|
require_relative 'rubocop/cop/style/redundant_assignment'
|
559
571
|
require_relative 'rubocop/cop/style/redundant_constant_base'
|
572
|
+
require_relative 'rubocop/cop/style/redundant_current_directory_in_path'
|
560
573
|
require_relative 'rubocop/cop/style/redundant_double_splat_hash_braces'
|
561
574
|
require_relative 'rubocop/cop/style/redundant_each'
|
562
575
|
require_relative 'rubocop/cop/style/redundant_fetch_block'
|
563
576
|
require_relative 'rubocop/cop/style/redundant_file_extension_in_require'
|
577
|
+
require_relative 'rubocop/cop/style/redundant_filter_chain'
|
564
578
|
require_relative 'rubocop/cop/style/redundant_heredoc_delimiter_quotes'
|
565
579
|
require_relative 'rubocop/cop/style/redundant_initialize'
|
580
|
+
require_relative 'rubocop/cop/style/redundant_line_continuation'
|
581
|
+
require_relative 'rubocop/cop/style/redundant_regexp_argument'
|
582
|
+
require_relative 'rubocop/cop/style/redundant_regexp_constructor'
|
566
583
|
require_relative 'rubocop/cop/style/redundant_self_assignment'
|
567
584
|
require_relative 'rubocop/cop/style/redundant_self_assignment_branch'
|
568
585
|
require_relative 'rubocop/cop/style/require_order'
|
586
|
+
require_relative 'rubocop/cop/style/single_line_do_end_block'
|
569
587
|
require_relative 'rubocop/cop/style/sole_nested_conditional'
|
570
588
|
require_relative 'rubocop/cop/style/static_class'
|
571
589
|
require_relative 'rubocop/cop/style/map_compact_with_conditional_block'
|
@@ -640,6 +658,7 @@ require_relative 'rubocop/cop/style/regexp_literal'
|
|
640
658
|
require_relative 'rubocop/cop/style/rescue_modifier'
|
641
659
|
require_relative 'rubocop/cop/style/rescue_standard_error'
|
642
660
|
require_relative 'rubocop/cop/style/return_nil'
|
661
|
+
require_relative 'rubocop/cop/style/return_nil_in_predicate_method_definition'
|
643
662
|
require_relative 'rubocop/cop/style/safe_navigation'
|
644
663
|
require_relative 'rubocop/cop/style/sample'
|
645
664
|
require_relative 'rubocop/cop/style/select_by_regexp'
|
@@ -662,6 +681,7 @@ require_relative 'rubocop/cop/style/string_literals_in_interpolation'
|
|
662
681
|
require_relative 'rubocop/cop/style/string_methods'
|
663
682
|
require_relative 'rubocop/cop/style/strip'
|
664
683
|
require_relative 'rubocop/cop/style/struct_inheritance'
|
684
|
+
require_relative 'rubocop/cop/style/super_with_args_parentheses'
|
665
685
|
require_relative 'rubocop/cop/style/swap_values'
|
666
686
|
require_relative 'rubocop/cop/style/symbol_array'
|
667
687
|
require_relative 'rubocop/cop/style/symbol_literal'
|
@@ -686,6 +706,7 @@ require_relative 'rubocop/cop/style/when_then'
|
|
686
706
|
require_relative 'rubocop/cop/style/while_until_do'
|
687
707
|
require_relative 'rubocop/cop/style/while_until_modifier'
|
688
708
|
require_relative 'rubocop/cop/style/word_array'
|
709
|
+
require_relative 'rubocop/cop/style/yaml_file_read'
|
689
710
|
require_relative 'rubocop/cop/style/yoda_condition'
|
690
711
|
require_relative 'rubocop/cop/style/yoda_expression'
|
691
712
|
require_relative 'rubocop/cop/style/zero_length_predicate'
|
@@ -731,6 +752,7 @@ require_relative 'rubocop/cli/command/base'
|
|
731
752
|
require_relative 'rubocop/cli/command/auto_generate_config'
|
732
753
|
require_relative 'rubocop/cli/command/execute_runner'
|
733
754
|
require_relative 'rubocop/cli/command/init_dotfile'
|
755
|
+
require_relative 'rubocop/cli/command/lsp'
|
734
756
|
require_relative 'rubocop/cli/command/show_cops'
|
735
757
|
require_relative 'rubocop/cli/command/show_docs_url'
|
736
758
|
require_relative 'rubocop/cli/command/suggest_extensions'
|