rubocop 1.59.0 → 1.68.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +69 -70
- data/assets/output.css.erb +159 -0
- data/assets/output.html.erb +1 -160
- data/config/default.yml +165 -24
- data/config/internal_affairs.yml +11 -0
- data/exe/rubocop +4 -3
- data/lib/rubocop/cached_data.rb +21 -5
- data/lib/rubocop/cli/command/auto_generate_config.rb +18 -10
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/lsp.rb +4 -4
- data/lib/rubocop/cli/command/show_docs_url.rb +2 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +10 -1
- data/lib/rubocop/comment_config.rb +1 -1
- data/lib/rubocop/config.rb +41 -13
- data/lib/rubocop/config_finder.rb +12 -2
- data/lib/rubocop/config_loader.rb +15 -10
- data/lib/rubocop/config_loader_resolver.rb +13 -8
- data/lib/rubocop/config_obsoletion.rb +1 -1
- data/lib/rubocop/config_validator.rb +17 -9
- data/lib/rubocop/cop/autocorrect_logic.rb +28 -3
- data/lib/rubocop/cop/base.rb +73 -18
- data/lib/rubocop/cop/bundler/gem_version.rb +4 -5
- data/lib/rubocop/cop/cop.rb +30 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -12
- 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/line_break_corrector.rb +2 -0
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -0
- data/lib/rubocop/cop/documentation.rb +32 -5
- data/lib/rubocop/cop/exclude_limit.rb +1 -1
- data/lib/rubocop/cop/force.rb +12 -0
- data/lib/rubocop/cop/gemspec/add_runtime_dependency.rb +38 -0
- data/lib/rubocop/cop/gemspec/dependency_version.rb +3 -5
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +5 -1
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +3 -3
- data/lib/rubocop/cop/internal_affairs/cop_description.rb +0 -4
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/example_description.rb +6 -5
- data/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +8 -6
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +123 -29
- data/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +34 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +6 -21
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +8 -1
- data/lib/rubocop/cop/internal_affairs/undefined_config.rb +11 -1
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +0 -5
- data/lib/rubocop/cop/internal_affairs.rb +17 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/assignment_indentation.rb +3 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +30 -12
- data/lib/rubocop/cop/layout/case_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/condition_position.rb +0 -4
- data/lib/rubocop/cop/layout/def_end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_comment.rb +3 -1
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +14 -7
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +8 -3
- data/lib/rubocop/cop/layout/end_alignment.rb +8 -2
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +18 -4
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +8 -0
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +5 -6
- data/lib/rubocop/cop/layout/leading_comment_space.rb +56 -1
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +20 -20
- data/lib/rubocop/cop/layout/redundant_line_break.rb +14 -2
- data/lib/rubocop/cop/layout/space_around_operators.rb +3 -0
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +19 -10
- data/lib/rubocop/cop/layout/space_before_brackets.rb +5 -5
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +4 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +3 -4
- data/lib/rubocop/cop/legacy/corrector.rb +12 -2
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +0 -2
- data/lib/rubocop/cop/lint/ambiguous_range.rb +4 -1
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +0 -2
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +4 -7
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -3
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +0 -13
- data/lib/rubocop/cop/lint/debugger.rb +27 -6
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +0 -10
- data/lib/rubocop/cop/lint/duplicate_branch.rb +39 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -5
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +0 -4
- data/lib/rubocop/cop/lint/duplicate_methods.rb +0 -10
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +74 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +0 -4
- data/lib/rubocop/cop/lint/else_layout.rb +0 -2
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +29 -8
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -11
- data/lib/rubocop/cop/lint/empty_interpolation.rb +0 -4
- data/lib/rubocop/cop/lint/empty_when.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -9
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +21 -14
- data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +0 -4
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +0 -10
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +23 -12
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +0 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +0 -4
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +5 -14
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +13 -6
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +25 -6
- data/lib/rubocop/cop/lint/loop.rb +6 -12
- data/lib/rubocop/cop/lint/mixed_case_range.rb +9 -4
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -7
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +0 -4
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +0 -5
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +7 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +5 -6
- data/lib/rubocop/cop/lint/percent_string_array.rb +0 -4
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +0 -4
- data/lib/rubocop/cop/lint/rand_one.rb +0 -4
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +3 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +14 -9
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +0 -4
- data/lib/rubocop/cop/lint/redundant_with_index.rb +4 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +0 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +1 -3
- data/lib/rubocop/cop/lint/return_in_void_context.rb +0 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +9 -4
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +107 -41
- data/lib/rubocop/cop/lint/script_permission.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +6 -10
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +6 -3
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +1 -3
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +88 -0
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -4
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +4 -7
- data/lib/rubocop/cop/lint/unreachable_loop.rb +8 -2
- data/lib/rubocop/cop/lint/uri_regexp.rb +25 -7
- data/lib/rubocop/cop/lint/useless_assignment.rb +19 -16
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +0 -4
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +77 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +0 -4
- data/lib/rubocop/cop/lint/useless_times.rb +1 -1
- data/lib/rubocop/cop/lint/void.rb +41 -9
- data/lib/rubocop/cop/metrics/block_length.rb +6 -5
- data/lib/rubocop/cop/metrics/block_nesting.rb +19 -7
- data/lib/rubocop/cop/metrics/class_length.rb +6 -5
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +4 -1
- data/lib/rubocop/cop/metrics/method_length.rb +6 -5
- data/lib/rubocop/cop/metrics/module_length.rb +6 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +5 -5
- data/lib/rubocop/cop/mixin/alignment.rb +5 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +7 -1
- data/lib/rubocop/cop/mixin/allowed_pattern.rb +15 -3
- data/lib/rubocop/cop/mixin/annotation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +10 -0
- data/lib/rubocop/cop/mixin/code_length.rb +12 -1
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_max.rb +5 -1
- data/lib/rubocop/cop/mixin/endless_method_rewriter.rb +24 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +22 -10
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +9 -2
- data/lib/rubocop/cop/mixin/line_length_help.rb +7 -2
- data/lib/rubocop/cop/mixin/method_complexity.rb +15 -6
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -1
- data/lib/rubocop/cop/mixin/rescue_node.rb +4 -0
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +3 -2
- data/lib/rubocop/cop/mixin/string_literals_help.rb +12 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +5 -0
- data/lib/rubocop/cop/naming/block_forwarding.rb +33 -6
- data/lib/rubocop/cop/naming/file_name.rb +2 -2
- data/lib/rubocop/cop/naming/inclusive_language.rb +13 -5
- data/lib/rubocop/cop/naming/predicate_name.rb +55 -29
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +10 -1
- data/lib/rubocop/cop/offense.rb +4 -5
- data/lib/rubocop/cop/registry.rb +1 -1
- data/lib/rubocop/cop/security/compound_hash.rb +2 -2
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +62 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +10 -2
- data/lib/rubocop/cop/style/alias.rb +2 -1
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +79 -0
- data/lib/rubocop/cop/style/arguments_forwarding.rb +141 -24
- data/lib/rubocop/cop/style/bitwise_predicate.rb +100 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +31 -3
- data/lib/rubocop/cop/style/case_like_if.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +3 -3
- data/lib/rubocop/cop/style/collection_compact.rb +19 -10
- data/lib/rubocop/cop/style/combinable_defined.rb +115 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +7 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +12 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +7 -8
- data/lib/rubocop/cop/style/copyright.rb +31 -21
- data/lib/rubocop/cop/style/data_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/def_with_parentheses.rb +0 -2
- data/lib/rubocop/cop/style/documentation.rb +24 -24
- data/lib/rubocop/cop/style/documentation_method.rb +20 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +7 -8
- data/lib/rubocop/cop/style/empty_else.rb +6 -5
- data/lib/rubocop/cop/style/empty_heredoc.rb +1 -14
- data/lib/rubocop/cop/style/empty_literal.rb +31 -22
- data/lib/rubocop/cop/style/endless_method.rb +1 -14
- data/lib/rubocop/cop/style/eval_with_location.rb +16 -24
- data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -1
- data/lib/rubocop/cop/style/file_read.rb +2 -5
- data/lib/rubocop/cop/style/file_write.rb +2 -5
- data/lib/rubocop/cop/style/for.rb +2 -0
- data/lib/rubocop/cop/style/format_string.rb +9 -9
- data/lib/rubocop/cop/style/format_string_token.rb +2 -2
- data/lib/rubocop/cop/style/global_std_stream.rb +7 -1
- data/lib/rubocop/cop/style/guard_clause.rb +17 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +35 -8
- data/lib/rubocop/cop/style/hash_except.rb +8 -5
- data/lib/rubocop/cop/style/hash_syntax.rb +26 -4
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +5 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +5 -4
- data/lib/rubocop/cop/style/if_with_semicolon.rb +49 -6
- data/lib/rubocop/cop/style/in_pattern_then.rb +6 -2
- data/lib/rubocop/cop/style/inverse_methods.rb +8 -8
- data/lib/rubocop/cop/style/invertible_unless_condition.rb +46 -4
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +67 -0
- data/lib/rubocop/cop/style/lambda.rb +1 -1
- data/lib/rubocop/cop/style/magic_comment_format.rb +1 -1
- data/lib/rubocop/cop/style/map_compact_with_conditional_block.rb +81 -50
- data/lib/rubocop/cop/style/map_into_array.rb +233 -0
- data/lib/rubocop/cop/style/map_to_hash.rb +10 -6
- data/lib/rubocop/cop/style/map_to_set.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +29 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -4
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/missing_else.rb +0 -4
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +10 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +5 -3
- data/lib/rubocop/cop/style/multiline_when_then.rb +0 -4
- data/lib/rubocop/cop/style/multiple_comparison.rb +28 -47
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/nested_parenthesized_calls.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_predicate.rb +12 -4
- data/lib/rubocop/cop/style/object_then.rb +5 -3
- data/lib/rubocop/cop/style/one_line_conditional.rb +6 -2
- data/lib/rubocop/cop/style/operator_method_call.rb +25 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +8 -9
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +8 -0
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -3
- data/lib/rubocop/cop/style/raise_args.rb +4 -1
- data/lib/rubocop/cop/style/redundant_argument.rb +25 -2
- data/lib/rubocop/cop/style/redundant_assignment.rb +10 -2
- data/lib/rubocop/cop/style/redundant_begin.rb +5 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +4 -4
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +5 -4
- data/lib/rubocop/cop/style/redundant_each.rb +7 -4
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_filter_chain.rb +1 -1
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +46 -0
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +40 -7
- data/lib/rubocop/cop/style/redundant_parentheses.rb +27 -13
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +4 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -24
- data/lib/rubocop/cop/style/redundant_return.rb +6 -0
- data/lib/rubocop/cop/style/require_order.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +13 -1
- data/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb +54 -12
- data/lib/rubocop/cop/style/safe_navigation.rb +106 -52
- data/lib/rubocop/cop/style/safe_navigation_chain_length.rb +52 -0
- data/lib/rubocop/cop/style/sample.rb +1 -3
- data/lib/rubocop/cop/style/select_by_regexp.rb +9 -6
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/send.rb +4 -4
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +104 -0
- data/lib/rubocop/cop/style/slicing_with_range.rb +76 -10
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +21 -2
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -2
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/super_arguments.rb +174 -0
- data/lib/rubocop/cop/style/symbol_proc.rb +75 -5
- data/lib/rubocop/cop/style/ternary_parentheses.rb +26 -5
- data/lib/rubocop/cop/style/top_level_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/while_until_do.rb +0 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +0 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +32 -24
- data/lib/rubocop/cop/team.rb +27 -3
- data/lib/rubocop/cop/util.rb +8 -2
- data/lib/rubocop/cop/utils/regexp_ranges.rb +1 -1
- data/lib/rubocop/cop/variable_force/assignment.rb +18 -3
- data/lib/rubocop/cop/variable_force/branch.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable.rb +5 -1
- data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
- data/lib/rubocop/cop/variable_force.rb +13 -1
- data/lib/rubocop/cops_documentation_generator.rb +96 -43
- data/lib/rubocop/core_ext/string.rb +2 -6
- data/lib/rubocop/directive_comment.rb +10 -8
- data/lib/rubocop/ext/regexp_node.rb +18 -35
- data/lib/rubocop/ext/regexp_parser.rb +4 -21
- data/lib/rubocop/file_finder.rb +9 -4
- data/lib/rubocop/formatter/clang_style_formatter.rb +3 -7
- data/lib/rubocop/formatter/disabled_config_formatter.rb +24 -9
- data/lib/rubocop/formatter/formatter_set.rb +7 -1
- data/lib/rubocop/formatter/html_formatter.rb +32 -10
- data/lib/rubocop/formatter/json_formatter.rb +0 -1
- data/lib/rubocop/formatter/junit_formatter.rb +70 -23
- data/lib/rubocop/formatter/offense_count_formatter.rb +12 -2
- data/lib/rubocop/formatter/tap_formatter.rb +3 -7
- data/lib/rubocop/formatter.rb +1 -1
- data/lib/rubocop/lockfile.rb +58 -7
- data/lib/rubocop/lsp/logger.rb +1 -1
- data/lib/rubocop/lsp/routes.rb +12 -15
- data/lib/rubocop/lsp/runtime.rb +3 -1
- data/lib/rubocop/lsp/server.rb +6 -2
- data/lib/rubocop/lsp/severity.rb +1 -1
- data/lib/rubocop/lsp.rb +36 -0
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/options.rb +17 -12
- data/lib/rubocop/path_util.rb +6 -2
- data/lib/rubocop/rake_task.rb +1 -1
- data/lib/rubocop/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +2 -8
- data/lib/rubocop/rspec/cop_helper.rb +8 -2
- data/lib/rubocop/rspec/expect_offense.rb +17 -8
- data/lib/rubocop/rspec/shared_contexts.rb +75 -18
- data/lib/rubocop/rspec/support.rb +3 -0
- data/lib/rubocop/runner.rb +31 -9
- data/lib/rubocop/server/cache.rb +16 -2
- data/lib/rubocop/server/client_command/exec.rb +2 -3
- data/lib/rubocop/server/client_command/start.rb +1 -1
- data/lib/rubocop/server/core.rb +5 -0
- data/lib/rubocop/server/server_command/exec.rb +0 -1
- data/lib/rubocop/target_finder.rb +84 -78
- data/lib/rubocop/target_ruby.rb +87 -81
- data/lib/rubocop/version.rb +45 -9
- data/lib/rubocop/yaml_duplication_checker.rb +20 -26
- data/lib/rubocop.rb +21 -1
- metadata +33 -35
- /data/lib/rubocop/formatter/{git_hub_actions_formatter.rb → github_actions_formatter.rb} +0 -0
@@ -83,7 +83,7 @@ module RuboCop
|
|
83
83
|
|
84
84
|
locations.each do |loc|
|
85
85
|
line = loc.line
|
86
|
-
next if line == line_of_def_or_kwbegin ||
|
86
|
+
next if line == line_of_def_or_kwbegin || last_body_and_end_on_same_line?(body)
|
87
87
|
|
88
88
|
keyword = loc.source
|
89
89
|
# below the keyword
|
@@ -93,8 +93,13 @@ module RuboCop
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
-
def
|
97
|
-
|
96
|
+
def last_body_and_end_on_same_line?(body)
|
97
|
+
end_keyword_line = body.parent.loc.end.line
|
98
|
+
return body.loc.last_line == end_keyword_line unless body.rescue_type?
|
99
|
+
|
100
|
+
last_body_line = body.else? ? body.loc.else.line : body.resbody_branches.last.loc.line
|
101
|
+
|
102
|
+
last_body_line == end_keyword_line
|
98
103
|
end
|
99
104
|
|
100
105
|
def message(location, keyword)
|
@@ -20,7 +20,9 @@ module RuboCop
|
|
20
20
|
# This `Layout/EndAlignment` cop aligns with keywords (e.g. `if`, `while`, `case`)
|
21
21
|
# by default. On the other hand, `Layout/BeginEndAlignment` cop aligns with
|
22
22
|
# `EnforcedStyleAlignWith: start_of_line` by default due to `||= begin` tends
|
23
|
-
# to align with the start of the line.
|
23
|
+
# to align with the start of the line. `Layout/DefEndAlignment` cop also aligns with
|
24
|
+
# `EnforcedStyleAlignWith: start_of_line` by default.
|
25
|
+
# These style can be configured by each cop.
|
24
26
|
#
|
25
27
|
# @example EnforcedStyleAlignWith: keyword (default)
|
26
28
|
# # bad
|
@@ -83,7 +85,11 @@ module RuboCop
|
|
83
85
|
end
|
84
86
|
|
85
87
|
def on_sclass(node)
|
86
|
-
|
88
|
+
if node.parent&.assignment?
|
89
|
+
check_asgn_alignment(node.parent, node)
|
90
|
+
else
|
91
|
+
check_other_alignment(node)
|
92
|
+
end
|
87
93
|
end
|
88
94
|
|
89
95
|
def on_module(node)
|
@@ -118,8 +118,8 @@ module RuboCop
|
|
118
118
|
#
|
119
119
|
# @example EnforcedStyle: special_for_inner_method_call
|
120
120
|
# # The first argument should normally be indented one step more than
|
121
|
-
# # the preceding line, but if it's
|
122
|
-
# # is itself
|
121
|
+
# # the preceding line, but if it's an argument for a method call that
|
122
|
+
# # is itself an argument in a method call, then the inner argument
|
123
123
|
# # should be indented relative to the inner method.
|
124
124
|
#
|
125
125
|
# # good
|
@@ -5,7 +5,10 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# Checks the indentation of the first element in an array literal
|
7
7
|
# where the opening bracket and the first element are on separate lines.
|
8
|
-
# The other elements' indentations are handled by
|
8
|
+
# The other elements' indentations are handled by `Layout/ArrayAlignment` cop.
|
9
|
+
#
|
10
|
+
# This cop will respect `Layout/ArrayAlignment` and will not work when
|
11
|
+
# `EnforcedStyle: with_fixed_indentation` is specified for `Layout/ArrayAlignment`.
|
9
12
|
#
|
10
13
|
# By default, array literals that are arguments in a method call with
|
11
14
|
# parentheses, and where the opening square bracket of the array is on the
|
@@ -48,7 +51,6 @@ module RuboCop
|
|
48
51
|
# # defined inside a method call.
|
49
52
|
#
|
50
53
|
# # bad
|
51
|
-
# # consistent
|
52
54
|
# array = [
|
53
55
|
# :value
|
54
56
|
# ]
|
@@ -69,13 +71,11 @@ module RuboCop
|
|
69
71
|
# # brackets are indented to the same position.
|
70
72
|
#
|
71
73
|
# # bad
|
72
|
-
# # align_brackets
|
73
74
|
# and_now_for_something = [
|
74
75
|
# :completely_different
|
75
76
|
# ]
|
76
77
|
#
|
77
78
|
# # good
|
78
|
-
# # align_brackets
|
79
79
|
# and_now_for_something = [
|
80
80
|
# :completely_different
|
81
81
|
# ]
|
@@ -89,10 +89,14 @@ module RuboCop
|
|
89
89
|
'in an array, relative to %<base_description>s.'
|
90
90
|
|
91
91
|
def on_array(node)
|
92
|
+
return if style != :consistent && enforce_first_argument_with_fixed_indentation?
|
93
|
+
|
92
94
|
check(node, nil) if node.loc.begin
|
93
95
|
end
|
94
96
|
|
95
97
|
def on_send(node)
|
98
|
+
return if style != :consistent && enforce_first_argument_with_fixed_indentation?
|
99
|
+
|
96
100
|
each_argument_node(node, :array) do |array_node, left_parenthesis|
|
97
101
|
check(array_node, left_parenthesis)
|
98
102
|
end
|
@@ -174,6 +178,16 @@ module RuboCop
|
|
174
178
|
'where the left bracket is.'
|
175
179
|
end
|
176
180
|
end
|
181
|
+
|
182
|
+
def enforce_first_argument_with_fixed_indentation?
|
183
|
+
return false unless array_alignment_config['Enabled']
|
184
|
+
|
185
|
+
array_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
186
|
+
end
|
187
|
+
|
188
|
+
def array_alignment_config
|
189
|
+
config.for_cop('Layout/ArrayAlignment')
|
190
|
+
end
|
177
191
|
end
|
178
192
|
end
|
179
193
|
end
|
@@ -63,13 +63,21 @@ module RuboCop
|
|
63
63
|
# }
|
64
64
|
# )
|
65
65
|
#
|
66
|
+
# @example AllowedMethods: ['some_method']
|
67
|
+
#
|
68
|
+
# # good
|
69
|
+
# some_method(foo, bar,
|
70
|
+
# baz)
|
66
71
|
class FirstMethodArgumentLineBreak < Base
|
67
72
|
include FirstElementLineBreak
|
73
|
+
include AllowedMethods
|
68
74
|
extend AutoCorrector
|
69
75
|
|
70
76
|
MSG = 'Add a line break before the first argument of a multi-line method argument list.'
|
71
77
|
|
72
78
|
def on_send(node)
|
79
|
+
return if allowed_method?(node.method_name)
|
80
|
+
|
73
81
|
args = node.arguments.dup
|
74
82
|
|
75
83
|
# If there is a trailing hash arg without explicit braces, like this:
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
6
6
|
# Checks the indentation of the here document bodies. The bodies
|
7
7
|
# are indented one step.
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# NOTE: When ``Layout/LineLength``'s `AllowHeredoc` is false (not default),
|
10
10
|
# this cop does not add any offenses for long here documents to
|
11
11
|
# avoid ``Layout/LineLength``'s offenses.
|
12
12
|
#
|
@@ -3,13 +3,12 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
# Checks for indentation that doesn't use the specified number
|
7
|
-
#
|
6
|
+
# Checks for indentation that doesn't use the specified number of spaces.
|
7
|
+
# The indentation width can be configured using the `Width` setting. The default width is 2.
|
8
8
|
#
|
9
|
-
# See also the IndentationConsistency cop which is the companion to this
|
10
|
-
# one.
|
9
|
+
# See also the `Layout/IndentationConsistency` cop which is the companion to this one.
|
11
10
|
#
|
12
|
-
# @example
|
11
|
+
# @example Width: 2 (default)
|
13
12
|
# # bad
|
14
13
|
# class A
|
15
14
|
# def test
|
@@ -136,7 +135,7 @@ module RuboCop
|
|
136
135
|
alias on_until on_while
|
137
136
|
|
138
137
|
def on_case(case_node)
|
139
|
-
case_node.
|
138
|
+
case_node.when_branches.each do |when_node|
|
140
139
|
check_indentation(when_node.loc.keyword, when_node.body)
|
141
140
|
end
|
142
141
|
|
@@ -49,18 +49,57 @@ module RuboCop
|
|
49
49
|
# #ruby=2.7.0
|
50
50
|
# #ruby-gemset=myproject
|
51
51
|
#
|
52
|
+
# @example AllowRBSInlineAnnotation: false (default)
|
53
|
+
#
|
54
|
+
# # bad
|
55
|
+
#
|
56
|
+
# include Enumerable #[Integer]
|
57
|
+
#
|
58
|
+
# attr_reader :name #: String
|
59
|
+
# attr_reader :age #: Integer?
|
60
|
+
#
|
61
|
+
# @example AllowRBSInlineAnnotation: true
|
62
|
+
#
|
63
|
+
# # good
|
64
|
+
#
|
65
|
+
# include Enumerable #[Integer]
|
66
|
+
#
|
67
|
+
# attr_reader :name #: String
|
68
|
+
# attr_reader :age #: Integer?
|
69
|
+
#
|
70
|
+
# @example AllowSteepAnnotation: false (default)
|
71
|
+
#
|
72
|
+
# # bad
|
73
|
+
# [1, 2, 3].each_with_object([]) do |n, list| #$ Array[Integer]
|
74
|
+
# list << n
|
75
|
+
# end
|
76
|
+
#
|
77
|
+
# name = 'John' #: String
|
78
|
+
#
|
79
|
+
# @example AllowSteepAnnotation: true
|
80
|
+
#
|
81
|
+
# # good
|
82
|
+
#
|
83
|
+
# [1, 2, 3].each_with_object([]) do |n, list| #$ Array[Integer]
|
84
|
+
# list << n
|
85
|
+
# end
|
86
|
+
#
|
87
|
+
# name = 'John' #: String
|
88
|
+
#
|
52
89
|
class LeadingCommentSpace < Base
|
53
90
|
include RangeHelp
|
54
91
|
extend AutoCorrector
|
55
92
|
|
56
93
|
MSG = 'Missing space after `#`.'
|
57
94
|
|
58
|
-
def on_new_investigation
|
95
|
+
def on_new_investigation # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
59
96
|
processed_source.comments.each do |comment|
|
60
97
|
next unless /\A(?!#\+\+|#--)(#+[^#\s=])/.match?(comment.text)
|
61
98
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
62
99
|
next if doxygen_comment_style?(comment)
|
63
100
|
next if gemfile_ruby_comment?(comment)
|
101
|
+
next if rbs_inline_annotation?(comment)
|
102
|
+
next if steep_annotation?(comment)
|
64
103
|
|
65
104
|
add_offense(comment) do |corrector|
|
66
105
|
expr = comment.source_range
|
@@ -115,6 +154,22 @@ module RuboCop
|
|
115
154
|
def gemfile_ruby_comment?(comment)
|
116
155
|
allow_gemfile_ruby_comment? && ruby_comment_in_gemfile?(comment)
|
117
156
|
end
|
157
|
+
|
158
|
+
def allow_rbs_inline_annotation?
|
159
|
+
cop_config['AllowRBSInlineAnnotation']
|
160
|
+
end
|
161
|
+
|
162
|
+
def rbs_inline_annotation?(comment)
|
163
|
+
allow_rbs_inline_annotation? && comment.text.start_with?(/#:|#\[.+\]/)
|
164
|
+
end
|
165
|
+
|
166
|
+
def allow_steep_annotation?
|
167
|
+
cop_config['AllowSteepAnnotation']
|
168
|
+
end
|
169
|
+
|
170
|
+
def steep_annotation?(comment)
|
171
|
+
allow_steep_annotation? && comment.text.start_with?(/#[$:]/)
|
172
|
+
end
|
118
173
|
end
|
119
174
|
end
|
120
175
|
end
|
@@ -107,7 +107,7 @@ module RuboCop
|
|
107
107
|
return false unless line.end_with?("\\\n")
|
108
108
|
|
109
109
|
# Ensure backslash isn't part of a token spanning to the next line.
|
110
|
-
node.children.none? { |c| c.first_line
|
110
|
+
node.children.none? { |c| (c.first_line...c.last_line).cover?(line_num) && c.multiline? }
|
111
111
|
end
|
112
112
|
|
113
113
|
def autocorrect(corrector, offense_range, insert_pos, spaces)
|
@@ -17,29 +17,29 @@ module RuboCop
|
|
17
17
|
# split across lines. These include arrays, hashes, and
|
18
18
|
# method calls with argument lists.
|
19
19
|
#
|
20
|
-
# If autocorrection is enabled, the following
|
20
|
+
# If autocorrection is enabled, the following cops
|
21
21
|
# are recommended to further format the broken lines.
|
22
22
|
# (Many of these are enabled by default.)
|
23
23
|
#
|
24
|
-
# * ArgumentAlignment
|
25
|
-
# * ArrayAlignment
|
26
|
-
# * BlockAlignment
|
27
|
-
# *
|
28
|
-
# *
|
29
|
-
# *
|
30
|
-
# *
|
31
|
-
# *
|
32
|
-
# *
|
33
|
-
# *
|
34
|
-
# *
|
35
|
-
# *
|
36
|
-
# *
|
37
|
-
# *
|
38
|
-
# *
|
39
|
-
# *
|
40
|
-
# *
|
41
|
-
# *
|
42
|
-
# *
|
24
|
+
# * `Layout/ArgumentAlignment`
|
25
|
+
# * `Layout/ArrayAlignment`
|
26
|
+
# * `Layout/BlockAlignment`
|
27
|
+
# * `Layout/BlockEndNewline`
|
28
|
+
# * `Layout/ClosingParenthesisIndentation`
|
29
|
+
# * `Layout/FirstArgumentIndentation`
|
30
|
+
# * `Layout/FirstArrayElementIndentation`
|
31
|
+
# * `Layout/FirstHashElementIndentation`
|
32
|
+
# * `Layout/FirstParameterIndentation`
|
33
|
+
# * `Layout/HashAlignment`
|
34
|
+
# * `Layout/IndentationWidth`
|
35
|
+
# * `Layout/MultilineArrayLineBreaks`
|
36
|
+
# * `Layout/MultilineBlockLayout`
|
37
|
+
# * `Layout/MultilineHashBraceLayout`
|
38
|
+
# * `Layout/MultilineHashKeyLineBreaks`
|
39
|
+
# * `Layout/MultilineMethodArgumentLineBreaks`
|
40
|
+
# * `Layout/MultilineMethodParameterLineBreaks`
|
41
|
+
# * `Layout//ParameterAlignment`
|
42
|
+
# * `Style/BlockDelimiters`
|
43
43
|
#
|
44
44
|
# Together, these cops will pretty print hashes, arrays,
|
45
45
|
# method calls, etc. For example, let's say the max columns
|
@@ -84,8 +84,20 @@ module RuboCop
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def offense?(node)
|
87
|
-
node.multiline?
|
88
|
-
|
87
|
+
return false if !node.multiline? || too_long?(node) || !suitable_as_single_line?(node)
|
88
|
+
return require_backslash?(node) if node.and_type? || node.or_type?
|
89
|
+
|
90
|
+
!index_access_call_chained?(node) && !configured_to_not_be_inspected?(node)
|
91
|
+
end
|
92
|
+
|
93
|
+
def require_backslash?(node)
|
94
|
+
processed_source.lines[node.loc.operator.line - 1].end_with?('\\')
|
95
|
+
end
|
96
|
+
|
97
|
+
def index_access_call_chained?(node)
|
98
|
+
return false unless node.send_type? && node.method?(:[])
|
99
|
+
|
100
|
+
node.children.first.send_type? && node.children.first.method?(:[])
|
89
101
|
end
|
90
102
|
|
91
103
|
def configured_to_not_be_inspected?(node)
|
@@ -180,6 +180,9 @@ module RuboCop
|
|
180
180
|
with_space = range_with_surrounding_space(operator)
|
181
181
|
return if with_space.source.start_with?("\n")
|
182
182
|
|
183
|
+
comment = processed_source.comment_at_line(operator.line)
|
184
|
+
return if comment && with_space.last_column == comment.loc.column
|
185
|
+
|
183
186
|
offense(type, operator, with_space, right_operand) do |msg|
|
184
187
|
add_offense(operator, message: msg) do |corrector|
|
185
188
|
autocorrect(corrector, with_space, right_operand)
|
@@ -81,19 +81,28 @@ module RuboCop
|
|
81
81
|
private
|
82
82
|
|
83
83
|
def check_empty(left_brace, space_plus_brace, used_style)
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
if style_for_empty_braces == used_style
|
85
|
+
handle_different_styles_for_empty_braces(used_style)
|
86
|
+
return
|
87
|
+
elsif !config_to_allow_offenses.key?('Enabled')
|
88
|
+
config_to_allow_offenses['EnforcedStyleForEmptyBraces'] = used_style.to_s
|
89
|
+
end
|
87
90
|
|
88
91
|
if style_for_empty_braces == :space
|
89
|
-
|
90
|
-
|
91
|
-
end
|
92
|
+
range = left_brace
|
93
|
+
msg = MISSING_MSG
|
92
94
|
else
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
95
|
+
range = range_between(space_plus_brace.begin_pos, left_brace.begin_pos)
|
96
|
+
msg = DETECTED_MSG
|
97
|
+
end
|
98
|
+
add_offense(range, message: msg) { |corrector| autocorrect(corrector, range) }
|
99
|
+
end
|
100
|
+
|
101
|
+
def handle_different_styles_for_empty_braces(used_style)
|
102
|
+
if config_to_allow_offenses['EnforcedStyleForEmptyBraces'] &&
|
103
|
+
config_to_allow_offenses['EnforcedStyleForEmptyBraces'].to_sym != used_style
|
104
|
+
config_to_allow_offenses.clear
|
105
|
+
config_to_allow_offenses['Enabled'] = false
|
97
106
|
end
|
98
107
|
end
|
99
108
|
|
@@ -33,12 +33,12 @@ module RuboCop
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def offense_range(node, begin_pos)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
return if dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
36
|
+
receiver_end_pos = node.receiver.source_range.end_pos
|
37
|
+
selector_begin_pos = node.loc.selector.begin_pos
|
38
|
+
return if receiver_end_pos >= selector_begin_pos
|
39
|
+
return if dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
|
41
40
|
|
41
|
+
if reference_variable_with_brackets?(node)
|
42
42
|
range_between(receiver_end_pos, selector_begin_pos)
|
43
43
|
elsif node.method?(:[]=)
|
44
44
|
offense_range_for_assignment(node, begin_pos)
|
@@ -116,7 +116,7 @@ module RuboCop
|
|
116
116
|
|
117
117
|
def incorrect_style_detected(token1, token2,
|
118
118
|
expect_space, is_empty_braces)
|
119
|
-
brace = (token1.
|
119
|
+
brace = (token1.left_brace? ? token1 : token2).pos
|
120
120
|
range = expect_space ? brace : space_range(brace)
|
121
121
|
detected_style = expect_space ? 'no_space' : 'space'
|
122
122
|
|
@@ -25,8 +25,7 @@ module RuboCop
|
|
25
25
|
include RangeHelp
|
26
26
|
extend AutoCorrector
|
27
27
|
|
28
|
-
|
29
|
-
SPACE_MSG = 'Missing space inside string interpolation detected.'
|
28
|
+
MSG = '%<command>s space inside string interpolation.'
|
30
29
|
|
31
30
|
def on_interpolation(begin_node)
|
32
31
|
return if begin_node.multiline?
|
@@ -36,9 +35,9 @@ module RuboCop
|
|
36
35
|
return if empty_brackets?(left, right, tokens: tokens)
|
37
36
|
|
38
37
|
if style == :no_space
|
39
|
-
no_space_offenses(begin_node, left, right,
|
38
|
+
no_space_offenses(begin_node, left, right, MSG)
|
40
39
|
else
|
41
|
-
space_offenses(begin_node, left, right,
|
40
|
+
space_offenses(begin_node, left, right, MSG)
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
@@ -12,13 +12,23 @@ module RuboCop
|
|
12
12
|
if corr.is_a?(CorrectionsProxy)
|
13
13
|
merge!(corr.send(:corrector))
|
14
14
|
else
|
15
|
-
|
15
|
+
unless corr.empty?
|
16
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
17
|
+
`Corrector.new` with corrections is deprecated.
|
18
|
+
See https://docs.rubocop.org/rubocop/v1_upgrade_notes.html
|
19
|
+
WARNING
|
20
|
+
end
|
21
|
+
|
16
22
|
corr.each { |c| corrections << c }
|
17
23
|
end
|
18
24
|
end
|
19
25
|
|
20
26
|
def corrections
|
21
|
-
|
27
|
+
warn Rainbow(<<~WARNING).yellow, uplevel: 1
|
28
|
+
`Corrector#corrections` is deprecated. Open an issue if you have a valid usecase.
|
29
|
+
See https://docs.rubocop.org/rubocop/v1_upgrade_notes.html
|
30
|
+
WARNING
|
31
|
+
|
22
32
|
CorrectionsProxy.new(self)
|
23
33
|
end
|
24
34
|
end
|
@@ -57,6 +57,7 @@ module RuboCop
|
|
57
57
|
# # good
|
58
58
|
# (a.foo)..(b.bar)
|
59
59
|
class AmbiguousRange < Base
|
60
|
+
include RationalLiteral
|
60
61
|
extend AutoCorrector
|
61
62
|
|
62
63
|
MSG = 'Wrap complex range boundaries with parentheses to avoid ambiguity.'
|
@@ -79,12 +80,14 @@ module RuboCop
|
|
79
80
|
yield range.end if range.end
|
80
81
|
end
|
81
82
|
|
83
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
82
84
|
def acceptable?(node)
|
83
85
|
node.begin_type? ||
|
84
|
-
node.literal? ||
|
86
|
+
node.literal? || rational_literal?(node) ||
|
85
87
|
node.variable? || node.const_type? || node.self_type? ||
|
86
88
|
(node.call_type? && acceptable_call?(node))
|
87
89
|
end
|
90
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
88
91
|
|
89
92
|
def acceptable_call?(node)
|
90
93
|
return true if node.unary_operation?
|
@@ -50,7 +50,7 @@ module RuboCop
|
|
50
50
|
MSG_WITHOUT_SAFE_ASSIGNMENT_ALLOWED =
|
51
51
|
'Use `==` if you meant to do a comparison or move the assignment ' \
|
52
52
|
'up out of the condition.'
|
53
|
-
ASGN_TYPES = [:begin, *AST::Node::EQUALS_ASSIGNMENTS, :send].freeze
|
53
|
+
ASGN_TYPES = [:begin, *AST::Node::EQUALS_ASSIGNMENTS, :send, :csend].freeze
|
54
54
|
|
55
55
|
def on_if(node)
|
56
56
|
return if node.condition.block_type?
|
@@ -88,7 +88,7 @@ module RuboCop
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def skip_children?(asgn_node)
|
91
|
-
(asgn_node.
|
91
|
+
(asgn_node.call_type? && !asgn_node.assignment_method?) ||
|
92
92
|
empty_condition?(asgn_node) ||
|
93
93
|
(safe_assignment_allowed? && safe_assignment?(asgn_node))
|
94
94
|
end
|
@@ -17,8 +17,7 @@ module RuboCop
|
|
17
17
|
class BigDecimalNew < Base
|
18
18
|
extend AutoCorrector
|
19
19
|
|
20
|
-
MSG = '
|
21
|
-
'Use `%<double_colon>sBigDecimal()` instead.'
|
20
|
+
MSG = '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.'
|
22
21
|
RESTRICT_ON_SEND = %i[new].freeze
|
23
22
|
|
24
23
|
# @!method big_decimal_new(node)
|
@@ -28,13 +27,11 @@ module RuboCop
|
|
28
27
|
PATTERN
|
29
28
|
|
30
29
|
def on_send(node)
|
31
|
-
big_decimal_new(node) do |
|
32
|
-
|
33
|
-
message = format(MSG, double_colon: double_colon)
|
34
|
-
|
35
|
-
add_offense(node.loc.selector, message: message) do |corrector|
|
30
|
+
big_decimal_new(node) do |cbase|
|
31
|
+
add_offense(node.loc.selector) do |corrector|
|
36
32
|
corrector.remove(node.loc.selector)
|
37
33
|
corrector.remove(node.loc.dot)
|
34
|
+
corrector.remove(cbase) if cbase
|
38
35
|
end
|
39
36
|
end
|
40
37
|
end
|
@@ -19,8 +19,6 @@ module RuboCop
|
|
19
19
|
# # good
|
20
20
|
# true
|
21
21
|
#
|
22
|
-
# @example
|
23
|
-
#
|
24
22
|
# # bad
|
25
23
|
# :false
|
26
24
|
#
|
@@ -38,7 +36,7 @@ module RuboCop
|
|
38
36
|
return unless boolean_symbol?(node)
|
39
37
|
|
40
38
|
parent = node.parent
|
41
|
-
return if parent&.array_type? && parent
|
39
|
+
return if parent&.array_type? && parent.percent_literal?(:symbol)
|
42
40
|
|
43
41
|
add_offense(node, message: format(MSG, boolean: node.value)) do |corrector|
|
44
42
|
autocorrect(corrector, node)
|
@@ -11,39 +11,26 @@ module RuboCop
|
|
11
11
|
# @example
|
12
12
|
#
|
13
13
|
# # bad
|
14
|
-
#
|
15
14
|
# def bake(pie: pie)
|
16
15
|
# pie.heat_up
|
17
16
|
# end
|
18
17
|
#
|
19
|
-
# @example
|
20
|
-
#
|
21
18
|
# # good
|
22
|
-
#
|
23
19
|
# def bake(pie:)
|
24
20
|
# pie.refrigerate
|
25
21
|
# end
|
26
22
|
#
|
27
|
-
# @example
|
28
|
-
#
|
29
23
|
# # good
|
30
|
-
#
|
31
24
|
# def bake(pie: self.pie)
|
32
25
|
# pie.feed_to(user)
|
33
26
|
# end
|
34
27
|
#
|
35
|
-
# @example
|
36
|
-
#
|
37
28
|
# # bad
|
38
|
-
#
|
39
29
|
# def cook(dry_ingredients = dry_ingredients)
|
40
30
|
# dry_ingredients.reduce(&:+)
|
41
31
|
# end
|
42
32
|
#
|
43
|
-
# @example
|
44
|
-
#
|
45
33
|
# # good
|
46
|
-
#
|
47
34
|
# def cook(dry_ingredients = self.dry_ingredients)
|
48
35
|
# dry_ingredients.combine
|
49
36
|
# end
|