rubocop 1.12.1 → 1.16.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/README.md +5 -2
- data/config/default.yml +78 -8
- data/exe/rubocop +1 -3
- data/lib/rubocop.rb +10 -1
- data/lib/rubocop/cached_data.rb +1 -3
- data/lib/rubocop/cli.rb +4 -6
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +9 -19
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -3
- data/lib/rubocop/cli/command/show_cops.rb +1 -4
- data/lib/rubocop/comment_config.rb +2 -7
- data/lib/rubocop/config.rb +11 -26
- data/lib/rubocop/config_loader.rb +5 -11
- data/lib/rubocop/config_loader_resolver.rb +22 -14
- data/lib/rubocop/config_obsoletion/cop_rule.rb +1 -2
- data/lib/rubocop/config_store.rb +1 -2
- data/lib/rubocop/config_validator.rb +5 -10
- data/lib/rubocop/cop/autocorrect_logic.rb +3 -8
- data/lib/rubocop/cop/badge.rb +1 -2
- data/lib/rubocop/cop/base.rb +8 -6
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +1 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +43 -11
- data/lib/rubocop/cop/bundler/gem_version.rb +99 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -4
- data/lib/rubocop/cop/commissioner.rb +2 -8
- data/lib/rubocop/cop/cop.rb +4 -18
- data/lib/rubocop/cop/corrector.rb +1 -4
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -8
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -4
- data/lib/rubocop/cop/generator.rb +1 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -2
- data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/example_description.rb +7 -5
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +2 -5
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +1 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -3
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -2
- data/lib/rubocop/cop/layout/argument_alignment.rb +30 -14
- data/lib/rubocop/cop/layout/assignment_indentation.rb +2 -4
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +1 -4
- data/lib/rubocop/cop/layout/block_alignment.rb +7 -19
- data/lib/rubocop/cop/layout/case_indentation.rb +57 -11
- data/lib/rubocop/cop/layout/class_structure.rb +4 -10
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +4 -15
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -5
- data/lib/rubocop/cop/layout/def_end_alignment.rb +2 -6
- data/lib/rubocop/cop/layout/dot_position.rb +1 -3
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -3
- data/lib/rubocop/cop/layout/empty_comment.rb +5 -12
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +2 -5
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -3
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +8 -18
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +2 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +3 -7
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -2
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +14 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +1 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +36 -15
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -9
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -3
- data/lib/rubocop/cop/layout/indentation_width.rb +6 -4
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -4
- data/lib/rubocop/cop/layout/line_length.rb +4 -15
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +7 -15
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +4 -10
- data/lib/rubocop/cop/layout/redundant_line_break.rb +137 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +53 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +2 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +6 -14
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +1 -2
- data/lib/rubocop/cop/layout/space_around_keyword.rb +19 -6
- data/lib/rubocop/cop/layout/space_around_operators.rb +4 -9
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_before_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +5 -11
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +2 -4
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +2 -7
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +2 -8
- data/lib/rubocop/cop/legacy/corrector.rb +1 -3
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +1 -6
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +14 -7
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -2
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -2
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +83 -41
- data/lib/rubocop/cop/lint/deprecated_constants.rb +3 -3
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -5
- data/lib/rubocop/cop/lint/duplicate_branch.rb +1 -2
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -7
- data/lib/rubocop/cop/lint/else_layout.rb +1 -3
- data/lib/rubocop/cop/lint/empty_block.rb +18 -2
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -3
- data/lib/rubocop/cop/lint/empty_file.rb +1 -3
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +62 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -3
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -3
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +3 -7
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -6
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +1 -2
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -7
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -2
- data/lib/rubocop/cop/lint/interpolation_check.rb +3 -11
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +3 -6
- data/lib/rubocop/cop/lint/loop.rb +1 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +3 -7
- data/lib/rubocop/cop/lint/missing_super.rb +1 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -2
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +1 -3
- data/lib/rubocop/cop/lint/number_conversion.rb +2 -3
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +1 -3
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -3
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -3
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rand_one.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +18 -27
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +1 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +3 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -4
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -4
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +1 -3
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -2
- data/lib/rubocop/cop/lint/rescue_type.rb +2 -7
- data/lib/rubocop/cop/lint/return_in_void_context.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -2
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +4 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -2
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +2 -7
- data/lib/rubocop/cop/lint/shadowed_argument.rb +4 -11
- data/lib/rubocop/cop/lint/shadowed_exception.rb +7 -8
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -2
- data/lib/rubocop/cop/lint/symbol_conversion.rb +4 -16
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/to_json.rb +1 -2
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -3
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +1 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +2 -5
- data/lib/rubocop/cop/lint/unreachable_loop.rb +14 -7
- data/lib/rubocop/cop/lint/unused_block_argument.rb +9 -7
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -9
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -3
- data/lib/rubocop/cop/lint/void.rb +5 -12
- data/lib/rubocop/cop/message_annotator.rb +1 -3
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -6
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -5
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -2
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -7
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +2 -7
- data/lib/rubocop/cop/migration/department_name.rb +3 -7
- data/lib/rubocop/cop/mixin/alignment.rb +2 -4
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +19 -3
- data/lib/rubocop/cop/mixin/code_length.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -8
- data/lib/rubocop/cop/mixin/def_node.rb +2 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -5
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +3 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -3
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -6
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +7 -7
- data/lib/rubocop/cop/mixin/gem_declaration.rb +13 -0
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +17 -9
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +7 -22
- data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +2 -4
- data/lib/rubocop/cop/mixin/match_range.rb +2 -5
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -3
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -3
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -17
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -2
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +1 -4
- data/lib/rubocop/cop/mixin/percent_array.rb +1 -3
- data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +5 -11
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +3 -6
- data/lib/rubocop/cop/mixin/range_help.rb +10 -13
- data/lib/rubocop/cop/mixin/rescue_node.rb +2 -6
- data/lib/rubocop/cop/mixin/safe_assignment.rb +1 -2
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +2 -4
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -3
- data/lib/rubocop/cop/mixin/string_literals_help.rb +3 -5
- data/lib/rubocop/cop/mixin/symbol_help.rb +13 -0
- data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -2
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +3 -7
- data/lib/rubocop/cop/mixin/unused_argument.rb +1 -3
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +2 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -2
- data/lib/rubocop/cop/naming/file_name.rb +7 -16
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -3
- data/lib/rubocop/cop/naming/method_name.rb +1 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -2
- data/lib/rubocop/cop/offense.rb +3 -8
- data/lib/rubocop/cop/registry.rb +3 -11
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -3
- data/lib/rubocop/cop/style/accessor_grouping.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +5 -12
- data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -3
- data/lib/rubocop/cop/style/ascii_comments.rb +1 -2
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -5
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +1 -3
- data/lib/rubocop/cop/style/case_like_if.rb +1 -2
- data/lib/rubocop/cop/style/character_literal.rb +2 -4
- data/lib/rubocop/cop/style/class_and_module_children.rb +19 -10
- data/lib/rubocop/cop/style/class_methods.rb +1 -3
- data/lib/rubocop/cop/style/collection_compact.rb +1 -3
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -3
- data/lib/rubocop/cop/style/combinable_loops.rb +3 -2
- data/lib/rubocop/cop/style/command_literal.rb +3 -8
- data/lib/rubocop/cop/style/comment_annotation.rb +3 -6
- data/lib/rubocop/cop/style/commented_keyword.rb +2 -8
- data/lib/rubocop/cop/style/conditional_assignment.rb +10 -24
- data/lib/rubocop/cop/style/copyright.rb +3 -6
- data/lib/rubocop/cop/style/date_time.rb +2 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -7
- data/lib/rubocop/cop/style/empty_else.rb +3 -9
- data/lib/rubocop/cop/style/empty_literal.rb +12 -9
- data/lib/rubocop/cop/style/empty_method.rb +3 -7
- data/lib/rubocop/cop/style/end_block.rb +1 -2
- data/lib/rubocop/cop/style/endless_method.rb +1 -3
- data/lib/rubocop/cop/style/eval_with_location.rb +2 -4
- data/lib/rubocop/cop/style/expand_path_arguments.rb +1 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -4
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -8
- data/lib/rubocop/cop/style/guard_clause.rb +3 -7
- data/lib/rubocop/cop/style/hash_conversion.rb +28 -3
- data/lib/rubocop/cop/style/hash_each_methods.rb +19 -3
- data/lib/rubocop/cop/style/hash_like_case.rb +1 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -9
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +27 -8
- data/lib/rubocop/cop/style/if_unless_modifier.rb +40 -13
- data/lib/rubocop/cop/style/in_pattern_then.rb +56 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -5
- data/lib/rubocop/cop/style/inverse_methods.rb +3 -7
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/lambda.rb +2 -4
- data/lib/rubocop/cop/style/lambda_call.rb +1 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +5 -12
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +7 -12
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/min_max.rb +1 -2
- data/lib/rubocop/cop/style/missing_else.rb +2 -4
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +1 -2
- data/lib/rubocop/cop/style/mixin_grouping.rb +4 -10
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -2
- data/lib/rubocop/cop/style/module_function.rb +3 -6
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -2
- data/lib/rubocop/cop/style/multiline_in_pattern_then.rb +62 -0
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -3
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -2
- data/lib/rubocop/cop/style/multiline_when_then.rb +2 -11
- data/lib/rubocop/cop/style/multiple_comparison.rb +2 -4
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -10
- data/lib/rubocop/cop/style/negated_if.rb +1 -2
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +17 -9
- data/lib/rubocop/cop/style/negated_unless.rb +1 -2
- data/lib/rubocop/cop/style/nested_modifier.rb +3 -7
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -3
- data/lib/rubocop/cop/style/next.rb +4 -9
- data/lib/rubocop/cop/style/nil_lambda.rb +29 -12
- data/lib/rubocop/cop/style/non_nil_check.rb +2 -5
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -11
- data/lib/rubocop/cop/style/numeric_predicate.rb +2 -7
- data/lib/rubocop/cop/style/one_line_conditional.rb +1 -2
- data/lib/rubocop/cop/style/option_hash.rb +1 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +2 -5
- data/lib/rubocop/cop/style/or_assignment.rb +2 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +6 -9
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -3
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -2
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -9
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +1 -4
- data/lib/rubocop/cop/style/proc.rb +1 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +110 -0
- data/lib/rubocop/cop/style/raise_args.rb +4 -8
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -8
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -11
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +4 -4
- data/lib/rubocop/cop/style/redundant_capital_w.rb +1 -2
- data/lib/rubocop/cop/style/redundant_condition.rb +2 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +3 -6
- data/lib/rubocop/cop/style/redundant_exception.rb +3 -6
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +1 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -2
- data/lib/rubocop/cop/style/redundant_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -20
- data/lib/rubocop/cop/style/redundant_percent_q.rb +1 -2
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -4
- data/lib/rubocop/cop/style/redundant_return.rb +3 -5
- data/lib/rubocop/cop/style/redundant_self.rb +25 -7
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/redundant_sort.rb +2 -5
- data/lib/rubocop/cop/style/regexp_literal.rb +4 -8
- data/lib/rubocop/cop/style/rescue_modifier.rb +4 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +3 -7
- data/lib/rubocop/cop/style/return_nil.rb +1 -2
- data/lib/rubocop/cop/style/safe_navigation.rb +10 -21
- data/lib/rubocop/cop/style/send.rb +1 -2
- data/lib/rubocop/cop/style/signal_exception.rb +3 -7
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -2
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -5
- data/lib/rubocop/cop/style/single_line_methods.rb +20 -4
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +15 -7
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -18
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +2 -6
- data/lib/rubocop/cop/style/string_chars.rb +2 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +8 -10
- data/lib/rubocop/cop/style/string_literals.rb +3 -5
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +1 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +9 -1
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +4 -9
- data/lib/rubocop/cop/style/ternary_parentheses.rb +3 -6
- data/lib/rubocop/cop/style/top_level_method_definition.rb +83 -0
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +1 -2
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +2 -6
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -10
- data/lib/rubocop/cop/style/trivial_accessors.rb +67 -4
- data/lib/rubocop/cop/style/unless_else.rb +1 -2
- data/lib/rubocop/cop/style/unless_logical_operators.rb +2 -2
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +4 -2
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -2
- data/lib/rubocop/cop/style/word_array.rb +1 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +3 -11
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -2
- data/lib/rubocop/cop/team.rb +2 -5
- data/lib/rubocop/cop/util.rb +4 -10
- data/lib/rubocop/cop/utils/format_string.rb +1 -3
- data/lib/rubocop/cop/variable_force.rb +6 -15
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -2
- data/lib/rubocop/cop/variable_force/branch.rb +16 -2
- data/lib/rubocop/cop/variable_force/reference.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +4 -8
- data/lib/rubocop/cop/variable_force/variable.rb +2 -4
- data/lib/rubocop/cops_documentation_generator.rb +7 -21
- data/lib/rubocop/directive_comment.rb +5 -1
- data/lib/rubocop/file_finder.rb +1 -3
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -8
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +1 -5
- data/lib/rubocop/formatter/html_formatter.rb +4 -10
- data/lib/rubocop/formatter/json_formatter.rb +1 -5
- data/lib/rubocop/formatter/junit_formatter.rb +23 -14
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/options.rb +30 -50
- data/lib/rubocop/path_util.rb +1 -3
- data/lib/rubocop/rake_task.rb +3 -0
- data/lib/rubocop/remote_config.rb +4 -7
- data/lib/rubocop/result_cache.rb +5 -12
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -9
- data/lib/rubocop/rspec/shared_contexts.rb +8 -15
- data/lib/rubocop/runner.rb +7 -14
- data/lib/rubocop/target_finder.rb +18 -16
- data/lib/rubocop/target_ruby.rb +4 -8
- data/lib/rubocop/version.rb +1 -1
- metadata +16 -7
- data/lib/rubocop/core_ext/hash.rb +0 -20
@@ -143,8 +143,7 @@ module RuboCop
|
|
143
143
|
|
144
144
|
def expected_column(left_paren, elements)
|
145
145
|
if line_break_after_left_paren?(left_paren, elements)
|
146
|
-
source_indent = processed_source
|
147
|
-
.line_indentation(first_argument_line(elements))
|
146
|
+
source_indent = processed_source.line_indentation(first_argument_line(elements))
|
148
147
|
new_indent = source_indent - indentation_width
|
149
148
|
|
150
149
|
new_indent.negative? ? 0 : new_indent
|
@@ -156,17 +155,11 @@ module RuboCop
|
|
156
155
|
end
|
157
156
|
|
158
157
|
def all_elements_aligned?(elements)
|
159
|
-
elements
|
160
|
-
.map { |e| e.loc.column }
|
161
|
-
.uniq
|
162
|
-
.count == 1
|
158
|
+
elements.map { |e| e.loc.column }.uniq.count == 1
|
163
159
|
end
|
164
160
|
|
165
161
|
def first_argument_line(elements)
|
166
|
-
elements
|
167
|
-
.first
|
168
|
-
.loc
|
169
|
-
.first_line
|
162
|
+
elements.first.loc.first_line
|
170
163
|
end
|
171
164
|
|
172
165
|
def correct_column_candidates(node, left_paren)
|
@@ -181,11 +174,7 @@ module RuboCop
|
|
181
174
|
if correct_column == left_paren.column
|
182
175
|
MSG_ALIGN
|
183
176
|
else
|
184
|
-
format(
|
185
|
-
MSG_INDENT,
|
186
|
-
expected: correct_column,
|
187
|
-
actual: right_paren.column
|
188
|
-
)
|
177
|
+
format(MSG_INDENT, expected: correct_column, actual: right_paren.column)
|
189
178
|
end
|
190
179
|
end
|
191
180
|
|
@@ -100,11 +100,7 @@ module RuboCop
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def message(column, correct_comment_indentation)
|
103
|
-
format(
|
104
|
-
MSG,
|
105
|
-
column: column,
|
106
|
-
correct_comment_indentation: correct_comment_indentation
|
107
|
-
)
|
103
|
+
format(MSG, column: column, correct_comment_indentation: correct_comment_indentation)
|
108
104
|
end
|
109
105
|
|
110
106
|
def own_line_comment?(comment)
|
@@ -51,12 +51,8 @@ module RuboCop
|
|
51
51
|
method_def = node.each_descendant(:def, :defs).first
|
52
52
|
expr = node.source_range
|
53
53
|
|
54
|
-
line_start = range_between(expr.begin_pos,
|
55
|
-
|
56
|
-
align_with = {
|
57
|
-
def: method_def.loc.keyword,
|
58
|
-
start_of_line: line_start
|
59
|
-
}
|
54
|
+
line_start = range_between(expr.begin_pos, method_def.loc.keyword.end_pos)
|
55
|
+
align_with = { def: method_def.loc.keyword, start_of_line: line_start }
|
60
56
|
|
61
57
|
check_end_kw_alignment(method_def, align_with)
|
62
58
|
ignore_node(method_def) # Don't check the same `end` again.
|
@@ -35,9 +35,7 @@ module RuboCop
|
|
35
35
|
dot = node.loc.dot
|
36
36
|
message = message(dot)
|
37
37
|
|
38
|
-
add_offense(dot, message: message)
|
39
|
-
autocorrect(corrector, dot, node)
|
40
|
-
end
|
38
|
+
add_offense(dot, message: message) { |corrector| autocorrect(corrector, dot, node) }
|
41
39
|
end
|
42
40
|
alias on_csend on_send
|
43
41
|
|
@@ -75,9 +75,7 @@ module RuboCop
|
|
75
75
|
processed_source.comments.each do |comment|
|
76
76
|
next unless empty_comment_only?(comment_text(comment))
|
77
77
|
|
78
|
-
add_offense(comment)
|
79
|
-
autocorrect(corrector, comment)
|
80
|
-
end
|
78
|
+
add_offense(comment) { |corrector| autocorrect(corrector, comment) }
|
81
79
|
end
|
82
80
|
end
|
83
81
|
end
|
@@ -99,19 +97,16 @@ module RuboCop
|
|
99
97
|
def autocorrect(corrector, node)
|
100
98
|
previous_token = previous_token(node)
|
101
99
|
range = if previous_token && node.loc.line == previous_token.line
|
102
|
-
range_with_surrounding_space(range: node.loc.expression,
|
103
|
-
newlines: false)
|
100
|
+
range_with_surrounding_space(range: node.loc.expression, newlines: false)
|
104
101
|
else
|
105
|
-
range_by_whole_lines(node.loc.expression,
|
106
|
-
include_final_newline: true)
|
102
|
+
range_by_whole_lines(node.loc.expression, include_final_newline: true)
|
107
103
|
end
|
108
104
|
|
109
105
|
corrector.remove(range)
|
110
106
|
end
|
111
107
|
|
112
108
|
def concat_consecutive_comments(comments)
|
113
|
-
consecutive_comments =
|
114
|
-
comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
|
109
|
+
consecutive_comments = comments.chunk_while { |i, j| i.loc.line.succ == j.loc.line }
|
115
110
|
|
116
111
|
consecutive_comments.map do |chunk|
|
117
112
|
joined_text = chunk.map { |c| comment_text(c) }.join
|
@@ -142,9 +137,7 @@ module RuboCop
|
|
142
137
|
end
|
143
138
|
|
144
139
|
def current_token(comment)
|
145
|
-
processed_source.find_token
|
146
|
-
token.pos == comment.loc.expression
|
147
|
-
end
|
140
|
+
processed_source.find_token { |token| token.pos == comment.loc.expression }
|
148
141
|
end
|
149
142
|
|
150
143
|
def previous_token(node)
|
@@ -55,9 +55,7 @@ module RuboCop
|
|
55
55
|
else
|
56
56
|
return if next_line_empty_or_enable_directive_comment?(node.last_line)
|
57
57
|
|
58
|
-
add_offense(offense_location(node))
|
59
|
-
autocorrect(corrector, node)
|
60
|
-
end
|
58
|
+
add_offense(offense_location(node)) { |corrector| autocorrect(corrector, node) }
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
@@ -154,8 +152,7 @@ module RuboCop
|
|
154
152
|
|
155
153
|
def heredoc_line(node, heredoc_node)
|
156
154
|
heredoc_body = heredoc_node.loc.heredoc_body
|
157
|
-
num_of_heredoc_lines =
|
158
|
-
heredoc_body.last_line - heredoc_body.first_line
|
155
|
+
num_of_heredoc_lines = heredoc_body.last_line - heredoc_body.first_line
|
159
156
|
|
160
157
|
node.last_line + num_of_heredoc_lines + END_OF_HEREDOC_LINE
|
161
158
|
end
|
@@ -111,8 +111,7 @@ module RuboCop
|
|
111
111
|
|
112
112
|
return if line_count_allowed?(count)
|
113
113
|
return if multiple_blank_lines_groups?(*nodes)
|
114
|
-
return if nodes.all?(&:single_line?) &&
|
115
|
-
cop_config['AllowAdjacentOneLineDefs']
|
114
|
+
return if nodes.all?(&:single_line?) && cop_config['AllowAdjacentOneLineDefs']
|
116
115
|
|
117
116
|
correction_node = nodes.last
|
118
117
|
location = correction_node.loc.keyword.join(correction_node.loc.name)
|
@@ -160,10 +159,7 @@ module RuboCop
|
|
160
159
|
def message(node, count: nil)
|
161
160
|
type = node_type(node)
|
162
161
|
|
163
|
-
format(MSG,
|
164
|
-
type: type,
|
165
|
-
expected: expected_lines,
|
166
|
-
actual: count)
|
162
|
+
format(MSG, type: type, expected: expected_lines, actual: count)
|
167
163
|
end
|
168
164
|
|
169
165
|
def expected_lines
|
@@ -29,9 +29,7 @@ module RuboCop
|
|
29
29
|
return if processed_source.tokens.empty?
|
30
30
|
|
31
31
|
lines = Set.new
|
32
|
-
processed_source.each_token
|
33
|
-
lines << token.line
|
34
|
-
end
|
32
|
+
processed_source.each_token { |token| lines << token.line }
|
35
33
|
|
36
34
|
each_extra_empty_line(lines.sort) do |range|
|
37
35
|
add_offense(range) do |corrector|
|
@@ -46,8 +46,7 @@ module RuboCop
|
|
46
46
|
extend AutoCorrector
|
47
47
|
|
48
48
|
MSG_AFTER = 'Keep a blank line after `%<modifier>s`.'
|
49
|
-
MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after '
|
50
|
-
'`%<modifier>s`.'
|
49
|
+
MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after `%<modifier>s`.'
|
51
50
|
|
52
51
|
MSG_BEFORE_FOR_ONLY_BEFORE = 'Keep a blank line before `%<modifier>s`.'
|
53
52
|
MSG_AFTER_FOR_ONLY_BEFORE = 'Remove a blank line after `%<modifier>s`.'
|
@@ -73,10 +72,8 @@ module RuboCop
|
|
73
72
|
end
|
74
73
|
|
75
74
|
def on_sclass(node)
|
76
|
-
@class_or_module_def_first_line =
|
77
|
-
|
78
|
-
@class_or_module_def_last_line =
|
79
|
-
node.source_range.last_line
|
75
|
+
@class_or_module_def_first_line = node.identifier.source_range.first_line
|
76
|
+
@class_or_module_def_last_line = node.source_range.last_line
|
80
77
|
end
|
81
78
|
|
82
79
|
def on_block(node)
|
@@ -133,19 +130,14 @@ module RuboCop
|
|
133
130
|
end
|
134
131
|
|
135
132
|
def previous_line_ignoring_comments(processed_source, send_line)
|
136
|
-
processed_source[0..send_line - 2].reverse.find
|
137
|
-
!comment_line?(line)
|
138
|
-
end
|
133
|
+
processed_source[0..send_line - 2].reverse.find { |line| !comment_line?(line) }
|
139
134
|
end
|
140
135
|
|
141
136
|
def previous_line_empty?(send_line)
|
142
|
-
previous_line = previous_line_ignoring_comments(processed_source,
|
143
|
-
send_line)
|
137
|
+
previous_line = previous_line_ignoring_comments(processed_source, send_line)
|
144
138
|
return true unless previous_line
|
145
139
|
|
146
|
-
block_start?(send_line) ||
|
147
|
-
class_def?(send_line) ||
|
148
|
-
previous_line.blank?
|
140
|
+
block_start?(send_line) || class_def?(send_line) || previous_line.blank?
|
149
141
|
end
|
150
142
|
|
151
143
|
def next_line_empty?(last_send_line)
|
@@ -155,8 +147,7 @@ module RuboCop
|
|
155
147
|
end
|
156
148
|
|
157
149
|
def empty_lines_around?(node)
|
158
|
-
previous_line_empty?(node.first_line) &&
|
159
|
-
next_line_empty?(node.last_line)
|
150
|
+
previous_line_empty?(node.first_line) && next_line_empty?(node.last_line)
|
160
151
|
end
|
161
152
|
|
162
153
|
def class_def?(line)
|
@@ -193,8 +184,7 @@ module RuboCop
|
|
193
184
|
def message_for_around_style(node)
|
194
185
|
send_line = node.first_line
|
195
186
|
|
196
|
-
if block_start?(send_line) ||
|
197
|
-
class_def?(send_line)
|
187
|
+
if block_start?(send_line) || class_def?(send_line)
|
198
188
|
format(MSG_AFTER, modifier: node.loc.selector.source)
|
199
189
|
else
|
200
190
|
format(MSG_BEFORE_AND_AFTER, modifier: node.loc.selector.source)
|
@@ -84,10 +84,7 @@ module RuboCop
|
|
84
84
|
# below the keyword
|
85
85
|
check_line(style, line, message('after', keyword), &:empty?)
|
86
86
|
# above the keyword
|
87
|
-
check_line(style,
|
88
|
-
line - 2,
|
89
|
-
message('before', keyword),
|
90
|
-
&:empty?)
|
87
|
+
check_line(style, line - 2, message('before', keyword), &:empty?)
|
91
88
|
end
|
92
89
|
end
|
93
90
|
|
@@ -113,10 +110,7 @@ module RuboCop
|
|
113
110
|
end
|
114
111
|
|
115
112
|
def keyword_locations_in_rescue(node)
|
116
|
-
[
|
117
|
-
node.loc.else,
|
118
|
-
*node.resbody_branches.map { |body| body.loc.keyword }
|
119
|
-
].compact
|
113
|
+
[node.loc.else, *node.resbody_branches.map { |body| body.loc.keyword }].compact
|
120
114
|
end
|
121
115
|
|
122
116
|
def keyword_locations_in_ensure(node)
|
@@ -168,8 +168,7 @@ module RuboCop
|
|
168
168
|
return node.parent if node.case_type? && node.argument?
|
169
169
|
|
170
170
|
assignment = node.ancestors.find(&:assignment_or_similar?)
|
171
|
-
if assignment && !line_break_before_keyword?(assignment.source_range,
|
172
|
-
node)
|
171
|
+
if assignment && !line_break_before_keyword?(assignment.source_range, node)
|
173
172
|
assignment
|
174
173
|
else
|
175
174
|
# Fall back to 'keyword' style if this node is not on the RHS of an
|
@@ -65,7 +65,7 @@ module RuboCop
|
|
65
65
|
|
66
66
|
# If there is no LF on the last line, we don't care if there's no CR.
|
67
67
|
def unimportant_missing_cr?(index, last_line, line)
|
68
|
-
style == :crlf && index == last_line - 1 &&
|
68
|
+
style == :crlf && index == last_line - 1 && !line.end_with?("\n")
|
69
69
|
end
|
70
70
|
|
71
71
|
def offense_message(line)
|
@@ -34,8 +34,7 @@ module RuboCop
|
|
34
34
|
include RangeHelp
|
35
35
|
|
36
36
|
MSG_UNNECESSARY = 'Unnecessary spacing detected.'
|
37
|
-
MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s '
|
38
|
-
'assignment.'
|
37
|
+
MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s assignment.'
|
39
38
|
|
40
39
|
def on_new_investigation
|
41
40
|
return if processed_source.blank?
|
@@ -81,15 +80,12 @@ module RuboCop
|
|
81
80
|
end
|
82
81
|
|
83
82
|
def check_other(token1, token2, ast)
|
84
|
-
return false if allow_for_trailing_comments? &&
|
85
|
-
token2.text.start_with?('#')
|
83
|
+
return false if allow_for_trailing_comments? && token2.text.start_with?('#')
|
86
84
|
|
87
85
|
extra_space_range(token1, token2) do |range|
|
88
86
|
next if ignored_range?(ast, range.begin_pos)
|
89
87
|
|
90
|
-
add_offense(range, message: MSG_UNNECESSARY)
|
91
|
-
corrector.remove(range)
|
92
|
-
end
|
88
|
+
add_offense(range, message: MSG_UNNECESSARY) { |corrector| corrector.remove(range) }
|
93
89
|
end
|
94
90
|
end
|
95
91
|
|
@@ -120,8 +120,7 @@ module RuboCop
|
|
120
120
|
check_first(first_elem, left_bracket, left_parenthesis, 0)
|
121
121
|
end
|
122
122
|
|
123
|
-
check_right_bracket(array_node.loc.end, left_bracket,
|
124
|
-
left_parenthesis)
|
123
|
+
check_right_bracket(array_node.loc.end, left_bracket, left_parenthesis)
|
125
124
|
end
|
126
125
|
|
127
126
|
def check_right_bracket(right_bracket, left_bracket, left_parenthesis)
|
@@ -21,8 +21,7 @@ module RuboCop
|
|
21
21
|
include FirstElementLineBreak
|
22
22
|
extend AutoCorrector
|
23
23
|
|
24
|
-
MSG = 'Add a line break before the first element of a '
|
25
|
-
'multi-line array.'
|
24
|
+
MSG = 'Add a line break before the first element of a multi-line array.'
|
26
25
|
|
27
26
|
def on_array(node)
|
28
27
|
return if !node.loc.begin && !assignment_on_same_line?(node)
|
@@ -91,6 +91,8 @@ module RuboCop
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def on_send(node)
|
94
|
+
return if enforce_first_argument_with_fixed_indentation?
|
95
|
+
|
94
96
|
each_argument_node(node, :hash) do |hash_node, left_parenthesis|
|
95
97
|
check(hash_node, left_parenthesis)
|
96
98
|
end
|
@@ -117,8 +119,7 @@ module RuboCop
|
|
117
119
|
return if first_pair.first_line == left_brace.line
|
118
120
|
|
119
121
|
if separator_style?(first_pair)
|
120
|
-
check_based_on_longest_key(hash_node, left_brace,
|
121
|
-
left_parenthesis)
|
122
|
+
check_based_on_longest_key(hash_node, left_brace, left_parenthesis)
|
122
123
|
else
|
123
124
|
check_first(first_pair, left_brace, left_parenthesis, 0)
|
124
125
|
end
|
@@ -148,9 +149,7 @@ module RuboCop
|
|
148
149
|
end
|
149
150
|
|
150
151
|
def check_based_on_longest_key(hash_node, left_brace, left_parenthesis)
|
151
|
-
key_lengths = hash_node.keys.map
|
152
|
-
key.source_range.length
|
153
|
-
end
|
152
|
+
key_lengths = hash_node.keys.map { |key| key.source_range.length }
|
154
153
|
check_first(hash_node.pairs.first, left_brace, left_parenthesis,
|
155
154
|
key_lengths.max - key_lengths.first)
|
156
155
|
end
|
@@ -185,6 +184,16 @@ module RuboCop
|
|
185
184
|
'where the left brace is.'
|
186
185
|
end
|
187
186
|
end
|
187
|
+
|
188
|
+
def enforce_first_argument_with_fixed_indentation?
|
189
|
+
return false unless argument_alignment_config['Enabled']
|
190
|
+
|
191
|
+
argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
192
|
+
end
|
193
|
+
|
194
|
+
def argument_alignment_config
|
195
|
+
config.for_cop('Layout/ArgumentAlignment')
|
196
|
+
end
|
188
197
|
end
|
189
198
|
end
|
190
199
|
end
|
@@ -20,8 +20,7 @@ module RuboCop
|
|
20
20
|
include FirstElementLineBreak
|
21
21
|
extend AutoCorrector
|
22
22
|
|
23
|
-
MSG = 'Add a line break before the first element of a '
|
24
|
-
'multi-line hash.'
|
23
|
+
MSG = 'Add a line break before the first element of a multi-line hash.'
|
25
24
|
|
26
25
|
def on_hash(node)
|
27
26
|
# node.loc.begin tells us whether the hash opens with a {
|
@@ -24,8 +24,7 @@ module RuboCop
|
|
24
24
|
include FirstElementLineBreak
|
25
25
|
extend AutoCorrector
|
26
26
|
|
27
|
-
MSG = 'Add a line break before the first argument of a '
|
28
|
-
'multi-line method argument list.'
|
27
|
+
MSG = 'Add a line break before the first argument of a multi-line method argument list.'
|
29
28
|
|
30
29
|
def on_send(node)
|
31
30
|
args = node.arguments.dup
|
@@ -30,8 +30,7 @@ module RuboCop
|
|
30
30
|
include FirstElementLineBreak
|
31
31
|
extend AutoCorrector
|
32
32
|
|
33
|
-
MSG = 'Add a line break before the first parameter of a '
|
34
|
-
'multi-line method parameter list.'
|
33
|
+
MSG = 'Add a line break before the first parameter of a multi-line method parameter list.'
|
35
34
|
|
36
35
|
def on_def(node)
|
37
36
|
check_method_line_break(node, node.arguments)
|
@@ -185,7 +185,9 @@ module RuboCop
|
|
185
185
|
SeparatorAlignment => 'Align the separators of a hash ' \
|
186
186
|
'literal if they span more than one line.',
|
187
187
|
TableAlignment => 'Align the keys and values of a hash ' \
|
188
|
-
'literal if they span more than one line.'
|
188
|
+
'literal if they span more than one line.',
|
189
|
+
KeywordSplatAlignment => 'Align keyword splats with the ' \
|
190
|
+
'rest of the hash if it spans more than one line.' }.freeze
|
189
191
|
|
190
192
|
def on_send(node)
|
191
193
|
return if double_splat?(node)
|
@@ -193,22 +195,19 @@ module RuboCop
|
|
193
195
|
|
194
196
|
last_argument = node.last_argument
|
195
197
|
|
196
|
-
return unless last_argument.hash_type? &&
|
197
|
-
ignore_hash_argument?(last_argument)
|
198
|
+
return unless last_argument.hash_type? && ignore_hash_argument?(last_argument)
|
198
199
|
|
199
200
|
ignore_node(last_argument)
|
200
201
|
end
|
201
202
|
alias on_super on_send
|
202
203
|
alias on_yield on_send
|
203
204
|
|
204
|
-
def on_hash(node)
|
205
|
-
return if ignored_node?(node)
|
206
|
-
|
205
|
+
def on_hash(node)
|
206
|
+
return if autocorrect_incompatible_with_other_cops?(node) || ignored_node?(node) ||
|
207
|
+
node.pairs.empty? || node.single_line?
|
207
208
|
|
208
|
-
|
209
|
-
|
210
|
-
alignment_for_colons
|
211
|
-
.any? { |a| a.checkable_layout?(node) }
|
209
|
+
proc = ->(a) { a.checkable_layout?(node) }
|
210
|
+
return unless alignment_for_hash_rockets.any?(proc) && alignment_for_colons.any?(proc)
|
212
211
|
|
213
212
|
check_pairs(node)
|
214
213
|
end
|
@@ -217,6 +216,11 @@ module RuboCop
|
|
217
216
|
|
218
217
|
private
|
219
218
|
|
219
|
+
def autocorrect_incompatible_with_other_cops?(node)
|
220
|
+
enforce_first_argument_with_fixed_indentation? &&
|
221
|
+
node.parent&.call_type? && node.parent.loc.line == node.pairs.first.loc.line
|
222
|
+
end
|
223
|
+
|
220
224
|
def reset!
|
221
225
|
self.offences_by = {}
|
222
226
|
self.column_deltas = Hash.new { |hash, key| hash[key] = {} }
|
@@ -246,7 +250,14 @@ module RuboCop
|
|
246
250
|
end
|
247
251
|
|
248
252
|
def add_offences
|
253
|
+
kwsplat_offences = offences_by.delete(KeywordSplatAlignment)
|
254
|
+
register_offences_with_format(kwsplat_offences, KeywordSplatAlignment)
|
255
|
+
|
249
256
|
format, offences = offences_by.min_by { |_, v| v.length }
|
257
|
+
register_offences_with_format(offences, format)
|
258
|
+
end
|
259
|
+
|
260
|
+
def register_offences_with_format(offences, format)
|
250
261
|
(offences || []).each do |offence|
|
251
262
|
add_offense(offence, message: MESSAGES[format]) do |corrector|
|
252
263
|
delta = column_deltas[alignment_for(offence).first.class][offence]
|
@@ -274,7 +285,9 @@ module RuboCop
|
|
274
285
|
end
|
275
286
|
|
276
287
|
def alignment_for(pair)
|
277
|
-
if pair.
|
288
|
+
if pair.kwsplat_type?
|
289
|
+
[KeywordSplatAlignment.new]
|
290
|
+
elsif pair.hash_rocket?
|
278
291
|
alignment_for_hash_rockets
|
279
292
|
else
|
280
293
|
alignment_for_colons
|
@@ -282,13 +295,11 @@ module RuboCop
|
|
282
295
|
end
|
283
296
|
|
284
297
|
def alignment_for_hash_rockets
|
285
|
-
@alignment_for_hash_rockets ||=
|
286
|
-
new_alignment('EnforcedHashRocketStyle')
|
298
|
+
@alignment_for_hash_rockets ||= new_alignment('EnforcedHashRocketStyle')
|
287
299
|
end
|
288
300
|
|
289
301
|
def alignment_for_colons
|
290
|
-
@alignment_for_colons ||=
|
291
|
-
new_alignment('EnforcedColonStyle')
|
302
|
+
@alignment_for_colons ||= new_alignment('EnforcedColonStyle')
|
292
303
|
end
|
293
304
|
|
294
305
|
def correct_node(corrector, node, delta)
|
@@ -356,6 +367,16 @@ module RuboCop
|
|
356
367
|
def good_alignment?(column_deltas)
|
357
368
|
column_deltas.values.all?(&:zero?)
|
358
369
|
end
|
370
|
+
|
371
|
+
def enforce_first_argument_with_fixed_indentation?
|
372
|
+
return false unless argument_alignment_config['Enabled']
|
373
|
+
|
374
|
+
argument_alignment_config['EnforcedStyle'] == 'with_fixed_indentation'
|
375
|
+
end
|
376
|
+
|
377
|
+
def argument_alignment_config
|
378
|
+
config.for_cop('Layout/ArgumentAlignment')
|
379
|
+
end
|
359
380
|
end
|
360
381
|
end
|
361
382
|
end
|