rubocop 1.80.2 → 1.86.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 +170 -19
- data/config/obsoletion.yml +9 -0
- data/lib/rubocop/cache_config.rb +29 -0
- data/lib/rubocop/cli/command/auto_generate_config.rb +3 -3
- data/lib/rubocop/cli/command/lsp.rb +1 -1
- data/lib/rubocop/cli/command/mcp.rb +19 -0
- data/lib/rubocop/cli/command/show_cops.rb +2 -2
- data/lib/rubocop/cli/command/show_docs_url.rb +1 -1
- data/lib/rubocop/cli.rb +28 -6
- data/lib/rubocop/comment_config.rb +62 -17
- data/lib/rubocop/config.rb +14 -10
- data/lib/rubocop/config_finder.rb +1 -1
- data/lib/rubocop/config_loader.rb +20 -21
- data/lib/rubocop/config_loader_resolver.rb +9 -7
- data/lib/rubocop/config_obsoletion/extracted_cop.rb +4 -2
- data/lib/rubocop/config_store.rb +6 -1
- data/lib/rubocop/config_validator.rb +1 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +8 -4
- data/lib/rubocop/cop/bundler/gem_version.rb +28 -28
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -2
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +22 -6
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/documentation.rb +2 -3
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -2
- data/lib/rubocop/cop/gemspec/require_mfa.rb +1 -1
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +10 -5
- data/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/itblock_handler.rb +69 -0
- data/lib/rubocop/cop/internal_affairs/location_exists.rb +28 -2
- data/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +9 -9
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups/ast_processor.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_pattern_groups.rb +3 -1
- data/lib/rubocop/cop/internal_affairs/on_send_without_on_csend.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +4 -4
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/layout/argument_alignment.rb +2 -2
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +3 -1
- data/lib/rubocop/cop/layout/class_structure.rb +13 -6
- data/lib/rubocop/cop/layout/dot_position.rb +2 -2
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +12 -2
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +31 -13
- data/lib/rubocop/cop/layout/empty_lines_after_module_inclusion.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +12 -2
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +16 -2
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +16 -2
- data/lib/rubocop/cop/layout/end_alignment.rb +8 -1
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +34 -1
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +26 -0
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +7 -1
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +25 -25
- data/lib/rubocop/cop/layout/hash_alignment.rb +3 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -2
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +33 -3
- data/lib/rubocop/cop/layout/indentation_style.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +111 -7
- data/lib/rubocop/cop/layout/line_continuation_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +26 -9
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +57 -57
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +9 -2
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +2 -0
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +56 -56
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +204 -39
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -4
- data/lib/rubocop/cop/layout/parameter_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/redundant_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +13 -3
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -10
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +4 -2
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -8
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -1
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +47 -3
- data/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb +3 -2
- data/lib/rubocop/cop/lint/constant_reassignment.rb +59 -9
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/cop_directive_syntax.rb +14 -8
- data/lib/rubocop/cop/lint/data_define_override.rb +63 -0
- data/lib/rubocop/cop/lint/debugger.rb +0 -2
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +4 -1
- data/lib/rubocop/cop/lint/duplicate_match_pattern.rb +4 -4
- data/lib/rubocop/cop/lint/duplicate_methods.rb +111 -12
- data/lib/rubocop/cop/lint/else_layout.rb +19 -0
- data/lib/rubocop/cop/lint/empty_block.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +6 -1
- data/lib/rubocop/cop/lint/empty_in_pattern.rb +8 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +11 -0
- data/lib/rubocop/cop/lint/empty_when.rb +8 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +7 -2
- data/lib/rubocop/cop/lint/literal_as_condition.rb +5 -1
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +16 -6
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +2 -0
- data/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb +4 -0
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +3 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +23 -9
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +0 -9
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -2
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +23 -6
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +8 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +17 -0
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +7 -1
- data/lib/rubocop/cop/lint/self_assignment.rb +10 -2
- data/lib/rubocop/cop/lint/shadowed_argument.rb +7 -7
- data/lib/rubocop/cop/lint/struct_new_override.rb +17 -1
- data/lib/rubocop/cop/lint/syntax.rb +25 -1
- data/lib/rubocop/cop/lint/to_json.rb +12 -16
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +1 -0
- data/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb +1 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +5 -3
- data/lib/rubocop/cop/lint/unreachable_pattern_branch.rb +113 -0
- data/lib/rubocop/cop/lint/unused_method_argument.rb +10 -0
- data/lib/rubocop/cop/lint/useless_assignment.rb +45 -17
- data/lib/rubocop/cop/lint/useless_constant_scoping.rb +4 -4
- data/lib/rubocop/cop/lint/useless_default_value_argument.rb +2 -0
- data/lib/rubocop/cop/lint/useless_or.rb +15 -2
- data/lib/rubocop/cop/lint/utils/nil_receiver_checker.rb +24 -9
- data/lib/rubocop/cop/lint/void.rb +39 -12
- data/lib/rubocop/cop/message_annotator.rb +1 -1
- data/lib/rubocop/cop/metrics/block_nesting.rb +23 -0
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +4 -3
- data/lib/rubocop/cop/migration/department_name.rb +12 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/check_single_line_suitability.rb +4 -6
- data/lib/rubocop/cop/mixin/code_length.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb +5 -5
- data/lib/rubocop/cop/mixin/hash_transform_method/autocorrection.rb +63 -0
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +10 -60
- data/lib/rubocop/cop/mixin/line_length_help.rb +21 -2
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +5 -4
- data/lib/rubocop/cop/mixin/statement_modifier.rb +0 -6
- data/lib/rubocop/cop/mixin/trailing_comma.rb +8 -5
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +4 -2
- data/lib/rubocop/cop/naming/predicate_method.rb +27 -4
- data/lib/rubocop/cop/naming/predicate_prefix.rb +11 -11
- data/lib/rubocop/cop/offense.rb +9 -1
- data/lib/rubocop/cop/registry.rb +20 -13
- data/lib/rubocop/cop/security/eval.rb +15 -2
- data/lib/rubocop/cop/security/json_load.rb +33 -11
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +15 -4
- data/lib/rubocop/cop/style/accessor_grouping.rb +4 -2
- data/lib/rubocop/cop/style/alias.rb +4 -1
- data/lib/rubocop/cop/style/and_or.rb +1 -0
- data/lib/rubocop/cop/style/arguments_forwarding.rb +25 -7
- data/lib/rubocop/cop/style/array_intersect.rb +2 -2
- data/lib/rubocop/cop/style/array_intersect_with_single_element.rb +47 -0
- data/lib/rubocop/cop/style/array_join.rb +4 -2
- data/lib/rubocop/cop/style/ascii_comments.rb +6 -3
- data/lib/rubocop/cop/style/attr.rb +5 -2
- data/lib/rubocop/cop/style/bare_percent_literals.rb +4 -3
- data/lib/rubocop/cop/style/begin_block.rb +3 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +27 -34
- data/lib/rubocop/cop/style/case_equality.rb +15 -13
- data/lib/rubocop/cop/style/class_and_module_children.rb +11 -2
- data/lib/rubocop/cop/style/collection_compact.rb +36 -16
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -1
- data/lib/rubocop/cop/style/concat_array_literals.rb +2 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +8 -18
- data/lib/rubocop/cop/style/constant_visibility.rb +17 -12
- data/lib/rubocop/cop/style/copyright.rb +1 -1
- data/lib/rubocop/cop/style/documentation.rb +6 -6
- data/lib/rubocop/cop/style/documentation_method.rb +8 -8
- data/lib/rubocop/cop/style/double_negation.rb +1 -1
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +2 -0
- data/lib/rubocop/cop/style/empty_block_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_class_definition.rb +119 -0
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -1
- data/lib/rubocop/cop/style/empty_method.rb +0 -6
- data/lib/rubocop/cop/style/encoding.rb +7 -1
- data/lib/rubocop/cop/style/end_block.rb +3 -1
- data/lib/rubocop/cop/style/endless_method.rb +23 -5
- data/lib/rubocop/cop/style/explicit_block_argument.rb +1 -1
- data/lib/rubocop/cop/style/file_open.rb +84 -0
- data/lib/rubocop/cop/style/float_division.rb +15 -1
- data/lib/rubocop/cop/style/for.rb +3 -0
- data/lib/rubocop/cop/style/format_string_token.rb +49 -5
- data/lib/rubocop/cop/style/global_vars.rb +5 -2
- data/lib/rubocop/cop/style/guard_clause.rb +27 -22
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +27 -9
- data/lib/rubocop/cop/style/hash_lookup_method.rb +101 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +1 -1
- data/lib/rubocop/cop/style/hash_transform_keys.rb +17 -7
- data/lib/rubocop/cop/style/hash_transform_values.rb +17 -7
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -5
- data/lib/rubocop/cop/style/if_unless_modifier.rb +57 -17
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -12
- data/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb +4 -1
- data/lib/rubocop/cop/style/if_with_semicolon.rb +7 -5
- data/lib/rubocop/cop/style/inline_comment.rb +4 -1
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -2
- data/lib/rubocop/cop/style/lambda_call.rb +8 -8
- data/lib/rubocop/cop/style/magic_comment_format.rb +2 -2
- data/lib/rubocop/cop/style/map_join.rb +123 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +15 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +17 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -4
- data/lib/rubocop/cop/style/module_member_existence_check.rb +107 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +4 -4
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -4
- data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
- data/lib/rubocop/cop/style/negative_array_index.rb +220 -0
- data/lib/rubocop/cop/style/nil_comparison.rb +11 -10
- data/lib/rubocop/cop/style/nil_lambda.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +5 -11
- data/lib/rubocop/cop/style/not.rb +2 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +3 -2
- data/lib/rubocop/cop/style/one_class_per_file.rb +115 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +21 -12
- data/lib/rubocop/cop/style/operator_method_call.rb +11 -2
- data/lib/rubocop/cop/style/parallel_assignment.rb +6 -2
- data/lib/rubocop/cop/style/partition_instead_of_double_select.rb +270 -0
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -0
- data/lib/rubocop/cop/style/predicate_with_kind.rb +84 -0
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +12 -12
- data/lib/rubocop/cop/style/proc.rb +3 -2
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/reduce_to_hash.rb +184 -0
- data/lib/rubocop/cop/style/redundant_argument.rb +2 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +3 -3
- data/lib/rubocop/cop/style/redundant_condition.rb +5 -2
- data/lib/rubocop/cop/style/redundant_each.rb +3 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +1 -1
- data/lib/rubocop/cop/style/redundant_format.rb +26 -5
- data/lib/rubocop/cop/style/redundant_interpolation.rb +11 -2
- data/lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb +26 -10
- data/lib/rubocop/cop/style/redundant_line_continuation.rb +16 -0
- data/lib/rubocop/cop/style/redundant_min_max_by.rb +93 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +26 -22
- data/lib/rubocop/cop/style/redundant_percent_q.rb +5 -3
- data/lib/rubocop/cop/style/redundant_regexp_argument.rb +9 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -0
- data/lib/rubocop/cop/style/redundant_return.rb +3 -1
- data/lib/rubocop/cop/style/redundant_self_assignment_branch.rb +0 -5
- data/lib/rubocop/cop/style/redundant_sort.rb +7 -7
- data/lib/rubocop/cop/style/redundant_struct_keyword_init.rb +114 -0
- data/lib/rubocop/cop/style/reverse_find.rb +51 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +7 -7
- data/lib/rubocop/cop/style/select_by_kind.rb +158 -0
- data/lib/rubocop/cop/style/select_by_range.rb +197 -0
- data/lib/rubocop/cop/style/select_by_regexp.rb +51 -21
- data/lib/rubocop/cop/style/semicolon.rb +25 -7
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
- data/lib/rubocop/cop/style/single_line_do_end_block.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +3 -1
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +8 -1
- data/lib/rubocop/cop/style/special_global_vars.rb +6 -1
- data/lib/rubocop/cop/style/super_arguments.rb +2 -2
- data/lib/rubocop/cop/style/symbol_proc.rb +4 -3
- data/lib/rubocop/cop/style/tally_method.rb +181 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +45 -0
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +11 -11
- data/lib/rubocop/cop/style/unless_else.rb +10 -9
- data/lib/rubocop/cop/style/yoda_expression.rb +1 -1
- data/lib/rubocop/cop/team.rb +4 -4
- data/lib/rubocop/cop/util.rb +2 -3
- data/lib/rubocop/cop/utils/format_string.rb +10 -0
- data/lib/rubocop/cop/variable_force/branch.rb +30 -6
- data/lib/rubocop/cops_documentation_generator.rb +4 -4
- data/lib/rubocop/directive_comment.rb +48 -4
- data/lib/rubocop/formatter/clang_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/disabled_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/formatter_set.rb +2 -2
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +0 -2
- data/lib/rubocop/formatter/tap_formatter.rb +5 -2
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +1 -1
- data/lib/rubocop/formatter.rb +22 -21
- data/lib/rubocop/lsp/diagnostic.rb +18 -33
- data/lib/rubocop/lsp/disable_comment_edits.rb +135 -0
- data/lib/rubocop/lsp/routes.rb +12 -5
- data/lib/rubocop/lsp/runtime.rb +13 -3
- data/lib/rubocop/lsp/stdin_runner.rb +8 -17
- data/lib/rubocop/magic_comment.rb +20 -0
- data/lib/rubocop/mcp/server.rb +200 -0
- data/lib/rubocop/options.rb +10 -1
- data/lib/rubocop/path_util.rb +14 -2
- data/lib/rubocop/plugin/loader.rb +1 -1
- data/lib/rubocop/rake_task.rb +1 -1
- data/lib/rubocop/remote_config.rb +10 -8
- data/lib/rubocop/result_cache.rb +60 -37
- data/lib/rubocop/rspec/cop_helper.rb +8 -0
- data/lib/rubocop/rspec/shared_contexts.rb +18 -5
- data/lib/rubocop/rspec/support.rb +2 -1
- data/lib/rubocop/runner.rb +12 -3
- data/lib/rubocop/server/cache.rb +6 -29
- data/lib/rubocop/server/core.rb +2 -0
- data/lib/rubocop/target_finder.rb +1 -1
- data/lib/rubocop/target_ruby.rb +31 -14
- data/lib/rubocop/version.rb +2 -2
- data/lib/rubocop.rb +20 -0
- data/lib/ruby_lsp/rubocop/addon.rb +23 -8
- data/lib/ruby_lsp/rubocop/runtime_adapter.rb +49 -15
- metadata +33 -9
|
@@ -424,21 +424,39 @@ module RuboCop
|
|
|
424
424
|
end
|
|
425
425
|
|
|
426
426
|
def forwarded_rest_arg
|
|
427
|
-
return
|
|
427
|
+
return @forwarded_rest_arg if defined?(@forwarded_rest_arg)
|
|
428
428
|
|
|
429
|
-
|
|
429
|
+
@forwarded_rest_arg = if referenced_rest_arg?
|
|
430
|
+
nil
|
|
431
|
+
else
|
|
432
|
+
arguments.find do |arg|
|
|
433
|
+
forwarded_rest_arg?(arg, @rest_arg_name)
|
|
434
|
+
end
|
|
435
|
+
end
|
|
430
436
|
end
|
|
431
437
|
|
|
432
438
|
def forwarded_kwrest_arg
|
|
433
|
-
return
|
|
439
|
+
return @forwarded_kwrest_arg if defined?(@forwarded_kwrest_arg)
|
|
434
440
|
|
|
435
|
-
|
|
441
|
+
@forwarded_kwrest_arg = if referenced_kwrest_arg?
|
|
442
|
+
nil
|
|
443
|
+
else
|
|
444
|
+
arguments.filter_map do |arg|
|
|
445
|
+
extract_forwarded_kwrest_arg(arg, @kwrest_arg_name)
|
|
446
|
+
end.first
|
|
447
|
+
end
|
|
436
448
|
end
|
|
437
449
|
|
|
438
450
|
def forwarded_block_arg
|
|
439
|
-
return
|
|
440
|
-
|
|
441
|
-
|
|
451
|
+
return @forwarded_block_arg if defined?(@forwarded_block_arg)
|
|
452
|
+
|
|
453
|
+
@forwarded_block_arg = if referenced_block_arg?
|
|
454
|
+
nil
|
|
455
|
+
else
|
|
456
|
+
arguments.find do |arg|
|
|
457
|
+
forwarded_block_arg?(arg, @block_arg_name)
|
|
458
|
+
end
|
|
459
|
+
end
|
|
442
460
|
end
|
|
443
461
|
|
|
444
462
|
def classification
|
|
@@ -95,7 +95,7 @@ module RuboCop
|
|
|
95
95
|
$(call
|
|
96
96
|
{
|
|
97
97
|
(begin (send $_ :& $_))
|
|
98
|
-
(call
|
|
98
|
+
(call $!nil? :intersection $_)
|
|
99
99
|
}
|
|
100
100
|
$%1
|
|
101
101
|
)
|
|
@@ -107,7 +107,7 @@ module RuboCop
|
|
|
107
107
|
$(call
|
|
108
108
|
{
|
|
109
109
|
(begin (send $_ :& $_))
|
|
110
|
-
(call
|
|
110
|
+
(call $!nil? :intersection $_)
|
|
111
111
|
}
|
|
112
112
|
%ARRAY_SIZE_METHODS
|
|
113
113
|
)
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Style
|
|
6
|
+
# Use `include?(element)` instead of `intersect?([element])`.
|
|
7
|
+
#
|
|
8
|
+
# @safety
|
|
9
|
+
# The receiver might not be an array.
|
|
10
|
+
#
|
|
11
|
+
# @example
|
|
12
|
+
# # bad
|
|
13
|
+
# array.intersect?([element])
|
|
14
|
+
#
|
|
15
|
+
# # good
|
|
16
|
+
# array.include?(element)
|
|
17
|
+
class ArrayIntersectWithSingleElement < Base
|
|
18
|
+
extend AutoCorrector
|
|
19
|
+
|
|
20
|
+
MSG = 'Use `include?(element)` instead of `intersect?([element])`.'
|
|
21
|
+
|
|
22
|
+
RESTRICT_ON_SEND = %i[intersect?].freeze
|
|
23
|
+
|
|
24
|
+
# @!method single_element(node)
|
|
25
|
+
def_node_matcher :single_element, <<~PATTERN
|
|
26
|
+
(send _ _ $(array $_))
|
|
27
|
+
PATTERN
|
|
28
|
+
|
|
29
|
+
def on_send(node)
|
|
30
|
+
array, element = single_element(node)
|
|
31
|
+
return unless array
|
|
32
|
+
|
|
33
|
+
add_offense(
|
|
34
|
+
node.source_range.with(begin_pos: node.loc.selector.begin_pos)
|
|
35
|
+
) do |corrector|
|
|
36
|
+
corrector.replace(node.loc.selector, 'include?')
|
|
37
|
+
corrector.replace(
|
|
38
|
+
array,
|
|
39
|
+
array.percent_literal? ? element.value.inspect : element.source
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
alias on_csend on_send
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# Checks for uses of
|
|
6
|
+
# Checks for uses of `*` as a substitute for `Array#join`.
|
|
7
|
+
# Using `join` is clearer about intent and more readable than
|
|
8
|
+
# overloading the `*` operator for string conversion.
|
|
7
9
|
#
|
|
8
|
-
# Not all cases can reliably checked, due to Ruby's dynamic
|
|
10
|
+
# Not all cases can be reliably checked, due to Ruby's dynamic
|
|
9
11
|
# types, so we consider only cases when the first argument is an
|
|
10
12
|
# array literal or the second is a string literal.
|
|
11
13
|
#
|
|
@@ -4,8 +4,11 @@ module RuboCop
|
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
6
|
# Checks for non-ascii (non-English) characters
|
|
7
|
-
# in comments.
|
|
8
|
-
#
|
|
7
|
+
# in comments. Non-ascii characters can cause issues with
|
|
8
|
+
# portability and encoding across different environments
|
|
9
|
+
# and editors. You could set an array of allowed non-ascii
|
|
10
|
+
# chars in `AllowedChars` attribute (copyright notice "©"
|
|
11
|
+
# by default).
|
|
9
12
|
#
|
|
10
13
|
# @example
|
|
11
14
|
# # bad
|
|
@@ -49,7 +52,7 @@ module RuboCop
|
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
def allowed_non_ascii_chars
|
|
52
|
-
cop_config['AllowedChars'] || []
|
|
55
|
+
@allowed_non_ascii_chars ||= (cop_config['AllowedChars'] || []).freeze
|
|
53
56
|
end
|
|
54
57
|
end
|
|
55
58
|
end
|
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# Checks for uses of Module#attr
|
|
6
|
+
# Checks for uses of `Module#attr`. The `attr` method has confusing
|
|
7
|
+
# behavior: with a single argument it creates a reader (like `attr_reader`),
|
|
8
|
+
# but with a second boolean argument it creates an accessor (deprecated in
|
|
9
|
+
# Ruby 1.9). Use `attr_reader` or `attr_accessor` to make intent explicit.
|
|
7
10
|
#
|
|
8
11
|
# @example
|
|
9
|
-
# # bad
|
|
12
|
+
# # bad
|
|
10
13
|
# attr :something, true
|
|
11
14
|
# attr :one, :two, :three # behaves as attr_reader
|
|
12
15
|
#
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# Checks if usage of
|
|
6
|
+
# Checks if usage of `%()` or `%Q()` matches configuration.
|
|
7
|
+
# Consistent use of one style makes the codebase easier
|
|
8
|
+
# to read.
|
|
7
9
|
#
|
|
8
10
|
# @example EnforcedStyle: bare_percent (default)
|
|
9
11
|
# # bad
|
|
@@ -41,8 +43,7 @@ module RuboCop
|
|
|
41
43
|
|
|
42
44
|
def check(node)
|
|
43
45
|
return if node.heredoc?
|
|
44
|
-
return unless node.loc
|
|
45
|
-
return unless node.loc.begin
|
|
46
|
+
return unless node.loc?(:begin)
|
|
46
47
|
|
|
47
48
|
source = node.loc.begin.source
|
|
48
49
|
if requires_percent_q?(source)
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# Checks for BEGIN blocks.
|
|
6
|
+
# Checks for `BEGIN` blocks. They are Perl-style constructs that execute
|
|
7
|
+
# code before the rest of the file is parsed, making the control flow
|
|
8
|
+
# harder to follow and reason about.
|
|
7
9
|
#
|
|
8
10
|
# @example
|
|
9
11
|
# # bad
|
|
@@ -198,12 +198,13 @@ module RuboCop
|
|
|
198
198
|
alias on_csend on_send
|
|
199
199
|
|
|
200
200
|
def on_block(node)
|
|
201
|
-
return if
|
|
201
|
+
return if part_of_ignored_node?(node)
|
|
202
202
|
return if proper_block_style?(node)
|
|
203
203
|
|
|
204
204
|
message = message(node)
|
|
205
205
|
add_offense(node.loc.begin, message: message) do |corrector|
|
|
206
206
|
autocorrect(corrector, node)
|
|
207
|
+
ignore_node(node)
|
|
207
208
|
end
|
|
208
209
|
end
|
|
209
210
|
|
|
@@ -231,9 +232,7 @@ module RuboCop
|
|
|
231
232
|
end
|
|
232
233
|
|
|
233
234
|
def semantic_message(node)
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if block_begin == '{'
|
|
235
|
+
if node.braces?
|
|
237
236
|
'Prefer `do...end` over `{...}` for procedural blocks.'
|
|
238
237
|
else
|
|
239
238
|
'Prefer `{...}` over `do...end` for functional blocks.'
|
|
@@ -371,17 +370,22 @@ module RuboCop
|
|
|
371
370
|
end
|
|
372
371
|
# rubocop:enable Metrics/CyclomaticComplexity
|
|
373
372
|
|
|
373
|
+
# rubocop:disable Metrics/CyclomaticComplexity -- inlined special_method checks to avoid double evaluation
|
|
374
374
|
def proper_block_style?(node)
|
|
375
375
|
return true if require_do_end?(node)
|
|
376
|
-
|
|
376
|
+
|
|
377
|
+
method_name = node.method_name
|
|
378
|
+
return true if allowed_method?(method_name) || matches_allowed_pattern?(method_name)
|
|
379
|
+
return node.braces? if braces_required_method?(method_name)
|
|
377
380
|
|
|
378
381
|
case style
|
|
379
382
|
when :line_count_based then line_count_based_block_style?(node)
|
|
380
383
|
when :semantic then semantic_block_style?(node)
|
|
381
384
|
when :braces_for_chaining then braces_for_chaining_style?(node)
|
|
382
|
-
when :always_braces then
|
|
385
|
+
when :always_braces then node.braces?
|
|
383
386
|
end
|
|
384
387
|
end
|
|
388
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
385
389
|
|
|
386
390
|
def require_do_end?(node)
|
|
387
391
|
return false if node.braces? || node.multiline?
|
|
@@ -390,19 +394,6 @@ module RuboCop
|
|
|
390
394
|
resbody.children.first&.array_type?
|
|
391
395
|
end
|
|
392
396
|
|
|
393
|
-
def special_method?(method_name)
|
|
394
|
-
allowed_method?(method_name) ||
|
|
395
|
-
matches_allowed_pattern?(method_name) ||
|
|
396
|
-
braces_required_method?(method_name)
|
|
397
|
-
end
|
|
398
|
-
|
|
399
|
-
def special_method_proper_block_style?(node)
|
|
400
|
-
method_name = node.method_name
|
|
401
|
-
return true if allowed_method?(method_name) || matches_allowed_pattern?(method_name)
|
|
402
|
-
|
|
403
|
-
node.braces? if braces_required_method?(method_name)
|
|
404
|
-
end
|
|
405
|
-
|
|
406
397
|
def braces_required_method?(method_name)
|
|
407
398
|
braces_required_methods.include?(method_name.to_s)
|
|
408
399
|
end
|
|
@@ -420,24 +411,18 @@ module RuboCop
|
|
|
420
411
|
|
|
421
412
|
if node.braces?
|
|
422
413
|
functional_method?(method_name) || functional_block?(node) ||
|
|
423
|
-
(procedural_oneliners_may_have_braces? &&
|
|
414
|
+
(procedural_oneliners_may_have_braces? && node.single_line?)
|
|
424
415
|
else
|
|
425
416
|
procedural_method?(method_name) || !return_value_used?(node)
|
|
426
417
|
end
|
|
427
418
|
end
|
|
428
419
|
|
|
429
420
|
def braces_for_chaining_style?(node)
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
'{'
|
|
436
|
-
end
|
|
437
|
-
end
|
|
438
|
-
|
|
439
|
-
def braces_style?(node)
|
|
440
|
-
node.loc.begin.source == '{'
|
|
421
|
+
if node.multiline?
|
|
422
|
+
node.chained? ? node.braces? : !node.braces?
|
|
423
|
+
else
|
|
424
|
+
node.braces?
|
|
425
|
+
end
|
|
441
426
|
end
|
|
442
427
|
|
|
443
428
|
def correction_would_break_code?(node)
|
|
@@ -447,7 +432,11 @@ module RuboCop
|
|
|
447
432
|
end
|
|
448
433
|
|
|
449
434
|
def functional_method?(method_name)
|
|
450
|
-
|
|
435
|
+
functional_methods.include?(method_name)
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
def functional_methods
|
|
439
|
+
@functional_methods ||= cop_config['FunctionalMethods'].to_set(&:to_sym).freeze
|
|
451
440
|
end
|
|
452
441
|
|
|
453
442
|
def functional_block?(node)
|
|
@@ -459,7 +448,11 @@ module RuboCop
|
|
|
459
448
|
end
|
|
460
449
|
|
|
461
450
|
def procedural_method?(method_name)
|
|
462
|
-
|
|
451
|
+
procedural_methods.include?(method_name)
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
def procedural_methods
|
|
455
|
+
@procedural_methods ||= cop_config['ProceduralMethods'].to_set(&:to_sym).freeze
|
|
463
456
|
end
|
|
464
457
|
|
|
465
458
|
def return_value_used?(node)
|
|
@@ -488,7 +481,7 @@ module RuboCop
|
|
|
488
481
|
def begin_required?(block_node)
|
|
489
482
|
# If the block contains `rescue` or `ensure`, it needs to be wrapped in
|
|
490
483
|
# `begin`...`end` when changing `do-end` to `{}`.
|
|
491
|
-
block_node.each_child_node(:rescue, :ensure).any? &&
|
|
484
|
+
block_node.each_child_node(:rescue, :ensure).any? && block_node.multiline?
|
|
492
485
|
end
|
|
493
486
|
|
|
494
487
|
def single_argument_operator_method?(node)
|
|
@@ -3,31 +3,40 @@
|
|
|
3
3
|
module RuboCop
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
|
-
# Checks for uses of the case equality operator(
|
|
6
|
+
# Checks for uses of the case equality operator (`===`).
|
|
7
|
+
# The `===` operator has different behavior depending on the
|
|
8
|
+
# receiver and its use outside of `case`/`when` is confusing.
|
|
9
|
+
# Prefer more explicit alternatives like `is_a?`, `include?`,
|
|
10
|
+
# or `match?`.
|
|
7
11
|
#
|
|
8
12
|
# If `AllowOnConstant` option is enabled, the cop will ignore violations when the receiver of
|
|
9
13
|
# the case equality operator is a constant.
|
|
10
|
-
|
|
14
|
+
#
|
|
11
15
|
# If `AllowOnSelfClass` option is enabled, the cop will ignore violations when the receiver of
|
|
12
16
|
# the case equality operator is `self.class`. Note intermediate variables are not accepted.
|
|
13
17
|
#
|
|
18
|
+
# NOTE: Regexp case equality (`/regexp/ === var`) is allowed because changing it to
|
|
19
|
+
# `/regexp/.match?(var)` needs to take into account `Regexp.last_match?`, `$~`, `$1`, etc.
|
|
20
|
+
# This potentially incompatible transformation is handled by `Performance/RegexpMatch` cop.
|
|
21
|
+
#
|
|
14
22
|
# @example
|
|
15
23
|
# # bad
|
|
16
24
|
# (1..100) === 7
|
|
17
|
-
# /something/ === some_string
|
|
18
25
|
#
|
|
19
26
|
# # good
|
|
20
|
-
# something.is_a?(Array)
|
|
21
27
|
# (1..100).include?(7)
|
|
22
|
-
# /something/.match?(some_string)
|
|
23
28
|
#
|
|
24
29
|
# @example AllowOnConstant: false (default)
|
|
25
30
|
# # bad
|
|
26
31
|
# Array === something
|
|
27
32
|
#
|
|
33
|
+
# # good
|
|
34
|
+
# something.is_a?(Array)
|
|
35
|
+
#
|
|
28
36
|
# @example AllowOnConstant: true
|
|
29
37
|
# # good
|
|
30
38
|
# Array === something
|
|
39
|
+
# something.is_a?(Array)
|
|
31
40
|
#
|
|
32
41
|
# @example AllowOnSelfClass: false (default)
|
|
33
42
|
# # bad
|
|
@@ -51,7 +60,7 @@ module RuboCop
|
|
|
51
60
|
|
|
52
61
|
def on_send(node)
|
|
53
62
|
case_equality?(node) do |lhs, rhs|
|
|
54
|
-
return if lhs.const_type? && !lhs.module_name?
|
|
63
|
+
return if lhs.regexp_type? || (lhs.const_type? && !lhs.module_name?)
|
|
55
64
|
|
|
56
65
|
add_offense(node.loc.selector) do |corrector|
|
|
57
66
|
replacement = replacement(lhs, rhs)
|
|
@@ -71,13 +80,6 @@ module RuboCop
|
|
|
71
80
|
|
|
72
81
|
def replacement(lhs, rhs)
|
|
73
82
|
case lhs.type
|
|
74
|
-
when :regexp
|
|
75
|
-
# The automatic correction from `a === b` to `a.match?(b)` needs to
|
|
76
|
-
# consider `Regexp.last_match?`, `$~`, `$1`, and etc.
|
|
77
|
-
# This correction is expected to be supported by `Performance/Regexp` cop.
|
|
78
|
-
# See: https://github.com/rubocop/rubocop-performance/issues/152
|
|
79
|
-
#
|
|
80
|
-
# So here is noop.
|
|
81
83
|
when :begin
|
|
82
84
|
begin_replacement(lhs, rhs)
|
|
83
85
|
when :const
|
|
@@ -28,16 +28,24 @@ module RuboCop
|
|
|
28
28
|
# manual oversight.
|
|
29
29
|
#
|
|
30
30
|
# @example EnforcedStyle: nested (default)
|
|
31
|
+
# # bad
|
|
32
|
+
# class Foo::Bar
|
|
33
|
+
# end
|
|
34
|
+
#
|
|
31
35
|
# # good
|
|
32
|
-
# # have each child on its own line
|
|
33
36
|
# class Foo
|
|
34
37
|
# class Bar
|
|
35
38
|
# end
|
|
36
39
|
# end
|
|
37
40
|
#
|
|
38
41
|
# @example EnforcedStyle: compact
|
|
42
|
+
# # bad
|
|
43
|
+
# class Foo
|
|
44
|
+
# class Bar
|
|
45
|
+
# end
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
39
48
|
# # good
|
|
40
|
-
# # combine definitions as much as possible
|
|
41
49
|
# class Foo::Bar
|
|
42
50
|
# end
|
|
43
51
|
#
|
|
@@ -183,6 +191,7 @@ module RuboCop
|
|
|
183
191
|
|
|
184
192
|
def check_nested_style(node)
|
|
185
193
|
return unless compact_node_name?(node)
|
|
194
|
+
return if node.parent&.type?(:class, :module)
|
|
186
195
|
|
|
187
196
|
add_offense(node.loc.name, message: NESTED_MSG) do |corrector|
|
|
188
197
|
autocorrect(corrector, node)
|
|
@@ -64,22 +64,34 @@ module RuboCop
|
|
|
64
64
|
# @!method reject_method?(node)
|
|
65
65
|
def_node_matcher :reject_method?, <<~PATTERN
|
|
66
66
|
(block
|
|
67
|
-
(call
|
|
68
|
-
!nil? {:reject :reject!})
|
|
67
|
+
(call !nil? {:reject :reject!})
|
|
69
68
|
$(args ...)
|
|
70
|
-
(call
|
|
71
|
-
|
|
69
|
+
(call $(lvar _) :nil?))
|
|
70
|
+
PATTERN
|
|
71
|
+
|
|
72
|
+
# @!method reject_method_for_numblock_or_itblock?(node)
|
|
73
|
+
def_node_matcher :reject_method_for_numblock_or_itblock?, <<~PATTERN
|
|
74
|
+
{
|
|
75
|
+
(numblock (call !nil? {:reject :reject!}) _ (call (lvar :_1) :nil?))
|
|
76
|
+
(itblock (call !nil? {:reject :reject!}) _ (call (lvar :it) :nil?))
|
|
77
|
+
}
|
|
72
78
|
PATTERN
|
|
73
79
|
|
|
74
80
|
# @!method select_method?(node)
|
|
75
81
|
def_node_matcher :select_method?, <<~PATTERN
|
|
76
82
|
(block
|
|
77
|
-
(call
|
|
78
|
-
!nil? {:select :select! :filter :filter!})
|
|
83
|
+
(call !nil? {:select :select! :filter :filter!})
|
|
79
84
|
$(args ...)
|
|
80
85
|
(call
|
|
81
|
-
(call
|
|
82
|
-
|
|
86
|
+
(call $(lvar _) :nil?) :!))
|
|
87
|
+
PATTERN
|
|
88
|
+
|
|
89
|
+
# @!method select_method_for_numblock_or_itblock?(node)
|
|
90
|
+
def_node_matcher :select_method_for_numblock_or_itblock?, <<~PATTERN
|
|
91
|
+
{
|
|
92
|
+
(numblock (call !nil? {:select :select! :filter :filter!}) _ (call (call (lvar :_1) :nil?) :!))
|
|
93
|
+
(itblock (call !nil? {:select :select! :filter :filter!}) _ (call (call (lvar :it) :nil?) :!))
|
|
94
|
+
}
|
|
83
95
|
PATTERN
|
|
84
96
|
|
|
85
97
|
# @!method grep_v_with_nil?(node)
|
|
@@ -102,26 +114,34 @@ module RuboCop
|
|
|
102
114
|
|
|
103
115
|
private
|
|
104
116
|
|
|
105
|
-
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
106
117
|
def offense_range(node)
|
|
107
118
|
if reject_method_with_block_pass?(node) || grep_v_with_nil?(node)
|
|
108
119
|
range(node, node)
|
|
109
120
|
else
|
|
110
121
|
block_node = node.parent
|
|
111
122
|
|
|
112
|
-
return unless block_node&.
|
|
113
|
-
unless
|
|
114
|
-
return
|
|
115
|
-
end
|
|
116
|
-
return unless args.last.source == receiver.source
|
|
123
|
+
return unless block_node&.any_block_type?
|
|
124
|
+
return unless match_block_method?(block_node)
|
|
117
125
|
|
|
118
126
|
range(node, block_node)
|
|
119
127
|
end
|
|
120
128
|
end
|
|
121
|
-
|
|
129
|
+
|
|
130
|
+
def match_block_method?(block_node)
|
|
131
|
+
if block_node.block_type?
|
|
132
|
+
result = reject_method?(block_node) || select_method?(block_node)
|
|
133
|
+
return false unless result
|
|
134
|
+
|
|
135
|
+
args, receiver = result
|
|
136
|
+
args.last.source == receiver.source
|
|
137
|
+
else
|
|
138
|
+
reject_method_for_numblock_or_itblock?(block_node) ||
|
|
139
|
+
select_method_for_numblock_or_itblock?(block_node)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
122
142
|
|
|
123
143
|
def to_enum_method?(node)
|
|
124
|
-
return false unless node.receiver.
|
|
144
|
+
return false unless node.receiver.call_type?
|
|
125
145
|
|
|
126
146
|
TO_ENUM_METHODS.include?(node.receiver.method_name)
|
|
127
147
|
end
|
|
@@ -4,7 +4,9 @@ module RuboCop
|
|
|
4
4
|
module Cop
|
|
5
5
|
module Style
|
|
6
6
|
# Checks for methods invoked via the `::` operator instead
|
|
7
|
-
# of the `.` operator (like `FileUtils::rmdir` instead of
|
|
7
|
+
# of the `.` operator (like `FileUtils::rmdir` instead of
|
|
8
|
+
# `FileUtils.rmdir`). The `::` operator is conventionally used to
|
|
9
|
+
# reference constants, so using it for method calls can be misleading.
|
|
8
10
|
#
|
|
9
11
|
# @example
|
|
10
12
|
# # bad
|
|
@@ -99,10 +99,6 @@ module RuboCop
|
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
|
|
102
|
-
def setter_method?(method_name)
|
|
103
|
-
method_name.to_s.end_with?(EQUAL) && !%i[!= == === >= <=].include?(method_name)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
102
|
def assignment_rhs_exist?(node)
|
|
107
103
|
parent = node.parent
|
|
108
104
|
return true unless parent
|
|
@@ -213,9 +209,7 @@ module RuboCop
|
|
|
213
209
|
ASSIGN_TO_CONDITION_MSG = 'Assign variables inside of conditionals.'
|
|
214
210
|
VARIABLE_ASSIGNMENT_TYPES = %i[casgn cvasgn gvasgn ivasgn lvasgn].freeze
|
|
215
211
|
ASSIGNMENT_TYPES = VARIABLE_ASSIGNMENT_TYPES + %i[and_asgn or_asgn op_asgn masgn].freeze
|
|
216
|
-
LINE_LENGTH = 'Layout/LineLength'
|
|
217
212
|
ENABLED = 'Enabled'
|
|
218
|
-
MAX = 'Max'
|
|
219
213
|
SINGLE_LINE_CONDITIONS_ONLY = 'SingleLineConditionsOnly'
|
|
220
214
|
|
|
221
215
|
# The shovel operator `<<` does not have its own type. It is a `send`
|
|
@@ -399,7 +393,7 @@ module RuboCop
|
|
|
399
393
|
# of the longest line + the length of the corrected assignment is
|
|
400
394
|
# greater than the max configured line length
|
|
401
395
|
def correction_exceeds_line_limit?(node, branches)
|
|
402
|
-
return false unless
|
|
396
|
+
return false unless config.cop_enabled?('Layout/LineLength')
|
|
403
397
|
|
|
404
398
|
assignment = lhs(tail(branches[0]))
|
|
405
399
|
|
|
@@ -417,14 +411,6 @@ module RuboCop
|
|
|
417
411
|
assignment + longest_line
|
|
418
412
|
end
|
|
419
413
|
|
|
420
|
-
def line_length_cop_enabled?
|
|
421
|
-
config.for_cop(LINE_LENGTH)[ENABLED]
|
|
422
|
-
end
|
|
423
|
-
|
|
424
|
-
def max_line_length
|
|
425
|
-
config.for_cop(LINE_LENGTH)[MAX]
|
|
426
|
-
end
|
|
427
|
-
|
|
428
414
|
def single_line_conditions_only?
|
|
429
415
|
cop_config[SINGLE_LINE_CONDITIONS_ONLY]
|
|
430
416
|
end
|
|
@@ -444,7 +430,7 @@ module RuboCop
|
|
|
444
430
|
next if child.parent.dstr_type?
|
|
445
431
|
|
|
446
432
|
white_space = white_space_range(child, column)
|
|
447
|
-
corrector.remove(white_space) if white_space
|
|
433
|
+
corrector.remove(white_space) if white_space
|
|
448
434
|
end
|
|
449
435
|
|
|
450
436
|
if condition.loc.else && !same_line?(condition.else_branch, condition)
|
|
@@ -465,9 +451,13 @@ module RuboCop
|
|
|
465
451
|
|
|
466
452
|
def white_space_range(node, column)
|
|
467
453
|
expression = node.source_range
|
|
468
|
-
|
|
454
|
+
end_pos = expression.begin_pos
|
|
455
|
+
begin_pos = end_pos - (expression.column - column - 2)
|
|
456
|
+
|
|
457
|
+
return nil if begin_pos > end_pos
|
|
469
458
|
|
|
470
|
-
Parser::Source::Range.new(expression.source_buffer, begin_pos,
|
|
459
|
+
white_space = Parser::Source::Range.new(expression.source_buffer, begin_pos, end_pos)
|
|
460
|
+
white_space if white_space.source.strip.empty?
|
|
471
461
|
end
|
|
472
462
|
|
|
473
463
|
def assignment(node)
|