rubocop 0.85.1 → 0.89.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +16 -4
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +227 -26
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +3 -3
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/cli.rb +2 -4
- data/lib/rubocop/comment_config.rb +5 -7
- data/lib/rubocop/config.rb +21 -4
- data/lib/rubocop/config_loader.rb +41 -69
- data/lib/rubocop/config_loader_resolver.rb +4 -4
- data/lib/rubocop/config_obsoletion.rb +6 -2
- data/lib/rubocop/config_store.rb +4 -0
- data/lib/rubocop/config_validator.rb +2 -4
- data/lib/rubocop/cop/autocorrect_logic.rb +14 -24
- data/lib/rubocop/cop/badge.rb +1 -1
- data/lib/rubocop/cop/base.rb +407 -0
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +47 -50
- data/lib/rubocop/cop/cop.rb +85 -236
- data/lib/rubocop/cop/corrector.rb +38 -115
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +39 -13
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +3 -3
- data/lib/rubocop/cop/generator.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +18 -19
- data/lib/rubocop/cop/layout/class_structure.rb +5 -44
- data/lib/rubocop/cop/layout/comment_indentation.rb +4 -4
- data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +3 -8
- data/lib/rubocop/cop/layout/end_alignment.rb +3 -2
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +22 -36
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +5 -1
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/hash_alignment.rb +2 -3
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +17 -7
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +22 -27
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +33 -66
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +4 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- 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 +50 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +21 -17
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +8 -2
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_elsif_condition.rb +39 -0
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -6
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -5
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +5 -4
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +21 -5
- data/lib/rubocop/cop/lint/literal_as_condition.rb +14 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +15 -21
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +84 -13
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +90 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +12 -13
- data/lib/rubocop/cop/lint/percent_string_array.rb +14 -13
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +14 -13
- data/lib/rubocop/cop/lint/raise_exception.rb +15 -5
- data/lib/rubocop/cop/lint/rand_one.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +43 -40
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +15 -11
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -2
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +10 -2
- 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 +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/syntax.rb +11 -26
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +9 -4
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -47
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +26 -16
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +24 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +26 -3
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +37 -4
- data/lib/rubocop/cop/metrics/method_length.rb +25 -2
- data/lib/rubocop/cop/metrics/module_length.rb +26 -3
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +47 -4
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +157 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +14 -16
- data/lib/rubocop/cop/mixin/alignment.rb +2 -1
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +2 -2
- data/lib/rubocop/cop/mixin/code_length.rb +26 -5
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +5 -11
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -3
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -2
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +2 -6
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +19 -5
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +27 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +39 -10
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -27
- data/lib/rubocop/cop/mixin/trailing_comma.rb +3 -5
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +12 -17
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/mixin/visibility_help.rb +50 -0
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +29 -6
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +4 -4
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +4 -6
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +3 -3
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +2 -2
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -10
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +16 -9
- data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
- data/lib/rubocop/cop/style/alias.rb +41 -36
- data/lib/rubocop/cop/style/and_or.rb +9 -11
- data/lib/rubocop/cop/style/array_coercion.rb +63 -0
- data/lib/rubocop/cop/style/array_join.rb +6 -8
- data/lib/rubocop/cop/style/ascii_comments.rb +4 -4
- data/lib/rubocop/cop/style/attr.rb +11 -9
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -7
- data/lib/rubocop/cop/style/bare_percent_literals.rb +11 -13
- data/lib/rubocop/cop/style/begin_block.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +141 -0
- data/lib/rubocop/cop/style/block_comments.rb +14 -18
- data/lib/rubocop/cop/style/block_delimiters.rb +25 -27
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +220 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +15 -12
- data/lib/rubocop/cop/style/class_check.rb +7 -9
- data/lib/rubocop/cop/style/class_methods.rb +7 -11
- data/lib/rubocop/cop/style/class_vars.rb +24 -7
- data/lib/rubocop/cop/style/collection_methods.rb +11 -17
- data/lib/rubocop/cop/style/colon_method_call.rb +8 -9
- data/lib/rubocop/cop/style/colon_method_definition.rb +6 -6
- data/lib/rubocop/cop/style/command_literal.rb +24 -25
- data/lib/rubocop/cop/style/comment_annotation.rb +15 -15
- data/lib/rubocop/cop/style/commented_keyword.rb +6 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +12 -3
- data/lib/rubocop/cop/style/constant_visibility.rb +3 -2
- data/lib/rubocop/cop/style/copyright.rb +15 -15
- data/lib/rubocop/cop/style/date_time.rb +2 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +8 -10
- data/lib/rubocop/cop/style/dir.rb +9 -12
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +8 -10
- data/lib/rubocop/cop/style/documentation.rb +8 -10
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +12 -15
- data/lib/rubocop/cop/style/double_negation.rb +2 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +5 -8
- data/lib/rubocop/cop/style/each_with_object.rb +16 -19
- data/lib/rubocop/cop/style/empty_case_condition.rb +27 -26
- data/lib/rubocop/cop/style/empty_else.rb +17 -19
- data/lib/rubocop/cop/style/empty_literal.rb +20 -21
- data/lib/rubocop/cop/style/empty_method.rb +10 -13
- data/lib/rubocop/cop/style/encoding.rb +6 -10
- data/lib/rubocop/cop/style/end_block.rb +4 -6
- data/lib/rubocop/cop/style/eval_with_location.rb +9 -7
- data/lib/rubocop/cop/style/even_odd.rb +7 -11
- data/lib/rubocop/cop/style/expand_path_arguments.rb +23 -22
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +9 -11
- data/lib/rubocop/cop/style/float_division.rb +8 -11
- data/lib/rubocop/cop/style/for.rb +11 -15
- data/lib/rubocop/cop/style/format_string.rb +21 -19
- data/lib/rubocop/cop/style/format_string_token.rb +10 -12
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +20 -42
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/global_vars.rb +2 -2
- data/lib/rubocop/cop/style/guard_clause.rb +5 -6
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
- data/lib/rubocop/cop/style/hash_each_methods.rb +5 -8
- data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +4 -3
- data/lib/rubocop/cop/style/hash_transform_keys.rb +3 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +2 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +2 -2
- data/lib/rubocop/cop/style/if_unless_modifier.rb +18 -40
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +11 -3
- data/lib/rubocop/cop/style/if_with_semicolon.rb +3 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -1
- data/lib/rubocop/cop/style/infinite_loop.rb +24 -24
- data/lib/rubocop/cop/style/inline_comment.rb +3 -3
- data/lib/rubocop/cop/style/inverse_methods.rb +23 -33
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/lambda.rb +7 -12
- data/lib/rubocop/cop/style/lambda_call.rb +14 -13
- data/lib/rubocop/cop/style/line_end_concatenation.rb +19 -16
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +16 -11
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +4 -8
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -1
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +8 -7
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +11 -16
- data/lib/rubocop/cop/style/min_max.rb +8 -12
- data/lib/rubocop/cop/style/missing_else.rb +11 -21
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +10 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +24 -27
- data/lib/rubocop/cop/style/mixin_usage.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +10 -13
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +3 -10
- data/lib/rubocop/cop/style/multiline_if_then.rb +5 -11
- data/lib/rubocop/cop/style/multiline_memoization.rb +14 -12
- data/lib/rubocop/cop/style/multiline_method_signature.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -8
- data/lib/rubocop/cop/style/multiline_when_then.rb +7 -9
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +27 -24
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +5 -6
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +7 -4
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +5 -5
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +5 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +18 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +50 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +8 -2
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +4 -3
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +23 -32
- data/lib/rubocop/cop/style/redundant_self.rb +6 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +26 -12
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +4 -4
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +3 -1
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +3 -2
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +23 -2
- data/lib/rubocop/cop/style/symbol_array.rb +6 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +9 -32
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -8
- data/lib/rubocop/cop/team.rb +98 -82
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +5 -15
- data/lib/rubocop/cop/utils/format_string.rb +2 -3
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +7 -5
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/file_finder.rb +12 -12
- data/lib/rubocop/formatter/disabled_config_formatter.rb +3 -3
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/junit_formatter.rb +1 -1
- data/lib/rubocop/name_similarity.rb +7 -3
- data/lib/rubocop/options.rb +18 -11
- data/lib/rubocop/path_util.rb +19 -19
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/rake_task.rb +7 -9
- data/lib/rubocop/result_cache.rb +12 -8
- data/lib/rubocop/rspec/cop_helper.rb +4 -4
- data/lib/rubocop/rspec/expect_offense.rb +63 -22
- data/lib/rubocop/rspec/shared_contexts.rb +16 -17
- data/lib/rubocop/runner.rb +35 -34
- data/lib/rubocop/target_finder.rb +14 -11
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +2 -2
- data/lib/rubocop.rb +33 -5
- metadata +49 -11
- 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/method_missing_super.rb +0 -34
|
@@ -71,8 +71,9 @@ module RuboCop
|
|
|
71
71
|
#
|
|
72
72
|
# These offenses are not safe to auto-correct since there are different
|
|
73
73
|
# implications to each approach.
|
|
74
|
-
class ModuleFunction <
|
|
74
|
+
class ModuleFunction < Base
|
|
75
75
|
include ConfigurableEnforcedStyle
|
|
76
|
+
extend AutoCorrector
|
|
76
77
|
|
|
77
78
|
MODULE_FUNCTION_MSG =
|
|
78
79
|
'Use `module_function` instead of `extend self`.'
|
|
@@ -89,18 +90,14 @@ module RuboCop
|
|
|
89
90
|
return unless node.body&.begin_type?
|
|
90
91
|
|
|
91
92
|
each_wrong_style(node.body.children) do |child_node|
|
|
92
|
-
add_offense(child_node)
|
|
93
|
-
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def autocorrect(node)
|
|
97
|
-
return if style == :forbidden
|
|
93
|
+
add_offense(child_node) do |corrector|
|
|
94
|
+
next if style == :forbidden
|
|
98
95
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
if extend_self_node?(child_node)
|
|
97
|
+
corrector.replace(child_node, 'module_function')
|
|
98
|
+
else
|
|
99
|
+
corrector.replace(child_node, 'extend self')
|
|
100
|
+
end
|
|
104
101
|
end
|
|
105
102
|
end
|
|
106
103
|
end
|
|
@@ -139,7 +136,7 @@ module RuboCop
|
|
|
139
136
|
end
|
|
140
137
|
end
|
|
141
138
|
|
|
142
|
-
def message(
|
|
139
|
+
def message(_range)
|
|
143
140
|
return FORBIDDEN_MSG if style == :forbidden
|
|
144
141
|
|
|
145
142
|
style == :module_function ? MODULE_FUNCTION_MSG : EXTEND_SELF_MSG
|
|
@@ -8,11 +8,20 @@ module RuboCop
|
|
|
8
8
|
#
|
|
9
9
|
# @example
|
|
10
10
|
#
|
|
11
|
-
#
|
|
11
|
+
# # bad
|
|
12
|
+
# Thread.list.select do |t|
|
|
12
13
|
# t.alive?
|
|
13
14
|
# end.map do |t|
|
|
14
15
|
# t.object_id
|
|
15
16
|
# end
|
|
17
|
+
#
|
|
18
|
+
# # good
|
|
19
|
+
# alive_threads = Thread.list.select do |t|
|
|
20
|
+
# t.alive?
|
|
21
|
+
# end
|
|
22
|
+
# alive_threads.map do |t|
|
|
23
|
+
# t.object_id
|
|
24
|
+
# end
|
|
16
25
|
class MultilineBlockChain < Cop
|
|
17
26
|
include RangeHelp
|
|
18
27
|
|
|
@@ -14,9 +14,10 @@ module RuboCop
|
|
|
14
14
|
#
|
|
15
15
|
# # good
|
|
16
16
|
# { result: 'ok' } if cond
|
|
17
|
-
class MultilineIfModifier <
|
|
17
|
+
class MultilineIfModifier < Base
|
|
18
18
|
include StatementModifier
|
|
19
19
|
include Alignment
|
|
20
|
+
extend AutoCorrector
|
|
20
21
|
|
|
21
22
|
MSG = 'Favor a normal %<keyword>s-statement over a modifier' \
|
|
22
23
|
' clause in a multiline statement.'
|
|
@@ -24,21 +25,13 @@ module RuboCop
|
|
|
24
25
|
def on_if(node)
|
|
25
26
|
return unless node.modifier_form? && node.body.multiline?
|
|
26
27
|
|
|
27
|
-
add_offense(node)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def autocorrect(node)
|
|
31
|
-
lambda do |corrector|
|
|
28
|
+
add_offense(node, message: format(MSG, keyword: node.keyword)) do |corrector|
|
|
32
29
|
corrector.replace(node, to_normal_if(node))
|
|
33
30
|
end
|
|
34
31
|
end
|
|
35
32
|
|
|
36
33
|
private
|
|
37
34
|
|
|
38
|
-
def message(node)
|
|
39
|
-
format(MSG, keyword: node.keyword)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
35
|
def to_normal_if(node)
|
|
43
36
|
indented_body = indented_body(node.body, node)
|
|
44
37
|
condition = "#{node.keyword} #{node.condition.source}"
|
|
@@ -16,9 +16,10 @@ module RuboCop
|
|
|
16
16
|
# if cond then a
|
|
17
17
|
# elsif cond then b
|
|
18
18
|
# end
|
|
19
|
-
class MultilineIfThen <
|
|
19
|
+
class MultilineIfThen < Base
|
|
20
20
|
include OnNormalIfUnless
|
|
21
21
|
include RangeHelp
|
|
22
|
+
extend AutoCorrector
|
|
22
23
|
|
|
23
24
|
NON_MODIFIER_THEN = /then\s*(#.*)?$/.freeze
|
|
24
25
|
|
|
@@ -27,22 +28,15 @@ module RuboCop
|
|
|
27
28
|
def on_normal_if_unless(node)
|
|
28
29
|
return unless non_modifier_then?(node)
|
|
29
30
|
|
|
30
|
-
add_offense(node,
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def autocorrect(node)
|
|
35
|
-
lambda do |corrector|
|
|
36
|
-
corrector.remove(
|
|
37
|
-
range_with_surrounding_space(range: node.loc.begin, side: :left)
|
|
38
|
-
)
|
|
31
|
+
add_offense(node.loc.begin, message: format(MSG, keyword: node.keyword)) do |corrector|
|
|
32
|
+
corrector.remove(range_with_surrounding_space(range: node.loc.begin, side: :left))
|
|
39
33
|
end
|
|
40
34
|
end
|
|
41
35
|
|
|
42
36
|
private
|
|
43
37
|
|
|
44
38
|
def non_modifier_then?(node)
|
|
45
|
-
|
|
39
|
+
NON_MODIFIER_THEN.match?(node.loc.begin&.source_line)
|
|
46
40
|
end
|
|
47
41
|
end
|
|
48
42
|
end
|
|
@@ -30,30 +30,32 @@ module RuboCop
|
|
|
30
30
|
# bar
|
|
31
31
|
# baz
|
|
32
32
|
# )
|
|
33
|
-
class MultilineMemoization <
|
|
33
|
+
class MultilineMemoization < Base
|
|
34
34
|
include ConfigurableEnforcedStyle
|
|
35
|
+
extend AutoCorrector
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
KEYWORD_MSG = 'Wrap multiline memoization blocks in `begin` and `end`.'
|
|
38
|
+
BRACES_MSG = 'Wrap multiline memoization blocks in `(` and `)`.'
|
|
37
39
|
|
|
38
40
|
def on_or_asgn(node)
|
|
39
41
|
_lhs, rhs = *node
|
|
40
42
|
|
|
41
43
|
return unless bad_rhs?(rhs)
|
|
42
44
|
|
|
43
|
-
add_offense(
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def autocorrect(node)
|
|
47
|
-
lambda do |corrector|
|
|
45
|
+
add_offense(node.source_range) do |corrector|
|
|
48
46
|
if style == :keyword
|
|
49
|
-
keyword_autocorrect(
|
|
47
|
+
keyword_autocorrect(rhs, corrector)
|
|
50
48
|
else
|
|
51
|
-
corrector.replace(
|
|
52
|
-
corrector.replace(
|
|
49
|
+
corrector.replace(rhs.loc.begin, '(')
|
|
50
|
+
corrector.replace(rhs.loc.end, ')')
|
|
53
51
|
end
|
|
54
52
|
end
|
|
55
53
|
end
|
|
56
54
|
|
|
55
|
+
def message(_node)
|
|
56
|
+
style == :braces ? BRACES_MSG : KEYWORD_MSG
|
|
57
|
+
end
|
|
58
|
+
|
|
57
59
|
private
|
|
58
60
|
|
|
59
61
|
def bad_rhs?(rhs)
|
|
@@ -77,13 +79,13 @@ module RuboCop
|
|
|
77
79
|
if node_buf.source[node.loc.begin.end_pos] == "\n"
|
|
78
80
|
'begin'
|
|
79
81
|
else
|
|
80
|
-
"begin\n
|
|
82
|
+
"begin\n#{' ' * (node.loc.column + indent)}"
|
|
81
83
|
end
|
|
82
84
|
end
|
|
83
85
|
|
|
84
86
|
def keyword_end_str(node, node_buf)
|
|
85
87
|
if /[^\s)]/.match?(node_buf.source_line(node.loc.end.line))
|
|
86
|
-
"\n
|
|
88
|
+
"\n#{' ' * node.loc.column}end"
|
|
87
89
|
else
|
|
88
90
|
'end'
|
|
89
91
|
end
|
|
@@ -18,7 +18,7 @@ module RuboCop
|
|
|
18
18
|
# baz)
|
|
19
19
|
# end
|
|
20
20
|
#
|
|
21
|
-
class MultilineMethodSignature <
|
|
21
|
+
class MultilineMethodSignature < Base
|
|
22
22
|
MSG = 'Avoid multi-line method signatures.'
|
|
23
23
|
|
|
24
24
|
def on_def(node)
|
|
@@ -53,7 +53,7 @@ module RuboCop
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def max_line_length
|
|
56
|
-
config.for_cop('Layout/LineLength')['Max'] ||
|
|
56
|
+
config.for_cop('Layout/LineLength')['Max'] || 120
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
end
|
|
@@ -17,20 +17,29 @@ module RuboCop
|
|
|
17
17
|
#
|
|
18
18
|
# # good
|
|
19
19
|
# a = cond ? b : c
|
|
20
|
-
# a =
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
# a = if cond
|
|
21
|
+
# b
|
|
22
|
+
# else
|
|
23
|
+
# c
|
|
24
|
+
# end
|
|
25
|
+
class MultilineTernaryOperator < Base
|
|
26
|
+
extend AutoCorrector
|
|
27
|
+
|
|
27
28
|
MSG = 'Avoid multi-line ternary operators, ' \
|
|
28
29
|
'use `if` or `unless` instead.'
|
|
29
30
|
|
|
30
31
|
def on_if(node)
|
|
31
32
|
return unless node.ternary? && node.multiline?
|
|
32
33
|
|
|
33
|
-
add_offense(node)
|
|
34
|
+
add_offense(node) do |corrector|
|
|
35
|
+
corrector.replace(node, <<~RUBY.chop)
|
|
36
|
+
if #{node.condition.source}
|
|
37
|
+
#{node.if_branch.source}
|
|
38
|
+
else
|
|
39
|
+
#{node.else_branch.source}
|
|
40
|
+
end
|
|
41
|
+
RUBY
|
|
42
|
+
end
|
|
34
43
|
end
|
|
35
44
|
end
|
|
36
45
|
end
|
|
@@ -28,8 +28,9 @@ module RuboCop
|
|
|
28
28
|
# arg2)
|
|
29
29
|
# end
|
|
30
30
|
#
|
|
31
|
-
class MultilineWhenThen <
|
|
31
|
+
class MultilineWhenThen < Base
|
|
32
32
|
include RangeHelp
|
|
33
|
+
extend AutoCorrector
|
|
33
34
|
|
|
34
35
|
MSG = 'Do not use `then` for multiline `when` statement.'
|
|
35
36
|
|
|
@@ -46,19 +47,16 @@ module RuboCop
|
|
|
46
47
|
# With more than one statements after then, there's not offense
|
|
47
48
|
return if accept_node_type?(node.body)
|
|
48
49
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def autocorrect(node)
|
|
53
|
-
lambda do |corrector|
|
|
50
|
+
range = node.loc.begin
|
|
51
|
+
add_offense(range) do |corrector|
|
|
54
52
|
corrector.remove(
|
|
55
|
-
range_with_surrounding_space(
|
|
56
|
-
range: node.loc.begin, side: :left, newlines: false
|
|
57
|
-
)
|
|
53
|
+
range_with_surrounding_space(range: range, side: :left, newlines: false)
|
|
58
54
|
)
|
|
59
55
|
end
|
|
60
56
|
end
|
|
61
57
|
|
|
58
|
+
private
|
|
59
|
+
|
|
62
60
|
def require_then?(when_node)
|
|
63
61
|
return false unless when_node.body
|
|
64
62
|
|
|
@@ -14,7 +14,7 @@ module RuboCop
|
|
|
14
14
|
# # good
|
|
15
15
|
# a = 'a'
|
|
16
16
|
# foo if ['a', 'b', 'c'].include?(a)
|
|
17
|
-
class MultipleComparison <
|
|
17
|
+
class MultipleComparison < Base
|
|
18
18
|
MSG = 'Avoid comparing a variable with multiple items ' \
|
|
19
19
|
'in a conditional, use `Array#include?` instead.'
|
|
20
20
|
|
|
@@ -50,9 +50,10 @@ module RuboCop
|
|
|
50
50
|
# puts 1
|
|
51
51
|
# end
|
|
52
52
|
# end.freeze
|
|
53
|
-
class MutableConstant <
|
|
53
|
+
class MutableConstant < Base
|
|
54
54
|
include FrozenStringLiteral
|
|
55
55
|
include ConfigurableEnforcedStyle
|
|
56
|
+
extend AutoCorrector
|
|
56
57
|
|
|
57
58
|
MSG = 'Freeze mutable objects assigned to constants.'
|
|
58
59
|
|
|
@@ -69,23 +70,6 @@ module RuboCop
|
|
|
69
70
|
on_assignment(value)
|
|
70
71
|
end
|
|
71
72
|
|
|
72
|
-
def autocorrect(node)
|
|
73
|
-
expr = node.source_range
|
|
74
|
-
|
|
75
|
-
lambda do |corrector|
|
|
76
|
-
splat_value = splat_value(node)
|
|
77
|
-
if splat_value
|
|
78
|
-
correct_splat_expansion(corrector, expr, splat_value)
|
|
79
|
-
elsif node.array_type? && !node.bracketed?
|
|
80
|
-
corrector.wrap(expr, '[', ']')
|
|
81
|
-
elsif requires_parentheses?(node)
|
|
82
|
-
corrector.wrap(expr, '(', ')')
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
corrector.insert_after(expr, '.freeze')
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
73
|
private
|
|
90
74
|
|
|
91
75
|
def on_assignment(value)
|
|
@@ -101,7 +85,9 @@ module RuboCop
|
|
|
101
85
|
return if operation_produces_immutable_object?(value)
|
|
102
86
|
return if frozen_string_literal?(value)
|
|
103
87
|
|
|
104
|
-
add_offense(value)
|
|
88
|
+
add_offense(value) do |corrector|
|
|
89
|
+
autocorrect(corrector, value)
|
|
90
|
+
end
|
|
105
91
|
end
|
|
106
92
|
|
|
107
93
|
def check(value)
|
|
@@ -112,7 +98,24 @@ module RuboCop
|
|
|
112
98
|
return if FROZEN_STRING_LITERAL_TYPES.include?(value.type) &&
|
|
113
99
|
frozen_string_literals_enabled?
|
|
114
100
|
|
|
115
|
-
add_offense(value)
|
|
101
|
+
add_offense(value) do |corrector|
|
|
102
|
+
autocorrect(corrector, value)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def autocorrect(corrector, node)
|
|
107
|
+
expr = node.source_range
|
|
108
|
+
|
|
109
|
+
splat_value = splat_value(node)
|
|
110
|
+
if splat_value
|
|
111
|
+
correct_splat_expansion(corrector, expr, splat_value)
|
|
112
|
+
elsif node.array_type? && !node.bracketed?
|
|
113
|
+
corrector.wrap(expr, '[', ']')
|
|
114
|
+
elsif requires_parentheses?(node)
|
|
115
|
+
corrector.wrap(expr, '(', ')')
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
corrector.insert_after(expr, '.freeze')
|
|
116
119
|
end
|
|
117
120
|
|
|
118
121
|
def mutable_literal?(value)
|
|
@@ -150,14 +153,14 @@ module RuboCop
|
|
|
150
153
|
def_node_matcher :operation_produces_immutable_object?, <<~PATTERN
|
|
151
154
|
{
|
|
152
155
|
(const _ _)
|
|
153
|
-
(send (const nil? :Struct) :new ...)
|
|
154
|
-
(block (send (const nil? :Struct) :new ...) ...)
|
|
156
|
+
(send (const {nil? cbase} :Struct) :new ...)
|
|
157
|
+
(block (send (const {nil? cbase} :Struct) :new ...) ...)
|
|
155
158
|
(send _ :freeze)
|
|
156
159
|
(send {float int} {:+ :- :* :** :/ :% :<<} _)
|
|
157
160
|
(send _ {:+ :- :* :** :/ :%} {float int})
|
|
158
161
|
(send _ {:== :=== :!= :<= :>= :< :>} _)
|
|
159
|
-
(send (const nil? :ENV) :[] _)
|
|
160
|
-
(or (send (const nil? :ENV) :[] _) _)
|
|
162
|
+
(send (const {nil? cbase} :ENV) :[] _)
|
|
163
|
+
(or (send (const {nil? cbase} :ENV) :[] _) _)
|
|
161
164
|
(send _ {:count :length :size} ...)
|
|
162
165
|
(block (send _ {:count :length :size} ...) ...)
|
|
163
166
|
}
|
|
@@ -14,6 +14,7 @@ module RuboCop
|
|
|
14
14
|
# method1(method2 arg)
|
|
15
15
|
class NestedParenthesizedCalls < Cop
|
|
16
16
|
include RangeHelp
|
|
17
|
+
include AllowedMethods
|
|
17
18
|
|
|
18
19
|
MSG = 'Add parentheses to nested method call `%<source>s`.'
|
|
19
20
|
|
|
@@ -36,7 +37,9 @@ module RuboCop
|
|
|
36
37
|
|
|
37
38
|
leading_space =
|
|
38
39
|
range_with_surrounding_space(range: first_arg.begin,
|
|
39
|
-
side: :left
|
|
40
|
+
side: :left,
|
|
41
|
+
whitespace: true,
|
|
42
|
+
continuations: true)
|
|
40
43
|
|
|
41
44
|
lambda do |corrector|
|
|
42
45
|
corrector.replace(leading_space, '(')
|
|
@@ -54,13 +57,9 @@ module RuboCop
|
|
|
54
57
|
|
|
55
58
|
def allowed?(send_node)
|
|
56
59
|
send_node.parent.arguments.one? &&
|
|
57
|
-
|
|
60
|
+
allowed_method?(send_node.method_name) &&
|
|
58
61
|
send_node.arguments.one?
|
|
59
62
|
end
|
|
60
|
-
|
|
61
|
-
def allowed_methods
|
|
62
|
-
cop_config['AllowedMethods'] || []
|
|
63
|
-
end
|
|
64
63
|
end
|
|
65
64
|
end
|
|
66
65
|
end
|
|
@@ -26,6 +26,33 @@ module RuboCop
|
|
|
26
26
|
add_offense(nested_ternary)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
+
|
|
30
|
+
def autocorrect(node)
|
|
31
|
+
if_node = if_node(node)
|
|
32
|
+
|
|
33
|
+
lambda do |corrector|
|
|
34
|
+
corrector.replace(if_node, <<~RUBY.chop)
|
|
35
|
+
if #{if_node.condition.source}
|
|
36
|
+
#{remove_parentheses(if_node.if_branch.source)}
|
|
37
|
+
else
|
|
38
|
+
#{if_node.else_branch.source}
|
|
39
|
+
end
|
|
40
|
+
RUBY
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def if_node(node)
|
|
47
|
+
node = node.parent
|
|
48
|
+
return node if node.if_type?
|
|
49
|
+
|
|
50
|
+
if_node(node)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def remove_parentheses(source)
|
|
54
|
+
source.gsub(/\A\(/, '').gsub(/\)\z/, '')
|
|
55
|
+
end
|
|
29
56
|
end
|
|
30
57
|
end
|
|
31
58
|
end
|
|
@@ -191,7 +191,7 @@ module RuboCop
|
|
|
191
191
|
end
|
|
192
192
|
|
|
193
193
|
def end_followed_by_whitespace_only?(source_buffer, end_pos)
|
|
194
|
-
source_buffer.source[end_pos..-1]
|
|
194
|
+
/\A\s*$/.match?(source_buffer.source[end_pos..-1])
|
|
195
195
|
end
|
|
196
196
|
|
|
197
197
|
def reindentable_lines(node)
|
|
@@ -201,7 +201,7 @@ module RuboCop
|
|
|
201
201
|
lines = (node.source_range.line + 1)...node.loc.end.line
|
|
202
202
|
lines = lines.to_a - heredoc_lines(node)
|
|
203
203
|
# Skip blank lines
|
|
204
|
-
lines.reject { |lineno| buffer.source_line(lineno)
|
|
204
|
+
lines.reject { |lineno| /\A\s*\z/.match?(buffer.source_line(lineno)) }
|
|
205
205
|
end
|
|
206
206
|
|
|
207
207
|
# Adjust indentation of `lines` to match `node`
|
|
@@ -77,9 +77,9 @@ module RuboCop
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
def octal_literal_type(literal)
|
|
80
|
-
if literal
|
|
80
|
+
if OCTAL_ZERO_ONLY_REGEX.match?(literal) && octal_zero_only?
|
|
81
81
|
:octal_zero_only
|
|
82
|
-
elsif literal
|
|
82
|
+
elsif OCTAL_REGEX.match?(literal) && !octal_zero_only?
|
|
83
83
|
:octal
|
|
84
84
|
end
|
|
85
85
|
end
|
|
@@ -53,16 +53,19 @@ module RuboCop
|
|
|
53
53
|
'negative?' => '<'
|
|
54
54
|
}.freeze
|
|
55
55
|
|
|
56
|
+
COMPARISON_METHODS = %i[== > < positive? negative? zero?].to_set.freeze
|
|
57
|
+
|
|
56
58
|
def on_send(node)
|
|
59
|
+
return unless COMPARISON_METHODS.include?(node.method_name)
|
|
60
|
+
|
|
61
|
+
numeric, replacement = check(node)
|
|
62
|
+
return unless numeric
|
|
63
|
+
|
|
57
64
|
return if ignored_method?(node.method_name) ||
|
|
58
65
|
node.each_ancestor(:send, :block).any? do |ancestor|
|
|
59
66
|
ignored_method?(ancestor.method_name)
|
|
60
67
|
end
|
|
61
68
|
|
|
62
|
-
numeric, replacement = check(node)
|
|
63
|
-
|
|
64
|
-
return unless numeric
|
|
65
|
-
|
|
66
69
|
add_offense(node,
|
|
67
70
|
message: format(MSG,
|
|
68
71
|
prefer: replacement,
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
module Cop
|
|
5
|
+
module Style
|
|
6
|
+
# This cop checks for places where keyword arguments can be used instead of
|
|
7
|
+
# boolean arguments when defining methods.
|
|
8
|
+
#
|
|
9
|
+
# @example
|
|
10
|
+
# # bad
|
|
11
|
+
# def some_method(bar = false)
|
|
12
|
+
# puts bar
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# # bad - common hack before keyword args were introduced
|
|
16
|
+
# def some_method(options = {})
|
|
17
|
+
# bar = options.fetch(:bar, false)
|
|
18
|
+
# puts bar
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# # good
|
|
22
|
+
# def some_method(bar: false)
|
|
23
|
+
# puts bar
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
class OptionalBooleanParameter < Base
|
|
27
|
+
MSG = 'Use keyword arguments when defining method with boolean argument.'
|
|
28
|
+
BOOLEAN_TYPES = %i[true false].freeze
|
|
29
|
+
|
|
30
|
+
def on_def(node)
|
|
31
|
+
node.arguments.each do |arg|
|
|
32
|
+
next unless arg.optarg_type?
|
|
33
|
+
|
|
34
|
+
_name, value = *arg
|
|
35
|
+
add_offense(arg) if BOOLEAN_TYPES.include?(value.type)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
alias on_defs on_def
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -30,7 +30,7 @@ module RuboCop
|
|
|
30
30
|
def on_masgn(node)
|
|
31
31
|
lhs, rhs = *node
|
|
32
32
|
lhs_elements = *lhs
|
|
33
|
-
rhs_elements =
|
|
33
|
+
rhs_elements = Array(rhs).compact # edge case for one constant
|
|
34
34
|
|
|
35
35
|
return if allowed_lhs?(lhs) || allowed_rhs?(rhs) ||
|
|
36
36
|
allowed_masign?(lhs_elements, rhs_elements)
|
|
@@ -42,7 +42,7 @@ module RuboCop
|
|
|
42
42
|
lambda do |corrector|
|
|
43
43
|
left, right = *node
|
|
44
44
|
left_elements = *left
|
|
45
|
-
right_elements =
|
|
45
|
+
right_elements = Array(right).compact
|
|
46
46
|
order = find_valid_order(left_elements, right_elements)
|
|
47
47
|
correction = assignment_corrector(node, order)
|
|
48
48
|
|
|
@@ -69,7 +69,7 @@ module RuboCop
|
|
|
69
69
|
|
|
70
70
|
def allowed_rhs?(node)
|
|
71
71
|
# Edge case for one constant
|
|
72
|
-
elements =
|
|
72
|
+
elements = Array(node).compact
|
|
73
73
|
|
|
74
74
|
# Account for edge case of `Constant::CONSTANT`
|
|
75
75
|
!node.array_type? ||
|
|
@@ -131,8 +131,8 @@ module RuboCop
|
|
|
131
131
|
@assignments = assignments
|
|
132
132
|
end
|
|
133
133
|
|
|
134
|
-
def tsort_each_node
|
|
135
|
-
@assignments.each
|
|
134
|
+
def tsort_each_node(&block)
|
|
135
|
+
@assignments.each(&block)
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
def tsort_each_child(assignment)
|
|
@@ -102,12 +102,12 @@ module RuboCop
|
|
|
102
102
|
delimiters_regexp = Regexp.union(delimiters)
|
|
103
103
|
node
|
|
104
104
|
.children.map { |n| string_source(n) }.compact
|
|
105
|
-
.any? { |s| delimiters_regexp
|
|
105
|
+
.any? { |s| delimiters_regexp.match?(s) }
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def string_source(node)
|
|
109
109
|
if node.is_a?(String)
|
|
110
|
-
node
|
|
110
|
+
node.scrub
|
|
111
111
|
elsif node.respond_to?(:type) && (node.str_type? || node.sym_type?)
|
|
112
112
|
node.source
|
|
113
113
|
end
|
|
@@ -17,7 +17,7 @@ module RuboCop
|
|
|
17
17
|
MSG = 'Use `proc` instead of `Proc.new`.'
|
|
18
18
|
|
|
19
19
|
def_node_matcher :proc_new?,
|
|
20
|
-
'(block $(send (const nil? :Proc) :new) ...)'
|
|
20
|
+
'(block $(send (const {nil? cbase} :Proc) :new) ...)'
|
|
21
21
|
|
|
22
22
|
def on_block(node)
|
|
23
23
|
proc_new?(node) do |block_method|
|