rubocop 1.72.1 → 1.81.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +22 -18
- data/config/default.yml +240 -65
- data/config/internal_affairs.yml +20 -0
- data/config/obsoletion.yml +8 -3
- data/exe/rubocop +1 -8
- data/lib/rubocop/cli/command/auto_generate_config.rb +2 -2
- data/lib/rubocop/cli.rb +19 -4
- data/lib/rubocop/config.rb +35 -6
- data/lib/rubocop/config_loader.rb +8 -40
- data/lib/rubocop/config_loader_resolver.rb +9 -7
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -3
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +18 -3
- data/lib/rubocop/config_obsoletion.rb +46 -2
- data/lib/rubocop/config_store.rb +5 -0
- data/lib/rubocop/config_validator.rb +7 -6
- data/lib/rubocop/cop/autocorrect_logic.rb +22 -14
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +7 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +7 -2
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -2
- data/lib/rubocop/cop/gemspec/attribute_assignment.rb +91 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +37 -15
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/require_mfa.rb +15 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +9 -5
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +4 -4
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +6 -2
- data/lib/rubocop/cop/internal_affairs/node_type_group.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +6 -1
- data/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/block_end_newline.rb +1 -0
- data/lib/rubocop/cop/layout/class_structure.rb +36 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +32 -14
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +101 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +34 -4
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +8 -29
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +4 -7
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -0
- data/lib/rubocop/cop/layout/leading_comment_space.rb +13 -1
- data/lib/rubocop/cop/layout/line_length.rb +43 -10
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb +1 -0
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +9 -5
- data/lib/rubocop/cop/layout/redundant_line_break.rb +9 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +11 -5
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +10 -0
- data/lib/rubocop/cop/layout/space_around_keyword.rb +6 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +12 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_before_brackets.rb +5 -38
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +12 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +3 -0
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_range.rb +5 -0
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +2 -3
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +2 -5
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +13 -7
- data/lib/rubocop/cop/lint/debugger.rb +2 -4
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +5 -2
- data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -23
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +5 -42
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +14 -64
- data/lib/rubocop/cop/lint/empty_interpolation.rb +14 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +0 -6
- data/lib/rubocop/cop/lint/float_comparison.rb +32 -10
- data/lib/rubocop/cop/lint/identity_comparison.rb +19 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +124 -10
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +17 -8
- data/lib/rubocop/cop/lint/mixed_case_range.rb +2 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +3 -3
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +1 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -1
- data/lib/rubocop/cop/lint/raise_exception.rb +29 -10
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +0 -21
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +101 -2
- data/lib/rubocop/cop/lint/redundant_type_conversion.rb +43 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +3 -0
- data/lib/rubocop/cop/lint/redundant_with_object.rb +3 -0
- data/lib/rubocop/cop/lint/require_range_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +1 -1
- data/lib/rubocop/cop/lint/return_in_void_context.rb +9 -11
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +4 -4
- data/lib/rubocop/cop/lint/self_assignment.rb +31 -5
- data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +13 -1
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +12 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +2 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_loop.rb +5 -5
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +2 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +30 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +2 -0
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +9 -12
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +90 -0
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +1 -0
- data/lib/rubocop/cop/lint/useless_or.rb +98 -0
- data/lib/rubocop/cop/lint/useless_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +3 -3
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +121 -0
- data/lib/rubocop/cop/lint/void.rb +16 -2
- data/lib/rubocop/cop/message_annotator.rb +7 -3
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +1 -0
- data/lib/rubocop/cop/metrics/method_length.rb +1 -0
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -1
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +4 -4
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -3
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +2 -2
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +1 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -7
- data/lib/rubocop/cop/mixin/forbidden_identifiers.rb +20 -0
- data/lib/rubocop/cop/mixin/forbidden_pattern.rb +16 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -2
- data/lib/rubocop/cop/mixin/gemspec_help.rb +22 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +15 -14
- data/lib/rubocop/cop/mixin/hash_subset.rb +19 -4
- data/lib/rubocop/cop/mixin/line_length_help.rb +24 -8
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -0
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +2 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +12 -0
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +1 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +18 -2
- data/lib/rubocop/cop/naming/block_forwarding.rb +3 -3
- data/lib/rubocop/cop/naming/file_name.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +187 -15
- data/lib/rubocop/cop/naming/predicate_method.rb +319 -0
- data/lib/rubocop/cop/naming/{predicate_name.rb → predicate_prefix.rb} +4 -4
- data/lib/rubocop/cop/naming/variable_name.rb +51 -6
- data/lib/rubocop/cop/registry.rb +9 -6
- data/lib/rubocop/cop/security/eval.rb +2 -1
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +32 -10
- data/lib/rubocop/cop/style/accessor_grouping.rb +32 -6
- data/lib/rubocop/cop/style/arguments_forwarding.rb +21 -24
- data/lib/rubocop/cop/style/array_intersect.rb +113 -38
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/bitwise_predicate.rb +8 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +3 -2
- data/lib/rubocop/cop/style/case_like_if.rb +1 -1
- data/lib/rubocop/cop/style/class_and_module_children.rb +48 -10
- data/lib/rubocop/cop/style/class_equality_comparison.rb +1 -1
- data/lib/rubocop/cop/style/collection_methods.rb +1 -0
- data/lib/rubocop/cop/style/collection_querying.rb +167 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +1 -0
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +12 -5
- data/lib/rubocop/cop/style/comparable_between.rb +78 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +26 -8
- data/lib/rubocop/cop/style/constant_visibility.rb +14 -9
- data/lib/rubocop/cop/style/data_inheritance.rb +7 -0
- data/lib/rubocop/cop/style/def_with_parentheses.rb +18 -5
- data/lib/rubocop/cop/style/dig_chain.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +3 -3
- data/lib/rubocop/cop/style/empty_literal.rb +4 -0
- data/lib/rubocop/cop/style/empty_string_inside_interpolation.rb +100 -0
- data/lib/rubocop/cop/style/endless_method.rb +176 -18
- data/lib/rubocop/cop/style/eval_with_location.rb +3 -3
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -7
- data/lib/rubocop/cop/style/explicit_block_argument.rb +3 -3
- data/lib/rubocop/cop/style/exponential_notation.rb +5 -4
- data/lib/rubocop/cop/style/fetch_env_var.rb +32 -6
- data/lib/rubocop/cop/style/float_division.rb +15 -1
- data/lib/rubocop/cop/style/for.rb +1 -0
- data/lib/rubocop/cop/style/format_string_token.rb +38 -11
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +3 -0
- data/lib/rubocop/cop/style/guard_clause.rb +2 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +16 -8
- data/lib/rubocop/cop/style/hash_each_methods.rb +3 -2
- data/lib/rubocop/cop/style/hash_fetch_chain.rb +104 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -1
- data/lib/rubocop/cop/style/hash_transform_keys.rb +2 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -2
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +3 -3
- data/lib/rubocop/cop/style/if_inside_else.rb +10 -13
- data/lib/rubocop/cop/style/if_unless_modifier.rb +35 -8
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +4 -7
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +10 -6
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +2 -2
- data/lib/rubocop/cop/style/ip_addresses.rb +2 -2
- data/lib/rubocop/cop/style/it_assignment.rb +69 -12
- data/lib/rubocop/cop/style/it_block_parameter.rb +121 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +13 -7
- data/lib/rubocop/cop/style/lambda.rb +1 -0
- data/lib/rubocop/cop/style/lambda_call.rb +7 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +10 -4
- data/lib/rubocop/cop/style/map_into_array.rb +4 -1
- data/lib/rubocop/cop/style/map_to_hash.rb +12 -3
- data/lib/rubocop/cop/style/map_to_set.rb +1 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +9 -8
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +16 -0
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -1
- data/lib/rubocop/cop/style/min_max_comparison.rb +13 -5
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +2 -0
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -9
- data/lib/rubocop/cop/style/next.rb +44 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +9 -7
- data/lib/rubocop/cop/style/object_then.rb +1 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +17 -9
- data/lib/rubocop/cop/style/parallel_assignment.rb +32 -20
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -0
- data/lib/rubocop/cop/style/raise_args.rb +8 -8
- data/lib/rubocop/cop/style/redundant_array_flatten.rb +50 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +35 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +57 -0
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +14 -4
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -9
- data/lib/rubocop/cop/style/redundant_format.rb +79 -18
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +12 -3
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +1 -4
- data/lib/rubocop/cop/style/redundant_parentheses.rb +73 -18
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -0
- data/lib/rubocop/cop/style/redundant_self.rb +9 -5
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort_by.rb +17 -1
- data/lib/rubocop/cop/style/regexp_literal.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +3 -0
- data/lib/rubocop/cop/style/return_nil.rb +2 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +61 -14
- data/lib/rubocop/cop/style/select_by_regexp.rb +4 -1
- data/lib/rubocop/cop/style/semicolon.rb +23 -7
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +3 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +10 -7
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +75 -101
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +18 -15
- data/lib/rubocop/cop/style/struct_inheritance.rb +8 -1
- data/lib/rubocop/cop/style/super_arguments.rb +1 -2
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +3 -1
- data/lib/rubocop/cop/style/top_level_method_definition.rb +1 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +52 -1
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +47 -6
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +48 -6
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/util.rb +1 -1
- data/lib/rubocop/cop/utils/format_string.rb +15 -2
- data/lib/rubocop/cop/variable_force/assignment.rb +7 -3
- data/lib/rubocop/cop/variable_force/scope.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +3 -8
- data/lib/rubocop/cop/variable_force.rb +26 -9
- data/lib/rubocop/cops_documentation_generator.rb +23 -7
- data/lib/rubocop/directive_comment.rb +1 -1
- data/lib/rubocop/ext/regexp_node.rb +0 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +19 -5
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/html_formatter.rb +1 -1
- data/lib/rubocop/formatter/markdown_formatter.rb +1 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +1 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +2 -1
- data/lib/rubocop/lsp/diagnostic.rb +25 -24
- data/lib/rubocop/lsp/routes.rb +65 -9
- data/lib/rubocop/lsp/runtime.rb +5 -5
- data/lib/rubocop/lsp/server.rb +2 -2
- data/lib/rubocop/lsp/stdin_runner.rb +3 -17
- data/lib/rubocop/magic_comment.rb +8 -0
- data/lib/rubocop/pending_cops_reporter.rb +56 -0
- data/lib/rubocop/plugin/configuration_integrator.rb +2 -0
- data/lib/rubocop/plugin/load_error.rb +1 -1
- data/lib/rubocop/plugin.rb +9 -2
- data/lib/rubocop/result_cache.rb +14 -12
- data/lib/rubocop/rspec/cop_helper.rb +6 -1
- data/lib/rubocop/rspec/expect_offense.rb +9 -3
- data/lib/rubocop/rspec/shared_contexts.rb +34 -0
- data/lib/rubocop/rspec/support.rb +3 -0
- data/lib/rubocop/runner.rb +10 -4
- data/lib/rubocop/server/cache.rb +17 -12
- data/lib/rubocop/server/client_command/base.rb +10 -0
- data/lib/rubocop/server/client_command/exec.rb +2 -1
- data/lib/rubocop/server/client_command/start.rb +11 -1
- data/lib/rubocop/target_finder.rb +13 -9
- data/lib/rubocop/target_ruby.rb +11 -2
- data/lib/rubocop/version.rb +14 -7
- data/lib/rubocop.rb +17 -2
- data/lib/ruby_lsp/rubocop/addon.rb +25 -10
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +57 -5
- metadata +24 -8
- data/lib/rubocop/cop/utils/regexp_ranges.rb +0 -113
|
@@ -6,25 +6,29 @@ module RuboCop
|
|
|
6
6
|
# Checks whether certain expressions, e.g. method calls, that could fit
|
|
7
7
|
# completely on a single line, are broken up into multiple lines unnecessarily.
|
|
8
8
|
#
|
|
9
|
-
# @example
|
|
9
|
+
# @example
|
|
10
10
|
# # bad
|
|
11
11
|
# foo(
|
|
12
12
|
# a,
|
|
13
13
|
# b
|
|
14
14
|
# )
|
|
15
15
|
#
|
|
16
|
+
# # good
|
|
17
|
+
# foo(a, b)
|
|
18
|
+
#
|
|
19
|
+
# # bad
|
|
16
20
|
# puts 'string that fits on ' \
|
|
17
21
|
# 'a single line'
|
|
18
22
|
#
|
|
23
|
+
# # good
|
|
24
|
+
# puts 'string that fits on a single line'
|
|
25
|
+
#
|
|
26
|
+
# # bad
|
|
19
27
|
# things
|
|
20
28
|
# .select { |thing| thing.cond? }
|
|
21
29
|
# .join('-')
|
|
22
30
|
#
|
|
23
31
|
# # good
|
|
24
|
-
# foo(a, b)
|
|
25
|
-
#
|
|
26
|
-
# puts 'string that fits on a single line'
|
|
27
|
-
#
|
|
28
32
|
# things.select { |thing| thing.cond? }.join('-')
|
|
29
33
|
#
|
|
30
34
|
# @example InspectBlocks: false (default)
|
|
@@ -29,8 +29,7 @@ module RuboCop
|
|
|
29
29
|
MSG = '`%<kw_loc>s` at %<kw_loc_line>d, %<kw_loc_column>d is not ' \
|
|
30
30
|
'aligned with `%<beginning>s` at ' \
|
|
31
31
|
'%<begin_loc_line>d, %<begin_loc_column>d.'
|
|
32
|
-
ANCESTOR_TYPES = %i[kwbegin
|
|
33
|
-
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS = %i[def defs].freeze
|
|
32
|
+
ANCESTOR_TYPES = %i[kwbegin any_def class module any_block].freeze
|
|
34
33
|
ALTERNATIVE_ACCESS_MODIFIERS = %i[public_class_method private_class_method].freeze
|
|
35
34
|
|
|
36
35
|
def on_resbody(node)
|
|
@@ -96,7 +95,7 @@ module RuboCop
|
|
|
96
95
|
def alignment_source(node, starting_loc)
|
|
97
96
|
ending_loc =
|
|
98
97
|
case node.type
|
|
99
|
-
when :block, :numblock, :kwbegin
|
|
98
|
+
when :block, :numblock, :itblock, :kwbegin
|
|
100
99
|
node.loc.begin
|
|
101
100
|
when :def, :defs, :class, :module,
|
|
102
101
|
:lvasgn, :ivasgn, :cvasgn, :gvasgn, :casgn
|
|
@@ -162,8 +161,7 @@ module RuboCop
|
|
|
162
161
|
end
|
|
163
162
|
|
|
164
163
|
def access_modifier_node(node)
|
|
165
|
-
return nil unless
|
|
166
|
-
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS.include?(node.type)
|
|
164
|
+
return nil unless node.any_def_type?
|
|
167
165
|
|
|
168
166
|
access_modifier_node = node.ancestors.first
|
|
169
167
|
return nil unless access_modifier?(access_modifier_node)
|
|
@@ -196,6 +194,14 @@ module RuboCop
|
|
|
196
194
|
def alignment_location(alignment_node)
|
|
197
195
|
if begin_end_alignment_style == 'start_of_line'
|
|
198
196
|
start_line_range(alignment_node)
|
|
197
|
+
elsif alignment_node.any_block_type?
|
|
198
|
+
# If the alignment node is a block, the `rescue`/`ensure` keyword should
|
|
199
|
+
# be aligned to the start of the block. It is possible that the block's
|
|
200
|
+
# `send_node` spans multiple lines, in which case it should align to the
|
|
201
|
+
# start of the last line.
|
|
202
|
+
send_node = alignment_node.send_node
|
|
203
|
+
range = processed_source.buffer.line_range(send_node.last_line)
|
|
204
|
+
range.adjust(begin_pos: range.source =~ /\S/)
|
|
199
205
|
else
|
|
200
206
|
alignment_node.source_range
|
|
201
207
|
end
|
|
@@ -23,6 +23,16 @@ module RuboCop
|
|
|
23
23
|
def kind(token)
|
|
24
24
|
'semicolon' if token.semicolon?
|
|
25
25
|
end
|
|
26
|
+
|
|
27
|
+
def space_missing?(token1, token2)
|
|
28
|
+
super && !semicolon_sequence?(token1, token2)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def semicolon_sequence?(token, next_token)
|
|
34
|
+
token.semicolon? && next_token.semicolon?
|
|
35
|
+
end
|
|
26
36
|
end
|
|
27
37
|
end
|
|
28
38
|
end
|
|
@@ -16,6 +16,8 @@ module RuboCop
|
|
|
16
16
|
#
|
|
17
17
|
# something = 123if test
|
|
18
18
|
#
|
|
19
|
+
# return(foo + bar)
|
|
20
|
+
#
|
|
19
21
|
# # good
|
|
20
22
|
# something 'test' do |x|
|
|
21
23
|
# end
|
|
@@ -24,6 +26,9 @@ module RuboCop
|
|
|
24
26
|
# end
|
|
25
27
|
#
|
|
26
28
|
# something = 123 if test
|
|
29
|
+
#
|
|
30
|
+
# return (foo + bar)
|
|
31
|
+
#
|
|
27
32
|
class SpaceAroundKeyword < Base
|
|
28
33
|
extend AutoCorrector
|
|
29
34
|
|
|
@@ -33,7 +38,7 @@ module RuboCop
|
|
|
33
38
|
DO = 'do'
|
|
34
39
|
SAFE_NAVIGATION = '&.'
|
|
35
40
|
NAMESPACE_OPERATOR = '::'
|
|
36
|
-
ACCEPT_LEFT_PAREN = %w[break defined? next not rescue
|
|
41
|
+
ACCEPT_LEFT_PAREN = %w[break defined? next not rescue super yield].freeze
|
|
37
42
|
ACCEPT_LEFT_SQUARE_BRACKET = %w[super yield].freeze
|
|
38
43
|
ACCEPT_NAMESPACE_OPERATOR = 'super'
|
|
39
44
|
RESTRICT_ON_SEND = %i[!].freeze
|
|
@@ -151,6 +151,14 @@ module RuboCop
|
|
|
151
151
|
check_operator(:match_pattern, node.loc.operator, node)
|
|
152
152
|
end
|
|
153
153
|
|
|
154
|
+
def on_match_alt(node)
|
|
155
|
+
check_operator(:match_alt, node.loc.operator, node)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def on_match_as(node)
|
|
159
|
+
check_operator(:match_as, node.loc.operator, node)
|
|
160
|
+
end
|
|
161
|
+
|
|
154
162
|
alias on_or on_binary
|
|
155
163
|
alias on_and on_binary
|
|
156
164
|
alias on_lvasgn on_assignment
|
|
@@ -260,7 +268,10 @@ module RuboCop
|
|
|
260
268
|
end
|
|
261
269
|
|
|
262
270
|
def hash_table_style?
|
|
263
|
-
|
|
271
|
+
return false unless align_hash_cop_config
|
|
272
|
+
|
|
273
|
+
enforced_styles = Array(align_hash_cop_config['EnforcedHashRocketStyle'])
|
|
274
|
+
enforced_styles.include?('table')
|
|
264
275
|
end
|
|
265
276
|
|
|
266
277
|
def space_around_exponent_operator?
|
|
@@ -22,50 +22,17 @@ module RuboCop
|
|
|
22
22
|
RESTRICT_ON_SEND = %i[[] []=].freeze
|
|
23
23
|
|
|
24
24
|
def on_send(node)
|
|
25
|
-
return
|
|
25
|
+
return if node.loc.dot
|
|
26
26
|
|
|
27
|
-
begin_pos = first_argument.source_range.begin_pos
|
|
28
|
-
return unless (range = offense_range(node, begin_pos))
|
|
29
|
-
|
|
30
|
-
register_offense(range)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
def offense_range(node, begin_pos)
|
|
36
27
|
receiver_end_pos = node.receiver.source_range.end_pos
|
|
37
28
|
selector_begin_pos = node.loc.selector.begin_pos
|
|
38
29
|
return if receiver_end_pos >= selector_begin_pos
|
|
39
|
-
return if dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
|
40
|
-
|
|
41
|
-
if reference_variable_with_brackets?(node)
|
|
42
|
-
range_between(receiver_end_pos, selector_begin_pos)
|
|
43
|
-
elsif node.method?(:[]=)
|
|
44
|
-
offense_range_for_assignment(node, begin_pos)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
|
49
|
-
return false unless node.loc.respond_to?(:dot) && (dot = node.loc.dot)
|
|
50
30
|
|
|
51
|
-
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def offense_range_for_assignment(node, begin_pos)
|
|
55
|
-
end_pos = node.receiver.source_range.end_pos
|
|
56
|
-
|
|
57
|
-
return if begin_pos - end_pos == 1 ||
|
|
58
|
-
(range = range_between(end_pos, begin_pos - 1)).source.start_with?('[')
|
|
59
|
-
|
|
60
|
-
range
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def register_offense(range)
|
|
64
|
-
add_offense(range) { |corrector| corrector.remove(range) }
|
|
65
|
-
end
|
|
31
|
+
range = range_between(receiver_end_pos, selector_begin_pos)
|
|
66
32
|
|
|
67
|
-
|
|
68
|
-
|
|
33
|
+
add_offense(range) do |corrector|
|
|
34
|
+
corrector.remove(range)
|
|
35
|
+
end
|
|
69
36
|
end
|
|
70
37
|
end
|
|
71
38
|
end
|
|
@@ -6,6 +6,8 @@ module RuboCop
|
|
|
6
6
|
# Checks that brackets used for array literals have or don't have
|
|
7
7
|
# surrounding space depending on configuration.
|
|
8
8
|
#
|
|
9
|
+
# Array pattern matching is handled in the same way.
|
|
10
|
+
#
|
|
9
11
|
# @example EnforcedStyle: no_space (default)
|
|
10
12
|
# # The `no_space` style enforces that array literals have
|
|
11
13
|
# # no surrounding space.
|
|
@@ -82,9 +84,11 @@ module RuboCop
|
|
|
82
84
|
EMPTY_MSG = '%<command>s space inside empty array brackets.'
|
|
83
85
|
|
|
84
86
|
def on_array(node)
|
|
85
|
-
return
|
|
87
|
+
return if node.array_type? && !node.square_brackets?
|
|
86
88
|
|
|
89
|
+
node = find_node_with_brackets(node)
|
|
87
90
|
tokens, left, right = array_brackets(node)
|
|
91
|
+
return unless left && right
|
|
88
92
|
|
|
89
93
|
if empty_brackets?(left, right, tokens: tokens)
|
|
90
94
|
return empty_offenses(node, left, right, EMPTY_MSG)
|
|
@@ -95,9 +99,14 @@ module RuboCop
|
|
|
95
99
|
|
|
96
100
|
issue_offenses(node, left, right, start_ok, end_ok)
|
|
97
101
|
end
|
|
102
|
+
alias on_array_pattern on_array
|
|
98
103
|
|
|
99
104
|
private
|
|
100
105
|
|
|
106
|
+
def find_node_with_brackets(node)
|
|
107
|
+
node.ancestors.find(&:const_pattern_type?) || node
|
|
108
|
+
end
|
|
109
|
+
|
|
101
110
|
def autocorrect(corrector, node)
|
|
102
111
|
tokens, left, right = array_brackets(node)
|
|
103
112
|
|
|
@@ -115,7 +124,7 @@ module RuboCop
|
|
|
115
124
|
def array_brackets(node)
|
|
116
125
|
tokens = processed_source.tokens_within(node)
|
|
117
126
|
|
|
118
|
-
left = tokens.find(&:
|
|
127
|
+
left = tokens.find(&:left_bracket?)
|
|
119
128
|
right = tokens.reverse_each.find(&:right_bracket?)
|
|
120
129
|
|
|
121
130
|
[tokens, left, right]
|
|
@@ -188,7 +197,7 @@ module RuboCop
|
|
|
188
197
|
if side == :right
|
|
189
198
|
processed_source.tokens_within(node)[i].right_bracket?
|
|
190
199
|
else
|
|
191
|
-
processed_source.tokens_within(node)[i].
|
|
200
|
+
processed_source.tokens_within(node)[i].left_bracket?
|
|
192
201
|
end
|
|
193
202
|
end
|
|
194
203
|
|
|
@@ -6,6 +6,8 @@ module RuboCop
|
|
|
6
6
|
# Checks that braces used for hash literals have or don't have
|
|
7
7
|
# surrounding space depending on configuration.
|
|
8
8
|
#
|
|
9
|
+
# Hash pattern matching is handled in the same way.
|
|
10
|
+
#
|
|
9
11
|
# @example EnforcedStyle: space (default)
|
|
10
12
|
# # The `space` style enforces that hash literals have
|
|
11
13
|
# # surrounding space.
|
|
@@ -87,6 +89,7 @@ module RuboCop
|
|
|
87
89
|
check(tokens[-2], tokens[-1]) if tokens.size > 2
|
|
88
90
|
check_whitespace_only_hash(node) if enforce_no_space_style_for_empty_braces?
|
|
89
91
|
end
|
|
92
|
+
alias on_hash_pattern on_hash
|
|
90
93
|
|
|
91
94
|
private
|
|
92
95
|
|
|
@@ -27,7 +27,9 @@ module RuboCop
|
|
|
27
27
|
# @example
|
|
28
28
|
# # bad
|
|
29
29
|
# x || 1..2
|
|
30
|
+
# x - 1..2
|
|
30
31
|
# (x || 1..2)
|
|
32
|
+
# x || 1..y || 2
|
|
31
33
|
# 1..2.to_a
|
|
32
34
|
#
|
|
33
35
|
# # good, unambiguous
|
|
@@ -41,6 +43,7 @@ module RuboCop
|
|
|
41
43
|
#
|
|
42
44
|
# # good, ambiguity removed
|
|
43
45
|
# x || (1..2)
|
|
46
|
+
# (x - 1)..2
|
|
44
47
|
# (x || 1)..2
|
|
45
48
|
# (x || 1)..(y || 2)
|
|
46
49
|
# (1..2).to_a
|
|
@@ -96,6 +99,8 @@ module RuboCop
|
|
|
96
99
|
# to avoid the ambiguity of `1..2.to_a`.
|
|
97
100
|
return false if node.receiver&.basic_literal?
|
|
98
101
|
|
|
102
|
+
return false if node.operator_method? && !node.method?(:[])
|
|
103
|
+
|
|
99
104
|
require_parentheses_for_method_chain? || node.receiver.nil?
|
|
100
105
|
end
|
|
101
106
|
|
|
@@ -51,10 +51,9 @@ module RuboCop
|
|
|
51
51
|
'in a regexp.'
|
|
52
52
|
|
|
53
53
|
def on_interpolation(begin_node)
|
|
54
|
-
final_node = begin_node.children.last
|
|
55
|
-
|
|
56
|
-
return unless begin_node.parent.regexp_type?
|
|
54
|
+
return unless (final_node = begin_node.children.last)
|
|
57
55
|
return unless final_node.array_type?
|
|
56
|
+
return unless begin_node.parent.regexp_type?
|
|
58
57
|
|
|
59
58
|
if array_of_literal_values?(final_node)
|
|
60
59
|
register_array_of_literal_values(begin_node, final_node)
|
|
@@ -48,7 +48,7 @@ module RuboCop
|
|
|
48
48
|
def autocorrect(corrector, node)
|
|
49
49
|
boolean_literal = node.source.delete(':')
|
|
50
50
|
parent = node.parent
|
|
51
|
-
if parent&.pair_type? && node.equal?(parent.children[0])
|
|
51
|
+
if parent&.pair_type? && parent.colon? && node.equal?(parent.children[0])
|
|
52
52
|
corrector.remove(parent.loc.operator)
|
|
53
53
|
boolean_literal = "#{node.source} =>"
|
|
54
54
|
end
|
|
@@ -6,9 +6,8 @@ module RuboCop
|
|
|
6
6
|
# Checks for circular argument references in optional keyword
|
|
7
7
|
# arguments and optional ordinal arguments.
|
|
8
8
|
#
|
|
9
|
-
# This
|
|
10
|
-
#
|
|
11
|
-
# NOTE: This syntax is no longer valid on Ruby 2.7 or higher.
|
|
9
|
+
# NOTE: This syntax was made invalid on Ruby 2.7 - Ruby 3.3 but is allowed
|
|
10
|
+
# again since Ruby 3.4.
|
|
12
11
|
#
|
|
13
12
|
# @example
|
|
14
13
|
#
|
|
@@ -41,8 +40,6 @@ module RuboCop
|
|
|
41
40
|
|
|
42
41
|
MSG = 'Circular argument reference - `%<arg_name>s`.'
|
|
43
42
|
|
|
44
|
-
maximum_target_ruby_version 2.6
|
|
45
|
-
|
|
46
43
|
def on_kwoptarg(node)
|
|
47
44
|
check_for_circular_argument_references(*node)
|
|
48
45
|
end
|
|
@@ -31,7 +31,7 @@ module RuboCop
|
|
|
31
31
|
|
|
32
32
|
# @!method overwritten_constant(node)
|
|
33
33
|
def_node_matcher :overwritten_constant, <<~PATTERN
|
|
34
|
-
(resbody nil? (casgn
|
|
34
|
+
(resbody nil? $(casgn _ _) nil?)
|
|
35
35
|
PATTERN
|
|
36
36
|
|
|
37
37
|
def self.autocorrect_incompatible_with
|
|
@@ -41,7 +41,8 @@ module RuboCop
|
|
|
41
41
|
def on_resbody(node)
|
|
42
42
|
return unless (constant = overwritten_constant(node))
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
message = format(MSG, constant: constant.source)
|
|
45
|
+
add_offense(node.loc.assoc, message: message) do |corrector|
|
|
45
46
|
corrector.remove(range_between(node.loc.keyword.end_pos, node.loc.assoc.end_pos))
|
|
46
47
|
end
|
|
47
48
|
end
|
|
@@ -13,28 +13,34 @@ module RuboCop
|
|
|
13
13
|
# @example
|
|
14
14
|
# # bad
|
|
15
15
|
# # rubocop:disable Layout/LineLength Style/Encoding
|
|
16
|
-
#
|
|
16
|
+
#
|
|
17
|
+
# # good
|
|
18
|
+
# # rubocop:disable Layout/LineLength, Style/Encoding
|
|
17
19
|
#
|
|
18
20
|
# # bad
|
|
19
21
|
# # rubocop:disable
|
|
20
22
|
#
|
|
23
|
+
# # good
|
|
24
|
+
# # rubocop:disable all
|
|
25
|
+
#
|
|
21
26
|
# # bad
|
|
22
27
|
# # rubocop:disable Layout/LineLength # rubocop:disable Style/Encoding
|
|
23
28
|
#
|
|
29
|
+
# # good
|
|
30
|
+
# # rubocop:disable Layout/LineLength
|
|
31
|
+
# # rubocop:disable Style/Encoding
|
|
32
|
+
#
|
|
24
33
|
# # bad
|
|
25
34
|
# # rubocop:wrongmode Layout/LineLength
|
|
26
35
|
#
|
|
27
36
|
# # good
|
|
28
37
|
# # rubocop:disable Layout/LineLength
|
|
29
38
|
#
|
|
30
|
-
# #
|
|
31
|
-
# # rubocop:disable Layout/LineLength
|
|
32
|
-
#
|
|
33
|
-
# # good
|
|
34
|
-
# # rubocop:disable all
|
|
39
|
+
# # bad
|
|
40
|
+
# # rubocop:disable Layout/LineLength comment
|
|
35
41
|
#
|
|
36
42
|
# # good
|
|
37
|
-
# # rubocop:disable Layout/LineLength --
|
|
43
|
+
# # rubocop:disable Layout/LineLength -- comment
|
|
38
44
|
#
|
|
39
45
|
class CopDirectiveSyntax < Base
|
|
40
46
|
COMMON_MSG = 'Malformed directive comment detected.'
|
|
@@ -73,7 +73,7 @@ module RuboCop
|
|
|
73
73
|
# require 'my_debugger/start'
|
|
74
74
|
class Debugger < Base
|
|
75
75
|
MSG = 'Remove debugger entry point `%<source>s`.'
|
|
76
|
-
BLOCK_TYPES = %i[block numblock kwbegin].freeze
|
|
76
|
+
BLOCK_TYPES = %i[block numblock itblock kwbegin].freeze
|
|
77
77
|
|
|
78
78
|
def on_send(node)
|
|
79
79
|
return if assumed_usage_context?(node)
|
|
@@ -102,8 +102,6 @@ module RuboCop
|
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
def debugger_method?(send_node)
|
|
105
|
-
return false if send_node.parent&.send_type? && send_node.parent.receiver == send_node
|
|
106
|
-
|
|
107
105
|
debugger_methods.include?(chained_method_name(send_node))
|
|
108
106
|
end
|
|
109
107
|
|
|
@@ -120,7 +118,7 @@ module RuboCop
|
|
|
120
118
|
return true if assumed_argument?(node)
|
|
121
119
|
|
|
122
120
|
node.each_ancestor.none? do |ancestor|
|
|
123
|
-
|
|
121
|
+
ancestor.type?(:any_block, :kwbegin) || ancestor.lambda_or_proc?
|
|
124
122
|
end
|
|
125
123
|
end
|
|
126
124
|
|
|
@@ -118,8 +118,11 @@ module RuboCop
|
|
|
118
118
|
|
|
119
119
|
def replacement_args(node)
|
|
120
120
|
algorithm_constant, = algorithm_const(node)
|
|
121
|
-
|
|
121
|
+
if algorithm_constant.source == 'OpenSSL::Cipher::Cipher'
|
|
122
|
+
return node.first_argument.source
|
|
123
|
+
end
|
|
122
124
|
|
|
125
|
+
algorithm_name = algorithm_name(algorithm_constant)
|
|
123
126
|
if openssl_class(algorithm_constant) == 'OpenSSL::Cipher'
|
|
124
127
|
build_cipher_arguments(node, algorithm_name, node.arguments.empty?)
|
|
125
128
|
else
|
|
@@ -134,7 +137,7 @@ module RuboCop
|
|
|
134
137
|
if NO_ARG_ALGORITHM.include?(algorithm_parts.first.upcase) && no_arguments
|
|
135
138
|
"'#{algorithm_parts.first}'"
|
|
136
139
|
else
|
|
137
|
-
mode = 'cbc'
|
|
140
|
+
mode = 'cbc' if size_and_mode.empty?
|
|
138
141
|
|
|
139
142
|
"'#{(algorithm_parts + size_and_mode + [mode]).compact.take(3).join('-')}'"
|
|
140
143
|
end
|