rubocop 0.78.0 → 1.13.0
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 +69 -39
- data/assets/output.html.erb +1 -1
- data/config/default.yml +1034 -139
- data/config/obsoletion.yml +200 -0
- data/exe/rubocop +2 -4
- data/lib/rubocop.rb +139 -66
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cached_data.rb +4 -4
- data/lib/rubocop/cli.rb +19 -13
- data/lib/rubocop/cli/command.rb +1 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +46 -19
- data/lib/rubocop/cli/command/base.rb +2 -0
- data/lib/rubocop/cli/command/execute_runner.rb +36 -12
- data/lib/rubocop/cli/command/init_dotfile.rb +3 -4
- data/lib/rubocop/cli/command/show_cops.rb +14 -13
- data/lib/rubocop/cli/command/suggest_extensions.rb +81 -0
- data/lib/rubocop/cli/command/version.rb +3 -2
- data/lib/rubocop/cli/environment.rb +1 -0
- data/lib/rubocop/comment_config.rb +54 -98
- data/lib/rubocop/config.rb +76 -34
- data/lib/rubocop/config_loader.rb +118 -114
- data/lib/rubocop/config_loader_resolver.rb +99 -28
- data/lib/rubocop/config_obsoletion.rb +67 -239
- data/lib/rubocop/config_obsoletion/changed_enforced_styles.rb +33 -0
- data/lib/rubocop/config_obsoletion/changed_parameter.rb +21 -0
- data/lib/rubocop/config_obsoletion/cop_rule.rb +33 -0
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +44 -0
- data/lib/rubocop/config_obsoletion/parameter_rule.rb +44 -0
- data/lib/rubocop/config_obsoletion/removed_cop.rb +41 -0
- data/lib/rubocop/config_obsoletion/renamed_cop.rb +34 -0
- data/lib/rubocop/config_obsoletion/rule.rb +41 -0
- data/lib/rubocop/config_obsoletion/split_cop.rb +27 -0
- data/lib/rubocop/config_regeneration.rb +33 -0
- data/lib/rubocop/config_store.rb +31 -7
- data/lib/rubocop/config_validator.rb +89 -103
- data/lib/rubocop/cop/autocorrect_logic.rb +41 -39
- data/lib/rubocop/cop/badge.rb +16 -32
- data/lib/rubocop/cop/base.rb +450 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +30 -6
- data/lib/rubocop/cop/bundler/gem_comment.rb +117 -8
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +13 -20
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -4
- data/lib/rubocop/cop/commissioner.rb +98 -74
- data/lib/rubocop/cop/cop.rb +84 -234
- data/lib/rubocop/cop/corrector.rb +63 -117
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +13 -23
- data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -6
- data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +2 -4
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
- data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +9 -12
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +35 -6
- data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +10 -21
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +6 -8
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/documentation.rb +22 -0
- data/lib/rubocop/cop/exclude_limit.rb +26 -0
- data/lib/rubocop/cop/force.rb +2 -1
- data/lib/rubocop/cop/gemspec/date_assignment.rb +57 -0
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +6 -5
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +4 -8
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +48 -20
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +4 -2
- data/lib/rubocop/cop/generator.rb +14 -25
- data/lib/rubocop/cop/generator/configuration_injector.rb +5 -6
- data/lib/rubocop/cop/generator/require_file_injector.rb +2 -5
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/internal_affairs.rb +7 -1
- data/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +68 -0
- data/lib/rubocop/cop/internal_affairs/example_description.rb +92 -0
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +8 -17
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +4 -4
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +151 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +12 -10
- data/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +62 -0
- data/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +65 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +12 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +11 -8
- data/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +148 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +6 -6
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +12 -10
- data/lib/rubocop/cop/layout/argument_alignment.rb +8 -9
- data/lib/rubocop/cop/layout/array_alignment.rb +58 -13
- data/lib/rubocop/cop/layout/assignment_indentation.rb +8 -7
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +74 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +35 -43
- data/lib/rubocop/cop/layout/block_end_newline.rb +9 -11
- data/lib/rubocop/cop/layout/case_indentation.rb +22 -28
- data/lib/rubocop/cop/layout/class_structure.rb +58 -74
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +18 -30
- data/lib/rubocop/cop/layout/comment_indentation.rb +21 -25
- data/lib/rubocop/cop/layout/condition_position.rb +16 -8
- data/lib/rubocop/cop/layout/def_end_alignment.rb +9 -10
- data/lib/rubocop/cop/layout/dot_position.rb +20 -21
- data/lib/rubocop/cop/layout/else_alignment.rb +28 -6
- data/lib/rubocop/cop/layout/empty_comment.rb +29 -29
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +39 -22
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +140 -39
- data/lib/rubocop/cop/layout/empty_lines.rb +7 -12
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +29 -38
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +13 -9
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +118 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +4 -14
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +18 -24
- data/lib/rubocop/cop/layout/end_of_line.rb +8 -8
- data/lib/rubocop/cop/layout/extra_spacing.rb +23 -42
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +40 -13
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +24 -18
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +4 -8
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +25 -21
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +3 -7
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +6 -13
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +3 -7
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +8 -7
- data/lib/rubocop/cop/layout/hash_alignment.rb +37 -40
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +46 -30
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +33 -117
- data/lib/rubocop/cop/layout/indentation_consistency.rb +9 -6
- data/lib/rubocop/cop/layout/indentation_style.rb +110 -0
- data/lib/rubocop/cop/layout/indentation_width.rb +22 -14
- data/lib/rubocop/cop/layout/initial_indentation.rb +7 -11
- data/lib/rubocop/cop/layout/leading_comment_space.rb +46 -13
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
- data/lib/rubocop/cop/layout/line_length.rb +61 -42
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +3 -7
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +36 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +51 -38
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -9
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +3 -7
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +6 -13
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +30 -19
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +23 -9
- data/lib/rubocop/cop/layout/parameter_alignment.rb +6 -5
- data/lib/rubocop/cop/layout/redundant_line_break.rb +125 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +37 -30
- data/lib/rubocop/cop/layout/space_after_colon.rb +10 -8
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
- data/lib/rubocop/cop/layout/space_after_method_name.rb +7 -10
- data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +45 -52
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +19 -23
- data/lib/rubocop/cop/layout/space_around_keyword.rb +22 -26
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +98 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +59 -25
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +41 -25
- data/lib/rubocop/cop/layout/space_before_brackets.rb +65 -0
- data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +8 -9
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +17 -15
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +11 -21
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +30 -39
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +5 -15
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +34 -39
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +22 -48
- data/lib/rubocop/cop/layout/space_inside_parens.rb +39 -22
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +9 -18
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +18 -29
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +42 -18
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +43 -0
- data/lib/rubocop/cop/legacy/corrector.rb +27 -0
- data/lib/rubocop/cop/lint/ambiguous_assignment.rb +54 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +21 -9
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +53 -5
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +36 -6
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +55 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +24 -4
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +100 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/debugger.rb +61 -21
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -14
- data/lib/rubocop/cop/lint/deprecated_constants.rb +80 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +148 -0
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
- data/lib/rubocop/cop/lint/duplicate_branch.rb +154 -0
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +3 -13
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +2 -4
- data/lib/rubocop/cop/lint/duplicate_methods.rb +12 -16
- data/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb +77 -0
- data/lib/rubocop/cop/lint/duplicate_require.rb +47 -0
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +47 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +3 -1
- data/lib/rubocop/cop/lint/else_layout.rb +29 -5
- data/lib/rubocop/cop/lint/empty_block.rb +82 -0
- data/lib/rubocop/cop/lint/empty_class.rb +93 -0
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -7
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_file.rb +48 -0
- data/lib/rubocop/cop/lint/empty_interpolation.rb +4 -7
- data/lib/rubocop/cop/lint/empty_when.rb +31 -8
- data/lib/rubocop/cop/lint/ensure_return.rb +29 -16
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +19 -21
- data/lib/rubocop/cop/lint/flip_flop.rb +9 -3
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -3
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +45 -10
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +38 -0
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +14 -16
- data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +7 -7
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +14 -20
- data/lib/rubocop/cop/lint/inherit_exception.rb +14 -9
- data/lib/rubocop/cop/lint/interpolation_check.rb +20 -7
- data/lib/rubocop/cop/lint/lambda_without_literal_block.rb +44 -0
- data/lib/rubocop/cop/lint/literal_as_condition.rb +24 -15
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +44 -15
- data/lib/rubocop/cop/lint/loop.rb +31 -9
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +9 -12
- data/lib/rubocop/cop/lint/missing_super.rb +101 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +36 -0
- data/lib/rubocop/cop/lint/multiple_comparison.rb +15 -15
- data/lib/rubocop/cop/lint/nested_method_definition.rb +21 -25
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +17 -5
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -1
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +58 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +95 -15
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +12 -9
- data/lib/rubocop/cop/lint/number_conversion.rb +97 -23
- data/lib/rubocop/cop/lint/numbered_parameter_assignment.rb +47 -0
- data/lib/rubocop/cop/lint/or_assignment_to_constant.rb +39 -0
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +12 -15
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +96 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +31 -12
- data/lib/rubocop/cop/lint/percent_string_array.rb +6 -11
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +12 -13
- data/lib/rubocop/cop/lint/raise_exception.rb +87 -0
- data/lib/rubocop/cop/lint/rand_one.rb +5 -4
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +71 -75
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +51 -37
- data/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb +50 -0
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +9 -10
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +77 -0
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +72 -35
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +8 -15
- data/lib/rubocop/cop/lint/redundant_with_index.rb +13 -18
- data/lib/rubocop/cop/lint/redundant_with_object.rb +13 -18
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -2
- data/lib/rubocop/cop/lint/require_parentheses.rb +4 -6
- data/lib/rubocop/cop/lint/rescue_exception.rb +3 -4
- data/lib/rubocop/cop/lint/rescue_type.rb +10 -16
- data/lib/rubocop/cop/lint/return_in_void_context.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +6 -9
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +15 -17
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +12 -4
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +11 -19
- data/lib/rubocop/cop/lint/shadowed_argument.rb +8 -14
- data/lib/rubocop/cop/lint/shadowed_exception.rb +18 -30
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +21 -7
- data/lib/rubocop/cop/lint/struct_new_override.rb +59 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +55 -18
- data/lib/rubocop/cop/lint/symbol_conversion.rb +188 -0
- data/lib/rubocop/cop/lint/syntax.rb +11 -30
- data/lib/rubocop/cop/lint/to_enum_arguments.rb +89 -0
- data/lib/rubocop/cop/lint/to_json.rb +21 -13
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +55 -0
- data/lib/rubocop/cop/lint/triple_quotes.rb +71 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +5 -7
- data/lib/rubocop/cop/lint/unexpected_block_arity.rb +85 -0
- data/lib/rubocop/cop/lint/unified_integer.rb +5 -8
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +204 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +5 -7
- data/lib/rubocop/cop/lint/unreachable_loop.rb +186 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +12 -11
- data/lib/rubocop/cop/lint/unused_method_argument.rb +42 -11
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +5 -2
- data/lib/rubocop/cop/lint/uri_regexp.rb +12 -47
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +38 -22
- data/lib/rubocop/cop/lint/useless_assignment.rb +9 -13
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +7 -11
- data/lib/rubocop/cop/lint/useless_method_definition.rb +68 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +15 -9
- data/lib/rubocop/cop/lint/useless_times.rb +109 -0
- data/lib/rubocop/cop/lint/void.rb +7 -18
- data/lib/rubocop/cop/message_annotator.rb +5 -4
- data/lib/rubocop/cop/metrics/abc_size.rb +26 -2
- data/lib/rubocop/cop/metrics/block_length.rb +40 -10
- data/lib/rubocop/cop/metrics/block_nesting.rb +5 -10
- data/lib/rubocop/cop/metrics/class_length.rb +40 -11
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +38 -6
- data/lib/rubocop/cop/metrics/method_length.rb +32 -4
- data/lib/rubocop/cop/metrics/module_length.rb +29 -9
- data/lib/rubocop/cop/metrics/parameter_lists.rb +74 -11
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -9
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +76 -15
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +160 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
- data/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb +143 -0
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +42 -0
- data/lib/rubocop/cop/migration/department_name.rb +51 -16
- data/lib/rubocop/cop/mixin/alignment.rb +18 -11
- data/lib/rubocop/cop/mixin/allowed_identifiers.rb +18 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +21 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +2 -4
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +26 -18
- data/lib/rubocop/cop/mixin/code_length.rb +29 -8
- data/lib/rubocop/cop/mixin/comments_help.rb +42 -0
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +7 -5
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +4 -11
- data/lib/rubocop/cop/mixin/configurable_max.rb +1 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +4 -3
- data/lib/rubocop/cop/mixin/def_node.rb +3 -5
- data/lib/rubocop/cop/mixin/documentation_comment.rb +4 -7
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +14 -14
- data/lib/rubocop/cop/mixin/empty_parameter.rb +2 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +16 -2
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +16 -8
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -3
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +12 -9
- data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +3 -6
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +183 -0
- data/lib/rubocop/cop/mixin/ignored_methods.rb +36 -3
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
- data/lib/rubocop/cop/mixin/interpolation.rb +1 -3
- data/lib/rubocop/cop/mixin/line_length_help.rb +17 -15
- data/lib/rubocop/cop/mixin/match_range.rb +2 -5
- data/lib/rubocop/cop/mixin/method_complexity.rb +26 -6
- data/lib/rubocop/cop/mixin/method_preference.rb +1 -2
- data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +4 -3
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +13 -42
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +14 -14
- data/lib/rubocop/cop/mixin/negative_conditional.rb +6 -4
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +7 -5
- data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +14 -9
- data/lib/rubocop/cop/mixin/percent_literal.rb +0 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +6 -12
- data/lib/rubocop/cop/mixin/preferred_delimiters.rb +6 -9
- data/lib/rubocop/cop/mixin/range_help.rb +24 -13
- data/lib/rubocop/cop/mixin/rational_literal.rb +1 -0
- data/lib/rubocop/cop/mixin/rescue_node.rb +13 -7
- data/lib/rubocop/cop/mixin/safe_assignment.rb +6 -2
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +6 -7
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +5 -5
- data/lib/rubocop/cop/mixin/statement_modifier.rb +45 -22
- data/lib/rubocop/cop/mixin/string_help.rb +4 -1
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +15 -31
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
- data/lib/rubocop/cop/mixin/trailing_body.rb +1 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +15 -27
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +25 -32
- data/lib/rubocop/cop/mixin/unused_argument.rb +5 -9
- data/lib/rubocop/cop/mixin/visibility_help.rb +37 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +19 -3
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -8
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +17 -7
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +13 -3
- data/lib/rubocop/cop/naming/constant_name.rb +5 -2
- data/lib/rubocop/cop/naming/file_name.rb +36 -34
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +12 -6
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +4 -4
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +132 -24
- data/lib/rubocop/cop/naming/method_name.rb +31 -3
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +10 -13
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +59 -15
- data/lib/rubocop/cop/naming/variable_name.rb +3 -1
- data/lib/rubocop/cop/naming/variable_number.rb +94 -9
- data/lib/rubocop/cop/offense.rb +35 -12
- data/lib/rubocop/cop/registry.rb +100 -24
- data/lib/rubocop/cop/security/eval.rb +4 -2
- data/lib/rubocop/cop/security/json_load.rb +8 -8
- data/lib/rubocop/cop/security/marshal_load.rb +4 -4
- data/lib/rubocop/cop/security/open.rb +15 -11
- data/lib/rubocop/cop/security/yaml_load.rb +8 -6
- data/lib/rubocop/cop/severity.rb +4 -14
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +37 -13
- data/lib/rubocop/cop/style/accessor_grouping.rb +150 -0
- data/lib/rubocop/cop/style/alias.rb +46 -45
- data/lib/rubocop/cop/style/and_or.rb +30 -23
- data/lib/rubocop/cop/style/arguments_forwarding.rb +143 -0
- data/lib/rubocop/cop/style/array_coercion.rb +69 -0
- data/lib/rubocop/cop/style/array_join.rb +9 -9
- data/lib/rubocop/cop/style/ascii_comments.rb +6 -7
- data/lib/rubocop/cop/style/attr.rb +15 -15
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +9 -12
- data/lib/rubocop/cop/style/bare_percent_literals.rb +12 -14
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +125 -0
- data/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb +60 -0
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +77 -26
- data/lib/rubocop/cop/style/case_equality.rb +55 -4
- data/lib/rubocop/cop/style/case_like_if.rb +258 -0
- data/lib/rubocop/cop/style/character_literal.rb +12 -15
- data/lib/rubocop/cop/style/class_and_module_children.rb +28 -21
- data/lib/rubocop/cop/style/class_check.rb +6 -11
- data/lib/rubocop/cop/style/class_equality_comparison.rb +67 -0
- data/lib/rubocop/cop/style/class_methods.rb +8 -14
- data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
- data/lib/rubocop/cop/style/class_vars.rb +23 -7
- data/lib/rubocop/cop/style/collection_compact.rb +91 -0
- data/lib/rubocop/cop/style/collection_methods.rb +24 -15
- data/lib/rubocop/cop/style/colon_method_call.rb +7 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/combinable_loops.rb +92 -0
- data/lib/rubocop/cop/style/command_literal.rb +22 -28
- data/lib/rubocop/cop/style/comment_annotation.rb +24 -21
- data/lib/rubocop/cop/style/commented_keyword.rb +34 -21
- data/lib/rubocop/cop/style/conditional_assignment.rb +75 -91
- data/lib/rubocop/cop/style/constant_visibility.rb +31 -2
- data/lib/rubocop/cop/style/copyright.rb +21 -24
- data/lib/rubocop/cop/style/date_time.rb +16 -5
- data/lib/rubocop/cop/style/def_with_parentheses.rb +9 -12
- data/lib/rubocop/cop/style/dir.rb +11 -12
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +87 -0
- data/lib/rubocop/cop/style/document_dynamic_eval_definition.rb +169 -0
- data/lib/rubocop/cop/style/documentation.rb +92 -18
- data/lib/rubocop/cop/style/documentation_method.rb +2 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +50 -6
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +7 -10
- data/lib/rubocop/cop/style/each_with_object.rb +17 -19
- data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_case_condition.rb +22 -26
- data/lib/rubocop/cop/style/empty_else.rb +14 -22
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_literal.rb +39 -31
- data/lib/rubocop/cop/style/empty_method.rb +12 -23
- data/lib/rubocop/cop/style/encoding.rb +6 -10
- data/lib/rubocop/cop/style/end_block.rb +7 -4
- data/lib/rubocop/cop/style/endless_method.rb +101 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +143 -54
- data/lib/rubocop/cop/style/even_odd.rb +9 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +27 -25
- data/lib/rubocop/cop/style/explicit_block_argument.rb +114 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +116 -0
- data/lib/rubocop/cop/style/float_division.rb +60 -11
- data/lib/rubocop/cop/style/for.rb +7 -13
- data/lib/rubocop/cop/style/format_string.rb +30 -24
- data/lib/rubocop/cop/style/format_string_token.rb +78 -22
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +83 -38
- data/lib/rubocop/cop/style/global_std_stream.rb +66 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +32 -13
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +88 -0
- data/lib/rubocop/cop/style/hash_conversion.rb +133 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +86 -0
- data/lib/rubocop/cop/style/hash_except.rb +96 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +77 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +50 -45
- data/lib/rubocop/cop/style/hash_transform_keys.rb +95 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +92 -0
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +10 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +50 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +76 -46
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +11 -3
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +122 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +51 -3
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +3 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +27 -26
- data/lib/rubocop/cop/style/inline_comment.rb +4 -4
- data/lib/rubocop/cop/style/inverse_methods.rb +34 -42
- data/lib/rubocop/cop/style/ip_addresses.rb +3 -4
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +75 -0
- data/lib/rubocop/cop/style/lambda.rb +11 -17
- data/lib/rubocop/cop/style/lambda_call.rb +18 -35
- data/lib/rubocop/cop/style/line_end_concatenation.rb +21 -25
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +58 -207
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +189 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +44 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +19 -12
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +14 -7
- data/lib/rubocop/cop/style/method_def_parentheses.rb +18 -24
- data/lib/rubocop/cop/style/min_max.rb +10 -14
- data/lib/rubocop/cop/style/missing_else.rb +13 -25
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +11 -5
- data/lib/rubocop/cop/style/mixin_grouping.rb +27 -40
- data/lib/rubocop/cop/style/mixin_usage.rb +12 -30
- data/lib/rubocop/cop/style/module_function.rb +70 -25
- data/lib/rubocop/cop/style/multiline_block_chain.rb +13 -5
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +4 -11
- data/lib/rubocop/cop/style/multiline_if_then.rb +5 -11
- data/lib/rubocop/cop/style/multiline_memoization.rb +15 -13
- data/lib/rubocop/cop/style/multiline_method_signature.rb +33 -3
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +32 -11
- data/lib/rubocop/cop/style/multiline_when_then.rb +31 -11
- data/lib/rubocop/cop/style/multiple_comparison.rb +76 -11
- data/lib/rubocop/cop/style/mutable_constant.rb +41 -33
- data/lib/rubocop/cop/style/negated_if.rb +10 -11
- data/lib/rubocop/cop/style/negated_if_else_condition.rb +120 -0
- data/lib/rubocop/cop/style/negated_unless.rb +10 -11
- data/lib/rubocop/cop/style/negated_while.rb +7 -15
- data/lib/rubocop/cop/style/nested_modifier.rb +10 -17
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +23 -20
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +30 -4
- data/lib/rubocop/cop/style/next.rb +18 -27
- data/lib/rubocop/cop/style/nil_comparison.rb +19 -11
- data/lib/rubocop/cop/style/nil_lambda.rb +53 -0
- data/lib/rubocop/cop/style/non_nil_check.rb +56 -34
- data/lib/rubocop/cop/style/not.rb +20 -26
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +6 -11
- data/lib/rubocop/cop/style/numeric_literals.rb +19 -27
- data/lib/rubocop/cop/style/numeric_predicate.rb +17 -24
- data/lib/rubocop/cop/style/one_line_conditional.rb +75 -29
- data/lib/rubocop/cop/style/option_hash.rb +3 -4
- data/lib/rubocop/cop/style/optional_arguments.rb +4 -7
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +53 -0
- data/lib/rubocop/cop/style/or_assignment.rb +14 -12
- data/lib/rubocop/cop/style/parallel_assignment.rb +27 -24
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +7 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +22 -30
- data/lib/rubocop/cop/style/percent_q_literals.rb +9 -12
- data/lib/rubocop/cop/style/perl_backrefs.rb +84 -16
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +12 -18
- data/lib/rubocop/cop/style/proc.rb +8 -8
- data/lib/rubocop/cop/style/raise_args.rb +39 -37
- data/lib/rubocop/cop/style/random_with_offset.rb +30 -35
- data/lib/rubocop/cop/style/redundant_argument.rb +85 -0
- data/lib/rubocop/cop/style/redundant_assignment.rb +106 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +79 -13
- data/lib/rubocop/cop/style/redundant_capital_w.rb +7 -11
- data/lib/rubocop/cop/style/redundant_condition.rb +43 -18
- data/lib/rubocop/cop/style/redundant_conditional.rb +14 -15
- data/lib/rubocop/cop/style/redundant_exception.rb +22 -17
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +115 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +52 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +16 -14
- data/lib/rubocop/cop/style/redundant_interpolation.rb +32 -27
- data/lib/rubocop/cop/style/redundant_parentheses.rb +51 -38
- data/lib/rubocop/cop/style/redundant_percent_q.rb +14 -17
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +104 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +118 -0
- data/lib/rubocop/cop/style/redundant_return.rb +29 -29
- data/lib/rubocop/cop/style/redundant_self.rb +27 -29
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +118 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +32 -37
- data/lib/rubocop/cop/style/redundant_sort_by.rb +6 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +14 -29
- data/lib/rubocop/cop/style/rescue_modifier.rb +39 -12
- data/lib/rubocop/cop/style/rescue_standard_error.rb +25 -23
- data/lib/rubocop/cop/style/return_nil.rb +13 -8
- data/lib/rubocop/cop/style/safe_navigation.rb +44 -39
- data/lib/rubocop/cop/style/sample.rb +14 -15
- data/lib/rubocop/cop/style/self_assignment.rb +26 -22
- data/lib/rubocop/cop/style/semicolon.rb +10 -10
- data/lib/rubocop/cop/style/send.rb +5 -7
- data/lib/rubocop/cop/style/signal_exception.rb +32 -27
- data/lib/rubocop/cop/style/single_argument_dig.rb +55 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +34 -12
- data/lib/rubocop/cop/style/single_line_methods.rb +65 -18
- data/lib/rubocop/cop/style/slicing_with_range.rb +38 -0
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +167 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +18 -51
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +18 -25
- data/lib/rubocop/cop/style/static_class.rb +97 -0
- data/lib/rubocop/cop/style/stderr_puts.rb +9 -13
- data/lib/rubocop/cop/style/string_chars.rb +39 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +142 -0
- data/lib/rubocop/cop/style/string_hash_keys.rb +8 -7
- data/lib/rubocop/cop/style/string_literals.rb +16 -13
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +4 -3
- data/lib/rubocop/cop/style/string_methods.rb +7 -17
- data/lib/rubocop/cop/style/strip.rb +10 -14
- data/lib/rubocop/cop/style/struct_inheritance.rb +33 -4
- data/lib/rubocop/cop/style/swap_values.rb +108 -0
- data/lib/rubocop/cop/style/symbol_array.rb +13 -24
- data/lib/rubocop/cop/style/symbol_literal.rb +5 -9
- data/lib/rubocop/cop/style/symbol_proc.rb +50 -32
- data/lib/rubocop/cop/style/ternary_parentheses.rb +30 -35
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +10 -9
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +37 -27
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +43 -5
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +86 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +46 -5
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +12 -38
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +16 -31
- data/lib/rubocop/cop/style/trivial_accessors.rb +36 -40
- data/lib/rubocop/cop/style/unless_else.rb +7 -11
- data/lib/rubocop/cop/style/unless_logical_operators.rb +105 -0
- data/lib/rubocop/cop/style/unpack_first.rb +5 -11
- data/lib/rubocop/cop/style/variable_interpolation.rb +8 -11
- data/lib/rubocop/cop/style/when_then.rb +5 -9
- data/lib/rubocop/cop/style/while_until_do.rb +6 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +16 -24
- data/lib/rubocop/cop/style/word_array.rb +6 -25
- data/lib/rubocop/cop/style/yoda_condition.rb +33 -19
- data/lib/rubocop/cop/style/zero_length_predicate.rb +25 -23
- data/lib/rubocop/cop/team.rb +147 -84
- data/lib/rubocop/cop/util.rb +43 -27
- data/lib/rubocop/cop/utils/format_string.rb +22 -9
- data/lib/rubocop/cop/variable_force.rb +15 -27
- data/lib/rubocop/cop/variable_force/assignment.rb +2 -2
- data/lib/rubocop/cop/variable_force/branch.rb +3 -9
- data/lib/rubocop/cop/variable_force/reference.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +6 -9
- data/lib/rubocop/cop/variable_force/variable.rb +9 -12
- data/lib/rubocop/cops_documentation_generator.rb +270 -0
- data/lib/rubocop/core_ext/string.rb +2 -2
- data/lib/rubocop/directive_comment.rb +92 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/ext/regexp_node.rb +87 -0
- data/lib/rubocop/ext/regexp_parser.rb +92 -0
- data/lib/rubocop/file_finder.rb +12 -13
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/base_formatter.rb +0 -4
- data/lib/rubocop/formatter/clang_style_formatter.rb +5 -3
- data/lib/rubocop/formatter/disabled_config_formatter.rb +39 -30
- data/lib/rubocop/formatter/emacs_style_formatter.rb +2 -0
- data/lib/rubocop/formatter/formatter_set.rb +6 -6
- data/lib/rubocop/formatter/git_hub_actions_formatter.rb +44 -0
- data/lib/rubocop/formatter/html_formatter.rb +6 -10
- data/lib/rubocop/formatter/json_formatter.rb +1 -5
- data/lib/rubocop/formatter/junit_formatter.rb +78 -0
- data/lib/rubocop/formatter/offense_count_formatter.rb +2 -2
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/formatter/progress_formatter.rb +3 -4
- data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +40 -7
- data/lib/rubocop/formatter/tap_formatter.rb +7 -3
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -2
- data/lib/rubocop/lockfile.rb +40 -0
- data/lib/rubocop/magic_comment.rb +33 -4
- data/lib/rubocop/name_similarity.rb +18 -10
- data/lib/rubocop/options.rb +124 -77
- data/lib/rubocop/path_util.rb +20 -22
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/rake_task.rb +12 -11
- data/lib/rubocop/remote_config.rb +6 -10
- data/lib/rubocop/result_cache.rb +50 -31
- data/lib/rubocop/rspec/cop_helper.rb +11 -35
- data/lib/rubocop/rspec/expect_offense.rb +129 -40
- data/lib/rubocop/rspec/shared_contexts.rb +78 -35
- data/lib/rubocop/runner.rb +112 -75
- data/lib/rubocop/string_interpreter.rb +3 -0
- data/lib/rubocop/target_finder.rb +53 -50
- data/lib/rubocop/target_ruby.rb +264 -0
- data/lib/rubocop/util.rb +16 -0
- data/lib/rubocop/version.rb +71 -7
- data/lib/rubocop/yaml_duplication_checker.rb +1 -0
- metadata +208 -94
- data/bin/console +0 -10
- data/bin/setup +0 -7
- data/lib/rubocop/ast/builder.rb +0 -82
- data/lib/rubocop/ast/node.rb +0 -644
- data/lib/rubocop/ast/node/alias_node.rb +0 -24
- data/lib/rubocop/ast/node/and_node.rb +0 -29
- data/lib/rubocop/ast/node/args_node.rb +0 -29
- data/lib/rubocop/ast/node/array_node.rb +0 -57
- data/lib/rubocop/ast/node/block_node.rb +0 -117
- data/lib/rubocop/ast/node/break_node.rb +0 -17
- data/lib/rubocop/ast/node/case_node.rb +0 -56
- data/lib/rubocop/ast/node/class_node.rb +0 -31
- data/lib/rubocop/ast/node/def_node.rb +0 -71
- data/lib/rubocop/ast/node/defined_node.rb +0 -17
- data/lib/rubocop/ast/node/ensure_node.rb +0 -17
- data/lib/rubocop/ast/node/float_node.rb +0 -12
- data/lib/rubocop/ast/node/for_node.rb +0 -53
- data/lib/rubocop/ast/node/hash_node.rb +0 -109
- data/lib/rubocop/ast/node/if_node.rb +0 -175
- data/lib/rubocop/ast/node/int_node.rb +0 -12
- data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
- data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
- data/lib/rubocop/ast/node/module_node.rb +0 -24
- data/lib/rubocop/ast/node/or_node.rb +0 -29
- data/lib/rubocop/ast/node/pair_node.rb +0 -63
- data/lib/rubocop/ast/node/range_node.rb +0 -18
- data/lib/rubocop/ast/node/regexp_node.rb +0 -35
- data/lib/rubocop/ast/node/resbody_node.rb +0 -24
- data/lib/rubocop/ast/node/retry_node.rb +0 -17
- data/lib/rubocop/ast/node/return_node.rb +0 -24
- data/lib/rubocop/ast/node/self_class_node.rb +0 -24
- data/lib/rubocop/ast/node/send_node.rb +0 -13
- data/lib/rubocop/ast/node/str_node.rb +0 -16
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/symbol_node.rb +0 -12
- data/lib/rubocop/ast/node/until_node.rb +0 -35
- data/lib/rubocop/ast/node/when_node.rb +0 -53
- data/lib/rubocop/ast/node/while_node.rb +0 -35
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -183
- data/lib/rubocop/cop/layout/tab.rb +0 -75
- data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -35
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +0 -209
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
- data/lib/rubocop/node_pattern.rb +0 -801
- data/lib/rubocop/processed_source.rb +0 -216
- data/lib/rubocop/string_util.rb +0 -14
- data/lib/rubocop/token.rb +0 -114
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module AST
|
5
|
-
# Common functionality for nodes that are binary operations:
|
6
|
-
# `or`, `and` ...
|
7
|
-
module BinaryOperatorNode
|
8
|
-
# Returns the left hand side node of the binary operation.
|
9
|
-
#
|
10
|
-
# @return [Node] the left hand side of the binary operation
|
11
|
-
def lhs
|
12
|
-
node_parts[0]
|
13
|
-
end
|
14
|
-
|
15
|
-
# Returns the right hand side node of the binary operation.
|
16
|
-
#
|
17
|
-
# @return [Node] the right hand side of the binary operation
|
18
|
-
def rhs
|
19
|
-
node_parts[1]
|
20
|
-
end
|
21
|
-
|
22
|
-
# Returns all of the conditions, including nested conditions,
|
23
|
-
# of the binary operation.
|
24
|
-
#
|
25
|
-
# @return [Array<Node>] the left and right hand side of the binary
|
26
|
-
# operation and the let and right hand side of any nested binary
|
27
|
-
# operators
|
28
|
-
def conditions
|
29
|
-
lhs, rhs = *self
|
30
|
-
lhs = lhs.children.first if lhs.begin_type?
|
31
|
-
rhs = rhs.children.first if rhs.begin_type?
|
32
|
-
|
33
|
-
[lhs, rhs].each_with_object([]) do |side, collection|
|
34
|
-
if side.operator_keyword?
|
35
|
-
collection.concat(side.conditions)
|
36
|
-
else
|
37
|
-
collection << side
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module AST
|
5
|
-
# A mixin that helps give collection nodes array polymorphism.
|
6
|
-
module CollectionNode
|
7
|
-
extend Forwardable
|
8
|
-
|
9
|
-
ARRAY_METHODS =
|
10
|
-
(Array.instance_methods - Object.instance_methods - [:to_a]).freeze
|
11
|
-
|
12
|
-
def_delegators :to_a, *ARRAY_METHODS
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module AST
|
5
|
-
# Common functionality for nodes that have conditions:
|
6
|
-
# `if`, `while`, `until`, `case`.
|
7
|
-
# This currently doesn't include `when` nodes, because they have multiple
|
8
|
-
# conditions, and need to be checked for that.
|
9
|
-
module ConditionalNode
|
10
|
-
# Checks whether the condition of the node is written on a single line.
|
11
|
-
#
|
12
|
-
# @return [Boolean] whether the condition is on a single line
|
13
|
-
def single_line_condition?
|
14
|
-
loc.keyword.line == condition.source_range.line
|
15
|
-
end
|
16
|
-
|
17
|
-
# Checks whether the condition of the node is written on more than
|
18
|
-
# one line.
|
19
|
-
#
|
20
|
-
# @return [Boolean] whether the condition is on more than one line
|
21
|
-
def multiline_condition?
|
22
|
-
!single_line_condition?
|
23
|
-
end
|
24
|
-
|
25
|
-
# Returns the condition of the node. This works together with each node's
|
26
|
-
# custom destructuring method to select the correct part of the node.
|
27
|
-
#
|
28
|
-
# @return [Node, nil] the condition of the node
|
29
|
-
def condition
|
30
|
-
node_parts[0]
|
31
|
-
end
|
32
|
-
|
33
|
-
# Returns the body associated with the condition. This works together with
|
34
|
-
# each node's custom destructuring method to select the correct part of
|
35
|
-
# the node.
|
36
|
-
#
|
37
|
-
# @note For `if` nodes, this is the truthy branch.
|
38
|
-
#
|
39
|
-
# @return [Node, nil] the body of the node
|
40
|
-
def body
|
41
|
-
node_parts[1]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,125 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module AST
|
5
|
-
# Common functionality for nodes that can be used as hash elements:
|
6
|
-
# `pair`, `kwsplat`
|
7
|
-
module HashElementNode
|
8
|
-
# Returns the key of this `hash` element.
|
9
|
-
#
|
10
|
-
# @note For keyword splats, this returns the whole node
|
11
|
-
#
|
12
|
-
# @return [Node] the key of the hash element
|
13
|
-
def key
|
14
|
-
node_parts[0]
|
15
|
-
end
|
16
|
-
|
17
|
-
# Returns the value of this `hash` element.
|
18
|
-
#
|
19
|
-
# @note For keyword splats, this returns the whole node
|
20
|
-
#
|
21
|
-
# @return [Node] the value of the hash element
|
22
|
-
def value
|
23
|
-
node_parts[1]
|
24
|
-
end
|
25
|
-
|
26
|
-
# Checks whether this `hash` element is on the same line as `other`.
|
27
|
-
#
|
28
|
-
# @note A multiline element is considered to be on the same line if it
|
29
|
-
# shares any of its lines with `other`
|
30
|
-
#
|
31
|
-
# @return [Boolean] whether this element is on the same line as `other`
|
32
|
-
def same_line?(other)
|
33
|
-
loc.last_line == other.loc.line || loc.line == other.loc.last_line
|
34
|
-
end
|
35
|
-
|
36
|
-
# Returns the delta between this pair's key and the argument pair's.
|
37
|
-
#
|
38
|
-
# @note Keys on the same line always return a delta of 0
|
39
|
-
# @note Keyword splats always return a delta of 0 for right alignment
|
40
|
-
#
|
41
|
-
# @param [Symbol] alignment whether to check the left or right side
|
42
|
-
# @return [Integer] the delta between the two keys
|
43
|
-
def key_delta(other, alignment = :left)
|
44
|
-
HashElementDelta.new(self, other).key_delta(alignment)
|
45
|
-
end
|
46
|
-
|
47
|
-
# Returns the delta between this element's value and the argument's.
|
48
|
-
#
|
49
|
-
# @note Keyword splats always return a delta of 0
|
50
|
-
#
|
51
|
-
# @return [Integer] the delta between the two values
|
52
|
-
def value_delta(other)
|
53
|
-
HashElementDelta.new(self, other).value_delta
|
54
|
-
end
|
55
|
-
|
56
|
-
# Returns the delta between this element's delimiter and the argument's.
|
57
|
-
#
|
58
|
-
# @note Pairs with different delimiter styles return a delta of 0
|
59
|
-
#
|
60
|
-
# @return [Integer] the delta between the two delimiters
|
61
|
-
def delimiter_delta(other)
|
62
|
-
HashElementDelta.new(self, other).delimiter_delta
|
63
|
-
end
|
64
|
-
|
65
|
-
# A helper class for comparing the positions of different parts of a
|
66
|
-
# `pair` node.
|
67
|
-
class HashElementDelta
|
68
|
-
def initialize(first, second)
|
69
|
-
@first = first
|
70
|
-
@second = second
|
71
|
-
|
72
|
-
raise ArgumentError unless valid_argument_types?
|
73
|
-
end
|
74
|
-
|
75
|
-
def key_delta(alignment = :left)
|
76
|
-
return 0 if first.same_line?(second)
|
77
|
-
return 0 if keyword_splat? && alignment == :right
|
78
|
-
|
79
|
-
delta(first.key.loc, second.key.loc, alignment)
|
80
|
-
end
|
81
|
-
|
82
|
-
def value_delta
|
83
|
-
return 0 if first.same_line?(second)
|
84
|
-
return 0 if keyword_splat?
|
85
|
-
|
86
|
-
delta(first.value.loc, second.value.loc)
|
87
|
-
end
|
88
|
-
|
89
|
-
def delimiter_delta
|
90
|
-
return 0 if first.same_line?(second)
|
91
|
-
return 0 if first.delimiter != second.delimiter
|
92
|
-
|
93
|
-
delta(first.loc.operator, second.loc.operator)
|
94
|
-
end
|
95
|
-
|
96
|
-
private
|
97
|
-
|
98
|
-
attr_reader :first, :second
|
99
|
-
|
100
|
-
def valid_argument_types?
|
101
|
-
[first, second].all? do |argument|
|
102
|
-
argument.pair_type? || argument.kwsplat_type?
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
def delta(first, second, alignment = :left)
|
107
|
-
case alignment
|
108
|
-
when :left
|
109
|
-
first.column - second.column
|
110
|
-
when :right
|
111
|
-
first.last_column - second.last_column
|
112
|
-
else
|
113
|
-
0
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def keyword_splat?
|
118
|
-
[first, second].any?(&:kwsplat_type?)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
private_constant :HashElementDelta
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,261 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module AST
|
5
|
-
# Common functionality for nodes that are a kind of method dispatch:
|
6
|
-
# `send`, `csend`, `super`, `zsuper`, `yield`, `defined?`
|
7
|
-
module MethodDispatchNode
|
8
|
-
extend NodePattern::Macros
|
9
|
-
include MethodIdentifierPredicates
|
10
|
-
|
11
|
-
ARITHMETIC_OPERATORS = %i[+ - * / % **].freeze
|
12
|
-
SPECIAL_MODIFIERS = %w[private protected].freeze
|
13
|
-
|
14
|
-
# The receiving node of the method dispatch.
|
15
|
-
#
|
16
|
-
# @return [Node, nil] the receiver of the dispatched method or `nil`
|
17
|
-
def receiver
|
18
|
-
node_parts[0]
|
19
|
-
end
|
20
|
-
|
21
|
-
# The name of the dispatched method as a symbol.
|
22
|
-
#
|
23
|
-
# @return [Symbol] the name of the dispatched method
|
24
|
-
def method_name
|
25
|
-
node_parts[1]
|
26
|
-
end
|
27
|
-
|
28
|
-
# An array containing the arguments of the dispatched method.
|
29
|
-
#
|
30
|
-
# @return [Array<Node>] the arguments of the dispatched method
|
31
|
-
def arguments
|
32
|
-
node_parts[2..-1]
|
33
|
-
end
|
34
|
-
|
35
|
-
# The `block` node associated with this method dispatch, if any.
|
36
|
-
#
|
37
|
-
# @return [BlockNode, nil] the `block` node associated with this method
|
38
|
-
# call or `nil`
|
39
|
-
def block_node
|
40
|
-
parent if block_literal?
|
41
|
-
end
|
42
|
-
|
43
|
-
# Checks whether the dispatched method is a macro method. A macro method
|
44
|
-
# is defined as a method that sits in a class, module, or block body and
|
45
|
-
# has an implicit receiver.
|
46
|
-
#
|
47
|
-
# @note This does not include DSLs that use nested blocks, like RSpec
|
48
|
-
#
|
49
|
-
# @return [Boolean] whether the dispatched method is a macro method
|
50
|
-
def macro?
|
51
|
-
!receiver && macro_scope?
|
52
|
-
end
|
53
|
-
|
54
|
-
# Checks whether the dispatched method is an access modifier.
|
55
|
-
#
|
56
|
-
# @return [Boolean] whether the dispatched method is an access modifier
|
57
|
-
def access_modifier?
|
58
|
-
bare_access_modifier? || non_bare_access_modifier?
|
59
|
-
end
|
60
|
-
|
61
|
-
# Checks whether the dispatched method is a bare access modifier that
|
62
|
-
# affects all methods defined after the macro.
|
63
|
-
#
|
64
|
-
# @return [Boolean] whether the dispatched method is a bare
|
65
|
-
# access modifier
|
66
|
-
def bare_access_modifier?
|
67
|
-
macro? && bare_access_modifier_declaration?
|
68
|
-
end
|
69
|
-
|
70
|
-
# Checks whether the dispatched method is a non-bare access modifier that
|
71
|
-
# affects only the method it receives.
|
72
|
-
#
|
73
|
-
# @return [Boolean] whether the dispatched method is a non-bare
|
74
|
-
# access modifier
|
75
|
-
def non_bare_access_modifier?
|
76
|
-
macro? && non_bare_access_modifier_declaration?
|
77
|
-
end
|
78
|
-
|
79
|
-
# Checks whether the dispatched method is a bare `private` or `protected`
|
80
|
-
# access modifier that affects all methods defined after the macro.
|
81
|
-
#
|
82
|
-
# @return [Boolean] whether the dispatched method is a bare
|
83
|
-
# `private` or `protected` access modifier
|
84
|
-
def special_modifier?
|
85
|
-
bare_access_modifier? && SPECIAL_MODIFIERS.include?(source)
|
86
|
-
end
|
87
|
-
|
88
|
-
# Checks whether the name of the dispatched method matches the argument
|
89
|
-
# and has an implicit receiver.
|
90
|
-
#
|
91
|
-
# @param [Symbol, String] name the method name to check for
|
92
|
-
# @return [Boolean] whether the method name matches the argument
|
93
|
-
def command?(name)
|
94
|
-
!receiver && method?(name)
|
95
|
-
end
|
96
|
-
|
97
|
-
# Checks whether the dispatched method is a setter method.
|
98
|
-
#
|
99
|
-
# @return [Boolean] whether the dispatched method is a setter
|
100
|
-
def setter_method?
|
101
|
-
loc.respond_to?(:operator) && loc.operator
|
102
|
-
end
|
103
|
-
alias assignment? setter_method?
|
104
|
-
|
105
|
-
# Checks whether the dispatched method uses a dot to connect the
|
106
|
-
# receiver and the method name.
|
107
|
-
#
|
108
|
-
# This is useful for comparison operators, which can be called either
|
109
|
-
# with or without a dot, i.e. `foo == bar` or `foo.== bar`.
|
110
|
-
#
|
111
|
-
# @return [Boolean] whether the method was called with a connecting dot
|
112
|
-
def dot?
|
113
|
-
loc.respond_to?(:dot) && loc.dot && loc.dot.is?('.')
|
114
|
-
end
|
115
|
-
|
116
|
-
# Checks whether the dispatched method uses a double colon to connect the
|
117
|
-
# receiver and the method name.
|
118
|
-
#
|
119
|
-
# @return [Boolean] whether the method was called with a connecting dot
|
120
|
-
def double_colon?
|
121
|
-
loc.respond_to?(:dot) && loc.dot && loc.dot.is?('::')
|
122
|
-
end
|
123
|
-
|
124
|
-
# Checks whether the *explicit* receiver of this method dispatch is
|
125
|
-
# `self`.
|
126
|
-
#
|
127
|
-
# @return [Boolean] whether the receiver of this method dispatch is `self`
|
128
|
-
def self_receiver?
|
129
|
-
receiver&.self_type?
|
130
|
-
end
|
131
|
-
|
132
|
-
# Checks whether the *explicit* receiver of this method dispatch is a
|
133
|
-
# `const` node.
|
134
|
-
#
|
135
|
-
# @return [Boolean] whether the receiver of this method dispatch
|
136
|
-
# is a `const` node
|
137
|
-
def const_receiver?
|
138
|
-
receiver&.const_type?
|
139
|
-
end
|
140
|
-
|
141
|
-
# Checks whether the method dispatch is the implicit form of `#call`,
|
142
|
-
# e.g. `foo.(bar)`.
|
143
|
-
#
|
144
|
-
# @return [Boolean] whether the method is the implicit form of `#call`
|
145
|
-
def implicit_call?
|
146
|
-
method?(:call) && !loc.selector
|
147
|
-
end
|
148
|
-
|
149
|
-
# Whether this method dispatch has an explicit block.
|
150
|
-
#
|
151
|
-
# @return [Boolean] whether the dispatched method has a block
|
152
|
-
def block_literal?
|
153
|
-
parent&.block_type? && eql?(parent.send_node)
|
154
|
-
end
|
155
|
-
|
156
|
-
# Checks whether this node is an arithmetic operation
|
157
|
-
#
|
158
|
-
# @return [Boolean] whether the dispatched method is an arithmetic
|
159
|
-
# operation
|
160
|
-
def arithmetic_operation?
|
161
|
-
ARITHMETIC_OPERATORS.include?(method_name)
|
162
|
-
end
|
163
|
-
|
164
|
-
# Checks if this node is part of a chain of `def` modifiers.
|
165
|
-
#
|
166
|
-
# @example
|
167
|
-
#
|
168
|
-
# private def foo; end
|
169
|
-
#
|
170
|
-
# @return [Boolean] whether the dispatched method is a `def` modifier
|
171
|
-
def def_modifier?
|
172
|
-
send_type? &&
|
173
|
-
[self, *each_descendant(:send)].any?(&:adjacent_def_modifier?)
|
174
|
-
end
|
175
|
-
|
176
|
-
# Checks whether this is a lambda. Some versions of parser parses
|
177
|
-
# non-literal lambdas as a method send.
|
178
|
-
#
|
179
|
-
# @return [Boolean] whether this method is a lambda
|
180
|
-
def lambda?
|
181
|
-
block_literal? && command?(:lambda)
|
182
|
-
end
|
183
|
-
|
184
|
-
# Checks whether this is a lambda literal (stabby lambda.)
|
185
|
-
#
|
186
|
-
# @example
|
187
|
-
#
|
188
|
-
# -> (foo) { bar }
|
189
|
-
#
|
190
|
-
# @return [Boolean] whether this method is a lambda literal
|
191
|
-
def lambda_literal?
|
192
|
-
block_literal? && loc.expression && loc.expression.source == '->'
|
193
|
-
end
|
194
|
-
|
195
|
-
# Checks whether this is a unary operation.
|
196
|
-
#
|
197
|
-
# @example
|
198
|
-
#
|
199
|
-
# -foo
|
200
|
-
#
|
201
|
-
# @return [Boolean] whether this method is a unary operation
|
202
|
-
def unary_operation?
|
203
|
-
return false unless loc.selector
|
204
|
-
|
205
|
-
operator_method? && loc.expression.begin_pos == loc.selector.begin_pos
|
206
|
-
end
|
207
|
-
|
208
|
-
# Checks whether this is a binary operation.
|
209
|
-
#
|
210
|
-
# @example
|
211
|
-
#
|
212
|
-
# foo + bar
|
213
|
-
#
|
214
|
-
# @return [Bookean] whether this method is a binary operation
|
215
|
-
def binary_operation?
|
216
|
-
return false unless loc.selector
|
217
|
-
|
218
|
-
operator_method? && loc.expression.begin_pos != loc.selector.begin_pos
|
219
|
-
end
|
220
|
-
|
221
|
-
private
|
222
|
-
|
223
|
-
def_node_matcher :macro_scope?, <<~PATTERN
|
224
|
-
{^{({sclass class module block} ...) class_constructor?}
|
225
|
-
^^{({sclass class module block} ... ({begin if} ...)) class_constructor?}
|
226
|
-
^#macro_kwbegin_wrapper?
|
227
|
-
#root_node?}
|
228
|
-
PATTERN
|
229
|
-
|
230
|
-
# Check if a node's parent is a kwbegin wrapper within a macro scope
|
231
|
-
#
|
232
|
-
# @param parent [Node] parent of the node being checked
|
233
|
-
#
|
234
|
-
# @return [Boolean] true if the parent is a kwbegin in a macro scope
|
235
|
-
def macro_kwbegin_wrapper?(parent)
|
236
|
-
parent.kwbegin_type? && macro_scope?(parent)
|
237
|
-
end
|
238
|
-
|
239
|
-
# Check if a node does not have a parent
|
240
|
-
#
|
241
|
-
# @param node [Node]
|
242
|
-
#
|
243
|
-
# @return [Boolean] if the parent is nil
|
244
|
-
def root_node?(node)
|
245
|
-
node.parent.nil?
|
246
|
-
end
|
247
|
-
|
248
|
-
def_node_matcher :adjacent_def_modifier?, <<~PATTERN
|
249
|
-
(send nil? _ ({def defs} ...))
|
250
|
-
PATTERN
|
251
|
-
|
252
|
-
def_node_matcher :bare_access_modifier_declaration?, <<~PATTERN
|
253
|
-
(send nil? {:public :protected :private :module_function})
|
254
|
-
PATTERN
|
255
|
-
|
256
|
-
def_node_matcher :non_bare_access_modifier_declaration?, <<~PATTERN
|
257
|
-
(send nil? {:public :protected :private :module_function} _)
|
258
|
-
PATTERN
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|