rubocop 1.68.0 → 1.71.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/config/default.yml +77 -8
- data/lib/rubocop/cli/command/execute_runner.rb +3 -3
- data/lib/rubocop/cli/command/show_cops.rb +24 -2
- data/lib/rubocop/comment_config.rb +1 -1
- data/lib/rubocop/config.rb +13 -4
- data/lib/rubocop/config_loader.rb +4 -0
- data/lib/rubocop/config_loader_resolver.rb +14 -3
- data/lib/rubocop/config_validator.rb +18 -8
- data/lib/rubocop/cop/autocorrect_logic.rb +32 -35
- data/lib/rubocop/cop/base.rb +7 -1
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +2 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
- data/lib/rubocop/cop/bundler/gem_filename.rb +0 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +0 -1
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -1
- data/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +1 -2
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +0 -2
- data/lib/rubocop/cop/generator.rb +6 -0
- data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
- data/lib/rubocop/cop/internal_affairs/location_expression.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +3 -4
- data/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +3 -2
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +63 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_walker.rb +131 -0
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +229 -0
- data/lib/rubocop/cop/internal_affairs/node_type_multiple_predicates.rb +126 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
- data/lib/rubocop/cop/internal_affairs/numblock_handler.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +90 -0
- data/lib/rubocop/cop/internal_affairs/operator_keyword.rb +48 -0
- data/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +5 -4
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +0 -2
- data/lib/rubocop/cop/internal_affairs.rb +5 -0
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -9
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +0 -1
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -2
- data/lib/rubocop/cop/layout/class_structure.rb +9 -9
- data/lib/rubocop/cop/layout/dot_position.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 +7 -5
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +3 -3
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +5 -6
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -5
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +3 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +3 -8
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +2 -7
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +6 -4
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +7 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +15 -0
- data/lib/rubocop/cop/layout/line_continuation_leading_space.rb +11 -2
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
- data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/line_length.rb +119 -4
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +25 -0
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +2 -3
- data/lib/rubocop/cop/layout/parameter_alignment.rb +3 -4
- data/lib/rubocop/cop/layout/redundant_line_break.rb +10 -41
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +4 -3
- data/lib/rubocop/cop/layout/single_line_block_chain.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_colon.rb +2 -2
- data/lib/rubocop/cop/layout/space_after_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +19 -20
- data/lib/rubocop/cop/layout/space_before_comma.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +6 -0
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +4 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +0 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -3
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +1 -1
- data/lib/rubocop/cop/lint/array_literal_in_regexp.rb +119 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -3
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +10 -12
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +6 -0
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +3 -3
- data/lib/rubocop/cop/lint/constant_reassignment.rb +148 -0
- data/lib/rubocop/cop/lint/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +2 -1
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_file.rb +0 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +19 -8
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -4
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -1
- data/lib/rubocop/cop/lint/hash_new_with_keyword_arguments_as_default.rb +55 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +9 -0
- data/lib/rubocop/cop/lint/it_without_arguments_in_block.rb +3 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -0
- data/lib/rubocop/cop/lint/literal_assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +24 -6
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_case_range.rb +3 -6
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +9 -5
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +2 -2
- data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +5 -3
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -3
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +0 -1
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +1 -2
- data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +93 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +1 -2
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +3 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -5
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +12 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -7
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +2 -2
- data/lib/rubocop/cop/lint/refinement_import_methods.rb +1 -1
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +0 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +3 -7
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +8 -1
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +2 -0
- data/lib/rubocop/cop/lint/self_assignment.rb +8 -10
- data/lib/rubocop/cop/lint/shadowed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shared_mutable_default.rb +65 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +1 -1
- data/lib/rubocop/cop/lint/symbol_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/syntax.rb +4 -1
- data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +1 -1
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +51 -2
- data/lib/rubocop/cop/lint/unreachable_loop.rb +1 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +18 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -4
- data/lib/rubocop/cop/lint/useless_assignment.rb +1 -1
- data/lib/rubocop/cop/lint/useless_defined.rb +55 -0
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +4 -0
- data/lib/rubocop/cop/lint/useless_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/useless_numeric_operation.rb +2 -1
- data/lib/rubocop/cop/lint/useless_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_ruby2_keywords.rb +2 -2
- data/lib/rubocop/cop/lint/useless_setter_call.rb +14 -25
- data/lib/rubocop/cop/lint/void.rb +7 -5
- data/lib/rubocop/cop/metrics/block_nesting.rb +1 -1
- data/lib/rubocop/cop/metrics/class_length.rb +9 -9
- data/lib/rubocop/cop/metrics/collection_literal_length.rb +7 -0
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/method_length.rb +8 -1
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +2 -3
- data/lib/rubocop/cop/mixin/check_assignment.rb +4 -12
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +11 -11
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +49 -0
- data/lib/rubocop/cop/mixin/comments_help.rb +7 -2
- data/lib/rubocop/cop/mixin/dig_help.rb +27 -0
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +4 -4
- data/lib/rubocop/cop/mixin/hash_subset.rb +188 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +5 -4
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +5 -9
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +68 -30
- data/lib/rubocop/cop/mixin/range_help.rb +0 -1
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +8 -3
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +17 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -3
- data/lib/rubocop/cop/naming/accessor_method_name.rb +6 -6
- data/lib/rubocop/cop/naming/block_forwarding.rb +19 -15
- data/lib/rubocop/cop/naming/constant_name.rb +6 -7
- data/lib/rubocop/cop/naming/file_name.rb +0 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +11 -12
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +6 -14
- data/lib/rubocop/cop/naming/variable_name.rb +3 -4
- data/lib/rubocop/cop/naming/variable_number.rb +2 -3
- data/lib/rubocop/cop/security/compound_hash.rb +2 -0
- data/lib/rubocop/cop/security/yaml_load.rb +3 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +86 -28
- data/lib/rubocop/cop/style/ambiguous_endless_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/and_or.rb +1 -1
- data/lib/rubocop/cop/style/arguments_forwarding.rb +39 -23
- data/lib/rubocop/cop/style/array_first_last.rb +18 -2
- data/lib/rubocop/cop/style/array_intersect.rb +5 -4
- data/lib/rubocop/cop/style/bitwise_predicate.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +24 -22
- data/lib/rubocop/cop/style/case_like_if.rb +8 -11
- data/lib/rubocop/cop/style/class_and_module_children.rb +6 -3
- data/lib/rubocop/cop/style/collection_methods.rb +1 -1
- data/lib/rubocop/cop/style/combinable_defined.rb +1 -1
- data/lib/rubocop/cop/style/combinable_loops.rb +2 -2
- data/lib/rubocop/cop/style/commented_keyword.rb +11 -1
- data/lib/rubocop/cop/style/concat_array_literals.rb +1 -1
- data/lib/rubocop/cop/style/conditional_assignment.rb +25 -25
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -12
- data/lib/rubocop/cop/style/dig_chain.rb +89 -0
- data/lib/rubocop/cop/style/documentation.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +3 -3
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +4 -7
- data/lib/rubocop/cop/style/empty_else.rb +4 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -3
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
- data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
- data/lib/rubocop/cop/style/fetch_env_var.rb +2 -1
- data/lib/rubocop/cop/style/file_null.rb +89 -0
- data/lib/rubocop/cop/style/file_touch.rb +75 -0
- data/lib/rubocop/cop/style/float_division.rb +8 -4
- data/lib/rubocop/cop/style/for.rb +0 -1
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
- data/lib/rubocop/cop/style/global_vars.rb +1 -3
- data/lib/rubocop/cop/style/guard_clause.rb +1 -1
- data/lib/rubocop/cop/style/hash_conversion.rb +1 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +3 -6
- data/lib/rubocop/cop/style/hash_except.rb +35 -147
- data/lib/rubocop/cop/style/hash_slice.rb +80 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -3
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +22 -3
- data/lib/rubocop/cop/style/if_inside_else.rb +0 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +3 -3
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +2 -3
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -9
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +6 -7
- data/lib/rubocop/cop/style/it_assignment.rb +36 -0
- data/lib/rubocop/cop/style/keyword_arguments_merging.rb +2 -2
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +1 -1
- data/lib/rubocop/cop/style/lambda_call.rb +3 -2
- data/lib/rubocop/cop/style/map_into_array.rb +1 -1
- data/lib/rubocop/cop/style/map_to_hash.rb +1 -1
- data/lib/rubocop/cop/style/map_to_set.rb +3 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +20 -13
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -11
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/missing_else.rb +2 -0
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +33 -3
- data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiple_comparison.rb +34 -22
- data/lib/rubocop/cop/style/mutable_constant.rb +7 -8
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +7 -5
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +1 -1
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +5 -4
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/object_then.rb +14 -15
- data/lib/rubocop/cop/style/one_line_conditional.rb +25 -4
- data/lib/rubocop/cop/style/open_struct_use.rb +5 -5
- data/lib/rubocop/cop/style/operator_method_call.rb +5 -6
- data/lib/rubocop/cop/style/or_assignment.rb +3 -6
- data/lib/rubocop/cop/style/parallel_assignment.rb +9 -18
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -2
- data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +7 -5
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_argument.rb +3 -1
- data/lib/rubocop/cop/style/redundant_assignment.rb +1 -1
- data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
- data/lib/rubocop/cop/style/redundant_condition.rb +38 -23
- data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +2 -1
- data/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb +6 -10
- data/lib/rubocop/cop/style/redundant_each.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_freeze.rb +2 -2
- data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +44 -23
- data/lib/rubocop/cop/style/redundant_parentheses.rb +12 -12
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +1 -1
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +1 -1
- data/lib/rubocop/cop/style/redundant_return.rb +2 -2
- data/lib/rubocop/cop/style/redundant_self.rb +8 -15
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +20 -32
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +4 -4
- data/lib/rubocop/cop/style/redundant_sort.rb +3 -3
- data/lib/rubocop/cop/style/redundant_string_escape.rb +2 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +2 -3
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +2 -2
- data/lib/rubocop/cop/style/select_by_regexp.rb +1 -1
- data/lib/rubocop/cop/style/self_assignment.rb +11 -17
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
- data/lib/rubocop/cop/style/signal_exception.rb +2 -3
- data/lib/rubocop/cop/style/single_argument_dig.rb +9 -5
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +12 -3
- data/lib/rubocop/cop/style/single_line_methods.rb +3 -4
- data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +4 -5
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +14 -13
- data/lib/rubocop/cop/style/string_literals.rb +1 -1
- data/lib/rubocop/cop/style/string_methods.rb +1 -1
- data/lib/rubocop/cop/style/super_arguments.rb +65 -17
- data/lib/rubocop/cop/style/swap_values.rb +4 -15
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/top_level_method_definition.rb +1 -1
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -1
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +4 -4
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -2
- data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
- data/lib/rubocop/cop/style/yoda_expression.rb +2 -1
- data/lib/rubocop/cop/util.rb +11 -4
- data/lib/rubocop/cop/variable_force/variable.rb +1 -1
- data/lib/rubocop/cop/variable_force/variable_table.rb +3 -3
- data/lib/rubocop/cop/variable_force.rb +4 -10
- data/lib/rubocop/cops_documentation_generator.rb +22 -14
- data/lib/rubocop/directive_comment.rb +9 -8
- data/lib/rubocop/formatter/formatter_set.rb +1 -1
- data/lib/rubocop/lsp/diagnostic.rb +189 -0
- data/lib/rubocop/lsp/logger.rb +2 -2
- data/lib/rubocop/lsp/routes.rb +7 -23
- data/lib/rubocop/lsp/runtime.rb +15 -49
- data/lib/rubocop/lsp/stdin_runner.rb +83 -0
- data/lib/rubocop/magic_comment.rb +3 -3
- data/lib/rubocop/options.rb +2 -1
- data/lib/rubocop/path_util.rb +11 -8
- data/lib/rubocop/result_cache.rb +13 -13
- data/lib/rubocop/rspec/expect_offense.rb +6 -2
- data/lib/rubocop/rspec/shared_contexts.rb +4 -1
- data/lib/rubocop/rspec/support.rb +1 -2
- data/lib/rubocop/runner.rb +5 -6
- data/lib/rubocop/target_finder.rb +1 -0
- data/lib/rubocop/target_ruby.rb +15 -0
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +14 -0
- data/lib/ruby_lsp/rubocop/addon.rb +78 -0
- data/lib/ruby_lsp/rubocop/wraps_built_in_lsp_runtime.rb +50 -0
- metadata +36 -15
- data/lib/rubocop/rspec/host_environment_simulation_helper.rb +0 -28
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module InternalAffairs
|
|
6
|
+
# Use `node.type?(:foo, :bar)` instead of `node.foo_type? || node.bar_type?`,
|
|
7
|
+
# and `!node.type?(:foo, :bar)` instead of `!node.foo_type? && !node.bar_type?`.
|
|
8
|
+
#
|
|
9
|
+
# @example
|
|
10
|
+
#
|
|
11
|
+
# # bad
|
|
12
|
+
# node.str_type? || node.sym_type?
|
|
13
|
+
#
|
|
14
|
+
# # good
|
|
15
|
+
# node.type?(:str, :sym)
|
|
16
|
+
#
|
|
17
|
+
# # bad
|
|
18
|
+
# node.type?(:str, :sym) || node.boolean_type?
|
|
19
|
+
#
|
|
20
|
+
# # good
|
|
21
|
+
# node.type?(:str, :sym, :boolean)
|
|
22
|
+
#
|
|
23
|
+
# # bad
|
|
24
|
+
# !node.str_type? && !node.sym_type?
|
|
25
|
+
#
|
|
26
|
+
# # good
|
|
27
|
+
# !node.type?(:str, :sym)
|
|
28
|
+
#
|
|
29
|
+
# # bad
|
|
30
|
+
# !node.type?(:str, :sym) && !node.boolean_type?
|
|
31
|
+
#
|
|
32
|
+
# # good
|
|
33
|
+
# !node.type?(:str, :sym, :boolean)
|
|
34
|
+
#
|
|
35
|
+
class NodeTypeMultiplePredicates < Base
|
|
36
|
+
extend AutoCorrector
|
|
37
|
+
|
|
38
|
+
MSG_OR = 'Use `%<replacement>s` instead of checking for multiple node types.'
|
|
39
|
+
MSG_AND = 'Use `%<replacement>s` instead of checking against multiple node types.'
|
|
40
|
+
|
|
41
|
+
# @!method one_of_node_types?(node)
|
|
42
|
+
def_node_matcher :one_of_node_types?, <<~PATTERN
|
|
43
|
+
(or $(call _receiver #type_predicate?) (call _receiver #type_predicate?))
|
|
44
|
+
PATTERN
|
|
45
|
+
|
|
46
|
+
# @!method or_another_type?(node)
|
|
47
|
+
def_node_matcher :or_another_type?, <<~PATTERN
|
|
48
|
+
(or {
|
|
49
|
+
$(call _receiver :type? sym+) (call _receiver #type_predicate?) |
|
|
50
|
+
(call _receiver #type_predicate?) $(call _receiver :type? sym+)
|
|
51
|
+
})
|
|
52
|
+
PATTERN
|
|
53
|
+
|
|
54
|
+
# @!method none_of_node_types?(node)
|
|
55
|
+
def_node_matcher :none_of_node_types?, <<~PATTERN
|
|
56
|
+
(and
|
|
57
|
+
(send $(call _receiver #type_predicate?) :!)
|
|
58
|
+
(send (call _receiver #type_predicate?) :!)
|
|
59
|
+
)
|
|
60
|
+
PATTERN
|
|
61
|
+
|
|
62
|
+
# @!method and_not_another_type?(node)
|
|
63
|
+
def_node_matcher :and_not_another_type?, <<~PATTERN
|
|
64
|
+
(and {
|
|
65
|
+
(send $(call _receiver :type? sym+) :!) (send (call _receiver #type_predicate?) :!) |
|
|
66
|
+
(send (call _receiver #type_predicate?) :!) (send $(call _receiver :type? sym+) :!)
|
|
67
|
+
})
|
|
68
|
+
PATTERN
|
|
69
|
+
|
|
70
|
+
def on_or(node)
|
|
71
|
+
return unless (send_node = one_of_node_types?(node) || or_another_type?(node))
|
|
72
|
+
return unless send_node.receiver
|
|
73
|
+
|
|
74
|
+
replacement = replacement(node, send_node)
|
|
75
|
+
add_offense(node, message: format(MSG_OR, replacement: replacement)) do |corrector|
|
|
76
|
+
corrector.replace(node, replacement)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def on_and(node)
|
|
81
|
+
return unless (send_node = none_of_node_types?(node) || and_not_another_type?(node))
|
|
82
|
+
return unless send_node.receiver
|
|
83
|
+
|
|
84
|
+
replacement = "!#{replacement(node, send_node)}"
|
|
85
|
+
|
|
86
|
+
add_offense(node, message: format(MSG_AND, replacement: replacement)) do |corrector|
|
|
87
|
+
corrector.replace(node, replacement)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
|
|
93
|
+
def type_predicate?(method_name)
|
|
94
|
+
method_name.end_with?('_type?')
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def replacement(node, send_node)
|
|
98
|
+
send_node = send_node.children.first if send_node.method?(:!)
|
|
99
|
+
|
|
100
|
+
types = types(node)
|
|
101
|
+
receiver = send_node.receiver.source
|
|
102
|
+
dot = send_node.loc.dot.source
|
|
103
|
+
|
|
104
|
+
"#{receiver}#{dot}type?(:#{types.join(', :')})"
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def types(node)
|
|
108
|
+
[types_in_branch(node.lhs), types_in_branch(node.rhs)]
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def types_in_branch(branch)
|
|
112
|
+
branch = branch.children.first if branch.method?(:!)
|
|
113
|
+
|
|
114
|
+
if branch.method?(:type?)
|
|
115
|
+
branch.arguments.map(&:value)
|
|
116
|
+
elsif branch.method?(:defined_type?)
|
|
117
|
+
# `node.defined_type?` relates to `node.type == :defined?`
|
|
118
|
+
'defined?'
|
|
119
|
+
else
|
|
120
|
+
branch.method_name.to_s.delete_suffix('_type?')
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -21,16 +21,17 @@ module RuboCop
|
|
|
21
21
|
|
|
22
22
|
# @!method node_type_check(node)
|
|
23
23
|
def_node_matcher :node_type_check, <<~PATTERN
|
|
24
|
-
(send (
|
|
24
|
+
(send (call _ :type) :== (sym $_))
|
|
25
25
|
PATTERN
|
|
26
26
|
|
|
27
27
|
def on_send(node)
|
|
28
|
-
node_type_check(node) do |
|
|
28
|
+
node_type_check(node) do |node_type|
|
|
29
29
|
return unless Parser::Meta::NODE_TYPES.include?(node_type)
|
|
30
30
|
|
|
31
31
|
message = format(MSG, type: node_type)
|
|
32
32
|
add_offense(node, message: message) do |corrector|
|
|
33
|
-
range = node.
|
|
33
|
+
range = node.receiver.loc.selector.join(node.source_range.end)
|
|
34
|
+
|
|
34
35
|
corrector.replace(range, "#{node_type}_type?")
|
|
35
36
|
end
|
|
36
37
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module InternalAffairs
|
|
6
|
-
# Checks for missing `numblock handlers. The blocks with numbered
|
|
6
|
+
# Checks for missing `numblock` handlers. The blocks with numbered
|
|
7
7
|
# arguments introduced in Ruby 2.7 are parsed with a node type of
|
|
8
8
|
# `numblock` instead of block. Cops that define `block` handlers
|
|
9
9
|
# need to define `numblock` handlers or disable this cope for them.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module InternalAffairs
|
|
6
|
+
# Checks for cops that define `on_send` without define `on_csend`.
|
|
7
|
+
#
|
|
8
|
+
# Although in some cases it can be predetermined that safe navigation
|
|
9
|
+
# will never be used with the code checked by a specific cop, in general
|
|
10
|
+
# it is good practice to handle safe navigation methods if handling any
|
|
11
|
+
# `send` node.
|
|
12
|
+
#
|
|
13
|
+
# NOTE: It is expected to disable this cop for cops that check for method calls
|
|
14
|
+
# on receivers that cannot be nil (`self`, a literal, a constant), and
|
|
15
|
+
# method calls that will never have a receiver (ruby keywords like `raise`,
|
|
16
|
+
# macros like `attr_reader`, DSL methods, etc.), and other checks that wouldn't
|
|
17
|
+
# make sense to support safe navigation.
|
|
18
|
+
#
|
|
19
|
+
# @example
|
|
20
|
+
# # bad
|
|
21
|
+
# class MyCop < RuboCop::Cop:Base
|
|
22
|
+
# def on_send(node)
|
|
23
|
+
# # ...
|
|
24
|
+
# end
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# # good - explicit method definition
|
|
28
|
+
# class MyCop < RuboCop::Cop:Base
|
|
29
|
+
# def on_send(node)
|
|
30
|
+
# # ...
|
|
31
|
+
# end
|
|
32
|
+
#
|
|
33
|
+
# def on_csend(node)
|
|
34
|
+
# # ...
|
|
35
|
+
# end
|
|
36
|
+
# end
|
|
37
|
+
#
|
|
38
|
+
# # good - alias
|
|
39
|
+
# class MyCop < RuboCop::Cop:Base
|
|
40
|
+
# def on_send(node)
|
|
41
|
+
# # ...
|
|
42
|
+
# end
|
|
43
|
+
# alias on_csend on_send
|
|
44
|
+
# end
|
|
45
|
+
#
|
|
46
|
+
# # good - alias_method
|
|
47
|
+
# class MyCop < RuboCop::Cop:Base
|
|
48
|
+
# def on_send(node)
|
|
49
|
+
# # ...
|
|
50
|
+
# end
|
|
51
|
+
# alias_method :on_csend, :on_send
|
|
52
|
+
# end
|
|
53
|
+
class OnSendWithoutOnCSend < Base
|
|
54
|
+
RESTRICT_ON_SEND = %i[alias_method].freeze
|
|
55
|
+
MSG = 'Cop defines `on_send` but not `on_csend`.'
|
|
56
|
+
|
|
57
|
+
def on_new_investigation
|
|
58
|
+
@on_send_definition = nil
|
|
59
|
+
@on_csend_definition = nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def on_investigation_end
|
|
63
|
+
return unless @on_send_definition && !@on_csend_definition
|
|
64
|
+
|
|
65
|
+
add_offense(@on_send_definition)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def on_def(node)
|
|
69
|
+
@on_send_definition = node if node.method?(:on_send)
|
|
70
|
+
@on_csend_definition = node if node.method?(:on_csend)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def on_alias(node)
|
|
74
|
+
@on_send_definition = node if node.new_identifier.value == :on_send
|
|
75
|
+
@on_csend_definition = node if node.new_identifier.value == :on_csend
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def on_send(node) # rubocop:disable InternalAffairs/OnSendWithoutOnCSend
|
|
79
|
+
new_identifier = node.first_argument
|
|
80
|
+
return unless new_identifier.basic_literal?
|
|
81
|
+
|
|
82
|
+
new_identifier = new_identifier.value
|
|
83
|
+
|
|
84
|
+
@on_send_definition = node if new_identifier == :on_send
|
|
85
|
+
@on_csend_definition = node if new_identifier == :on_csend
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module InternalAffairs
|
|
6
|
+
# Enforces the use of `node.operator_keyword?` instead of `node.and_type? || node.or_type?`.
|
|
7
|
+
#
|
|
8
|
+
# @example
|
|
9
|
+
# # bad
|
|
10
|
+
# node.and_type? || node.or_type?
|
|
11
|
+
# node.or_type? || node.and_type?
|
|
12
|
+
#
|
|
13
|
+
# # good
|
|
14
|
+
# node.operator_keyword?
|
|
15
|
+
#
|
|
16
|
+
class OperatorKeyword < Base
|
|
17
|
+
extend AutoCorrector
|
|
18
|
+
|
|
19
|
+
MSG = 'Use `%<prefer>s`.'
|
|
20
|
+
PREFERRED_METHOD = 'operator_keyword?'
|
|
21
|
+
|
|
22
|
+
# @!method and_or_type(node)
|
|
23
|
+
def_node_matcher :and_or_type, <<~PATTERN
|
|
24
|
+
{
|
|
25
|
+
(or $(send _node :and_type?) $(send _node :or_type?))
|
|
26
|
+
(or $(send _node :or_type?) $(send _node :and_type?))
|
|
27
|
+
(or
|
|
28
|
+
(or _ $(send _node :and_type?)) $(send _node :or_type?))
|
|
29
|
+
(or
|
|
30
|
+
(or _ $(send _node :or_type?)) $(send _node :and_type?))
|
|
31
|
+
}
|
|
32
|
+
PATTERN
|
|
33
|
+
|
|
34
|
+
def on_or(node)
|
|
35
|
+
return unless (lhs, rhs = and_or_type(node))
|
|
36
|
+
|
|
37
|
+
begin_range = lhs.receiver&.source_range || lhs.loc.selector
|
|
38
|
+
offense = begin_range.join(rhs.source_range.end)
|
|
39
|
+
prefer = lhs.receiver ? "#{lhs.receiver.source}.#{PREFERRED_METHOD}" : PREFERRED_METHOD
|
|
40
|
+
|
|
41
|
+
add_offense(offense, message: format(MSG, prefer: prefer)) do |corrector|
|
|
42
|
+
corrector.replace(offense, prefer)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
|
47
47
|
# @!method redundant_source_range(node)
|
|
48
48
|
def_node_matcher :redundant_source_range, <<~PATTERN
|
|
49
49
|
{
|
|
50
|
-
(
|
|
50
|
+
(call $(call _ :source_range) :source)
|
|
51
51
|
(send nil? :add_offense $(send _ :source_range) ...)
|
|
52
52
|
(send _ {
|
|
53
53
|
:replace :insert_before :insert_before_multi :insert_after :insert_after_multi
|
|
@@ -59,6 +59,7 @@ module RuboCop
|
|
|
59
59
|
|
|
60
60
|
def on_send(node)
|
|
61
61
|
return unless (source_range = redundant_source_range(node))
|
|
62
|
+
return unless source_range.receiver
|
|
62
63
|
return if source_range.receiver.send_type? && source_range.receiver.method?(:buffer)
|
|
63
64
|
|
|
64
65
|
selector = source_range.loc.selector
|
|
@@ -67,6 +68,7 @@ module RuboCop
|
|
|
67
68
|
corrector.remove(source_range.loc.dot.join(selector))
|
|
68
69
|
end
|
|
69
70
|
end
|
|
71
|
+
alias on_csend on_send
|
|
70
72
|
end
|
|
71
73
|
end
|
|
72
74
|
end
|
|
@@ -34,8 +34,8 @@ module RuboCop
|
|
|
34
34
|
# @!method single_line_comparison(node)
|
|
35
35
|
def_node_matcher :single_line_comparison, <<~PATTERN
|
|
36
36
|
{
|
|
37
|
-
(send (
|
|
38
|
-
(send (
|
|
37
|
+
(send (call $_receiver {:line :first_line}) {:== :!=} (call _receiver :last_line))
|
|
38
|
+
(send (call $_receiver :last_line) {:== :!=} (call _receiver {:line :first_line}))
|
|
39
39
|
}
|
|
40
40
|
PATTERN
|
|
41
41
|
|
|
@@ -43,7 +43,8 @@ module RuboCop
|
|
|
43
43
|
return unless (receiver = single_line_comparison(node))
|
|
44
44
|
|
|
45
45
|
bang = node.method?(:!=) ? '!' : ''
|
|
46
|
-
|
|
46
|
+
dot = receiver.parent.loc.dot.source
|
|
47
|
+
preferred = "#{bang}#{extract_receiver(receiver)}#{dot}single_line?"
|
|
47
48
|
|
|
48
49
|
add_offense(node, message: format(MSG, preferred: preferred)) do |corrector|
|
|
49
50
|
corrector.replace(node, preferred)
|
|
@@ -53,7 +54,7 @@ module RuboCop
|
|
|
53
54
|
private
|
|
54
55
|
|
|
55
56
|
def extract_receiver(node)
|
|
56
|
-
node = node.receiver if node.
|
|
57
|
+
node = node.receiver if node.call_type? && %i[loc source_range].include?(node.method_name)
|
|
57
58
|
node.source
|
|
58
59
|
end
|
|
59
60
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative 'internal_affairs/cop_description'
|
|
4
|
+
require_relative 'internal_affairs/cop_enabled'
|
|
4
5
|
require_relative 'internal_affairs/create_empty_file'
|
|
5
6
|
require_relative 'internal_affairs/empty_line_between_expect_offense_and_correction'
|
|
6
7
|
require_relative 'internal_affairs/example_description'
|
|
@@ -14,9 +15,13 @@ require_relative 'internal_affairs/method_name_equal'
|
|
|
14
15
|
require_relative 'internal_affairs/node_destructuring'
|
|
15
16
|
require_relative 'internal_affairs/node_first_or_last_argument'
|
|
16
17
|
require_relative 'internal_affairs/node_matcher_directive'
|
|
18
|
+
require_relative 'internal_affairs/node_pattern_groups'
|
|
19
|
+
require_relative 'internal_affairs/node_type_multiple_predicates'
|
|
17
20
|
require_relative 'internal_affairs/node_type_predicate'
|
|
18
21
|
require_relative 'internal_affairs/numblock_handler'
|
|
19
22
|
require_relative 'internal_affairs/offense_location_keyword'
|
|
23
|
+
require_relative 'internal_affairs/on_send_without_on_csend'
|
|
24
|
+
require_relative 'internal_affairs/operator_keyword'
|
|
20
25
|
require_relative 'internal_affairs/processed_source_buffer_name'
|
|
21
26
|
require_relative 'internal_affairs/redundant_context_config_parameter'
|
|
22
27
|
require_relative 'internal_affairs/redundant_described_class_as_subject'
|
|
@@ -4,7 +4,7 @@ module RuboCop
|
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
6
|
# Bare access modifiers (those not applying to specific methods) should be
|
|
7
|
-
# indented as deep as method definitions, or as deep as the class
|
|
7
|
+
# indented as deep as method definitions, or as deep as the `class`/`module`
|
|
8
8
|
# keyword, depending on configuration.
|
|
9
9
|
#
|
|
10
10
|
# @example EnforcedStyle: indent (default)
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
#
|
|
7
|
-
# definition are aligned.
|
|
6
|
+
# Check that the arguments on a multi-line method call are aligned.
|
|
8
7
|
#
|
|
9
8
|
# @example EnforcedStyle: with_first_argument (default)
|
|
10
9
|
# # good
|
|
@@ -142,16 +141,10 @@ module RuboCop
|
|
|
142
141
|
end
|
|
143
142
|
|
|
144
143
|
def enforce_hash_argument_with_separator?
|
|
145
|
-
return false unless hash_argument_config['Enabled']
|
|
146
|
-
|
|
147
144
|
RuboCop::Cop::Layout::HashAlignment::SEPARATOR_ALIGNMENT_STYLES.any? do |style|
|
|
148
|
-
|
|
145
|
+
config.for_enabled_cop('Layout/HashAlignment')[style]&.include?('separator')
|
|
149
146
|
end
|
|
150
147
|
end
|
|
151
|
-
|
|
152
|
-
def hash_argument_config
|
|
153
|
-
config.for_cop('Layout/HashAlignment')
|
|
154
|
-
end
|
|
155
148
|
end
|
|
156
149
|
end
|
|
157
150
|
end
|
|
@@ -127,7 +127,6 @@ module RuboCop
|
|
|
127
127
|
start_loc,
|
|
128
128
|
end_loc,
|
|
129
129
|
do_source_line_column)
|
|
130
|
-
|
|
131
130
|
error_source_line_column = if style == :start_of_block
|
|
132
131
|
do_source_line_column
|
|
133
132
|
else
|
|
@@ -189,7 +188,7 @@ module RuboCop
|
|
|
189
188
|
# In offense message, we want to show the assignment LHS rather than
|
|
190
189
|
# the entire assignment.
|
|
191
190
|
def find_lhs_node(node)
|
|
192
|
-
node
|
|
191
|
+
node = node.lhs while node.type?(:op_asgn, :masgn)
|
|
193
192
|
node
|
|
194
193
|
end
|
|
195
194
|
|
|
@@ -3,23 +3,23 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Layout
|
|
6
|
-
# Checks if the code style follows the ExpectedOrder configuration:
|
|
6
|
+
# Checks if the code style follows the `ExpectedOrder` configuration:
|
|
7
7
|
#
|
|
8
8
|
# `Categories` allows us to map macro names into a category.
|
|
9
9
|
#
|
|
10
10
|
# Consider an example of code style that covers the following order:
|
|
11
11
|
#
|
|
12
|
-
# * Module inclusion (include
|
|
12
|
+
# * Module inclusion (`include`, `prepend`, `extend`)
|
|
13
13
|
# * Constants
|
|
14
|
-
# * Associations (has_one
|
|
15
|
-
# * Public attribute macros (attr_accessor
|
|
16
|
-
# * Other macros (validates
|
|
14
|
+
# * Associations (`has_one`, `has_many`)
|
|
15
|
+
# * Public attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
|
|
16
|
+
# * Other macros (`validates`, `validate`)
|
|
17
17
|
# * Public class methods
|
|
18
18
|
# * Initializer
|
|
19
19
|
# * Public instance methods
|
|
20
|
-
# * Protected attribute macros (attr_accessor
|
|
20
|
+
# * Protected attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
|
|
21
21
|
# * Protected instance methods
|
|
22
|
-
# * Private attribute macros (attr_accessor
|
|
22
|
+
# * Private attribute macros (`attr_accessor`, `attr_writer`, `attr_reader`)
|
|
23
23
|
# * Private instance methods
|
|
24
24
|
#
|
|
25
25
|
# You can configure the following order:
|
|
@@ -236,7 +236,7 @@ module RuboCop
|
|
|
236
236
|
|
|
237
237
|
return [] unless class_def
|
|
238
238
|
|
|
239
|
-
if class_def.
|
|
239
|
+
if class_def.type?(:def, :send)
|
|
240
240
|
[class_def]
|
|
241
241
|
else
|
|
242
242
|
class_def.children.compact
|
|
@@ -289,7 +289,7 @@ module RuboCop
|
|
|
289
289
|
def marked_as_private_constant?(node, name)
|
|
290
290
|
return false unless node.method?(:private_constant)
|
|
291
291
|
|
|
292
|
-
node.arguments.any? { |arg|
|
|
292
|
+
node.arguments.any? { |arg| arg.type?(:sym, :str) && arg.value == name }
|
|
293
293
|
end
|
|
294
294
|
|
|
295
295
|
def end_position_for(node)
|
|
@@ -200,7 +200,7 @@ module RuboCop
|
|
|
200
200
|
parent = node.parent
|
|
201
201
|
return false unless parent
|
|
202
202
|
|
|
203
|
-
parent.begin_type? &&
|
|
203
|
+
parent.begin_type? && same_line?(node, node.right_sibling)
|
|
204
204
|
end
|
|
205
205
|
|
|
206
206
|
# SimpleCov excludes code from the coverage report by wrapping it in `# :nocov:`:
|
|
@@ -162,7 +162,7 @@ module RuboCop
|
|
|
162
162
|
private
|
|
163
163
|
|
|
164
164
|
def def_location(correction_node)
|
|
165
|
-
if correction_node.
|
|
165
|
+
if correction_node.any_block_type?
|
|
166
166
|
correction_node.source_range.join(correction_node.children.first.source_range)
|
|
167
167
|
else
|
|
168
168
|
correction_node.loc.keyword.join(correction_node.loc.name)
|
|
@@ -181,12 +181,12 @@ module RuboCop
|
|
|
181
181
|
end
|
|
182
182
|
|
|
183
183
|
def macro_candidate?(node)
|
|
184
|
-
node.
|
|
184
|
+
node.any_block_type? && node.children.first.macro? &&
|
|
185
185
|
empty_line_between_macros.include?(node.children.first.method_name)
|
|
186
186
|
end
|
|
187
187
|
|
|
188
188
|
def method_candidate?(node)
|
|
189
|
-
cop_config['EmptyLineBetweenMethodDefs'] &&
|
|
189
|
+
cop_config['EmptyLineBetweenMethodDefs'] && node.type?(:def, :defs)
|
|
190
190
|
end
|
|
191
191
|
|
|
192
192
|
def class_candidate?(node)
|
|
@@ -246,7 +246,7 @@ module RuboCop
|
|
|
246
246
|
end
|
|
247
247
|
|
|
248
248
|
def def_start(node)
|
|
249
|
-
if node.
|
|
249
|
+
if node.any_block_type? && node.children.first.send_type?
|
|
250
250
|
node.source_range.line
|
|
251
251
|
else
|
|
252
252
|
node.loc.keyword.line
|
|
@@ -258,7 +258,7 @@ module RuboCop
|
|
|
258
258
|
end
|
|
259
259
|
|
|
260
260
|
def end_loc(node)
|
|
261
|
-
if
|
|
261
|
+
if node.type?(:def, :defs) && node.endless?
|
|
262
262
|
node.source_range.end
|
|
263
263
|
else
|
|
264
264
|
node.loc.end
|
|
@@ -283,6 +283,8 @@ module RuboCop
|
|
|
283
283
|
case node.type
|
|
284
284
|
when :def, :defs
|
|
285
285
|
:method
|
|
286
|
+
when :numblock
|
|
287
|
+
:block
|
|
286
288
|
else
|
|
287
289
|
node.type
|
|
288
290
|
end
|
|
@@ -84,9 +84,9 @@ module RuboCop
|
|
|
84
84
|
|
|
85
85
|
alias on_numblock on_block
|
|
86
86
|
|
|
87
|
-
def on_send(node)
|
|
88
|
-
return unless node.bare_access_modifier? &&
|
|
89
|
-
|
|
87
|
+
def on_send(node)
|
|
88
|
+
return unless node.bare_access_modifier? && !node.block_literal?
|
|
89
|
+
return if same_line?(node, node.right_sibling)
|
|
90
90
|
return if expected_empty_lines?(node)
|
|
91
91
|
|
|
92
92
|
message = message(node)
|
|
@@ -8,19 +8,18 @@ module RuboCop
|
|
|
8
8
|
#
|
|
9
9
|
# @example
|
|
10
10
|
#
|
|
11
|
-
# #
|
|
12
|
-
#
|
|
11
|
+
# # bad
|
|
13
12
|
# begin
|
|
13
|
+
#
|
|
14
14
|
# # ...
|
|
15
|
-
# end
|
|
16
15
|
#
|
|
17
|
-
#
|
|
16
|
+
# end
|
|
18
17
|
#
|
|
18
|
+
# # good
|
|
19
19
|
# begin
|
|
20
|
-
#
|
|
21
20
|
# # ...
|
|
22
|
-
#
|
|
23
21
|
# end
|
|
22
|
+
#
|
|
24
23
|
class EmptyLinesAroundBeginBody < Base
|
|
25
24
|
include EmptyLinesAroundBody
|
|
26
25
|
extend AutoCorrector
|
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
|
6
6
|
# Checks if empty lines exist around the bodies of `begin`
|
|
7
7
|
# sections. This cop doesn't check empty lines at `begin` body
|
|
8
8
|
# beginning/end and around method definition body.
|
|
9
|
-
# `
|
|
9
|
+
# `Layout/EmptyLinesAroundBeginBody` or `Layout/EmptyLinesAroundMethodBody`
|
|
10
10
|
# can be used for this purpose.
|
|
11
11
|
#
|
|
12
12
|
# @example
|
|
@@ -72,8 +72,7 @@ module RuboCop
|
|
|
72
72
|
alias on_numblock on_def
|
|
73
73
|
|
|
74
74
|
def on_kwbegin(node)
|
|
75
|
-
|
|
76
|
-
check_body(body, node.loc.line)
|
|
75
|
+
check_body(node.children.first, node.loc.line)
|
|
77
76
|
end
|
|
78
77
|
|
|
79
78
|
private
|
|
@@ -128,10 +127,10 @@ module RuboCop
|
|
|
128
127
|
end
|
|
129
128
|
|
|
130
129
|
def keyword_locations_in_ensure(node)
|
|
131
|
-
|
|
130
|
+
rescue_body_without_ensure = node.children.first
|
|
132
131
|
[
|
|
133
132
|
node.loc.keyword,
|
|
134
|
-
*keyword_locations(
|
|
133
|
+
*keyword_locations(rescue_body_without_ensure)
|
|
135
134
|
]
|
|
136
135
|
end
|
|
137
136
|
end
|