rubocop 0.85.1 → 0.89.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/README.md +16 -4
- data/bin/rubocop-profile +32 -0
- data/config/default.yml +227 -26
- data/lib/rubocop.rb +33 -5
- data/lib/rubocop/cli.rb +2 -4
- 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 +2 -2
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +20 -3
- data/lib/rubocop/config_loader.rb +40 -68
- 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 +1 -3
- 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 +3 -3
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +26 -0
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- 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.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +3 -3
- 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 +2 -37
- data/lib/rubocop/cop/layout/comment_indentation.rb +3 -3
- 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 +9 -16
- 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/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 +49 -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 +61 -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 +31 -25
- 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 -31
- 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 +13 -15
- 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 +1 -1
- 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 +5 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
- 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/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/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +1 -1
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +27 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +38 -9
- 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 +1 -1
- 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 +11 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +149 -0
- data/lib/rubocop/cop/style/alias.rb +7 -3
- data/lib/rubocop/cop/style/array_coercion.rb +63 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +3 -2
- data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +144 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -4
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +217 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +21 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -3
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +5 -2
- data/lib/rubocop/cop/style/conditional_assignment.rb +11 -2
- data/lib/rubocop/cop/style/copyright.rb +3 -3
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +2 -2
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
- data/lib/rubocop/cop/style/documentation.rb +6 -6
- data/lib/rubocop/cop/style/each_with_object.rb +0 -2
- data/lib/rubocop/cop/style/empty_case_condition.rb +8 -6
- data/lib/rubocop/cop/style/empty_literal.rb +5 -5
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/encoding.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +4 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +6 -2
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/exponential_notation.rb +8 -10
- data/lib/rubocop/cop/style/float_division.rb +7 -10
- data/lib/rubocop/cop/style/format_string.rb +4 -0
- data/lib/rubocop/cop/style/format_string_token.rb +6 -5
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/guard_clause.rb +2 -2
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +69 -0
- data/lib/rubocop/cop/style/hash_like_case.rb +76 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -3
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +8 -28
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +3 -4
- data/lib/rubocop/cop/style/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/missing_else.rb +1 -11
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +9 -2
- data/lib/rubocop/cop/style/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +2 -5
- 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 +28 -12
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- 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/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 +3 -15
- data/lib/rubocop/cop/utils/format_string.rb +2 -3
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +7 -5
- 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 +2 -2
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/name_similarity.rb +7 -3
- data/lib/rubocop/options.rb +15 -8
- 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 +19 -16
- data/lib/rubocop/runner.rb +34 -33
- data/lib/rubocop/target_finder.rb +14 -11
- data/lib/rubocop/target_ruby.rb +2 -2
- data/lib/rubocop/version.rb +2 -2
- 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
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'set'
|
4
|
-
|
5
3
|
module RuboCop
|
6
4
|
module Cop
|
7
5
|
module Layout
|
@@ -30,7 +28,8 @@ module RuboCop
|
|
30
28
|
# object.method(arg) # this is a comment
|
31
29
|
# another_object.method(arg) # this is another comment
|
32
30
|
# some_object.method(arg) # this is some comment
|
33
|
-
class ExtraSpacing <
|
31
|
+
class ExtraSpacing < Base
|
32
|
+
extend AutoCorrector
|
34
33
|
include PrecedingFollowingAlignment
|
35
34
|
include RangeHelp
|
36
35
|
|
@@ -38,7 +37,7 @@ module RuboCop
|
|
38
37
|
MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s ' \
|
39
38
|
'assignment.'
|
40
39
|
|
41
|
-
def
|
40
|
+
def on_new_investigation
|
42
41
|
return if processed_source.blank?
|
43
42
|
|
44
43
|
@corrected = Set.new if force_equal_sign_alignment?
|
@@ -48,16 +47,6 @@ module RuboCop
|
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
51
|
-
def autocorrect(range)
|
52
|
-
lambda do |corrector|
|
53
|
-
if range.source.end_with?('=')
|
54
|
-
align_equal_signs(range, corrector)
|
55
|
-
else
|
56
|
-
corrector.remove(range)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
50
|
private
|
62
51
|
|
63
52
|
def check_tokens(ast, token1, token2)
|
@@ -74,7 +63,9 @@ module RuboCop
|
|
74
63
|
return unless aligned_with_preceding_assignment(token) == :no
|
75
64
|
|
76
65
|
message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
|
77
|
-
add_offense(token.pos,
|
66
|
+
add_offense(token.pos, message: message) do |corrector|
|
67
|
+
align_equal_signs(token.pos, corrector)
|
68
|
+
end
|
78
69
|
end
|
79
70
|
|
80
71
|
def check_other(token1, token2, ast)
|
@@ -84,7 +75,9 @@ module RuboCop
|
|
84
75
|
extra_space_range(token1, token2) do |range|
|
85
76
|
next if ignored_range?(ast, range.begin_pos)
|
86
77
|
|
87
|
-
add_offense(range,
|
78
|
+
add_offense(range, message: MSG_UNNECESSARY) do |corrector|
|
79
|
+
corrector.remove(range)
|
80
|
+
end
|
88
81
|
end
|
89
82
|
end
|
90
83
|
|
@@ -168,7 +168,7 @@ module RuboCop
|
|
168
168
|
|
169
169
|
send_node = arg_node.parent
|
170
170
|
text = base_range(send_node, arg_node).source.strip
|
171
|
-
base = if text
|
171
|
+
base = if !/\n/.match?(text) && special_inner_call_indentation?(send_node)
|
172
172
|
"`#{text}`"
|
173
173
|
elsif comment_line?(text.lines.reverse_each.first)
|
174
174
|
'the start of the previous line (not counting the comment)'
|
@@ -241,6 +241,10 @@ module RuboCop
|
|
241
241
|
.select { |c| begins_its_line?(c.loc.expression) }
|
242
242
|
.map { |c| c.loc.line }
|
243
243
|
end
|
244
|
+
|
245
|
+
def on_new_investigation
|
246
|
+
@comment_lines = nil
|
247
|
+
end
|
244
248
|
end
|
245
249
|
end
|
246
250
|
end
|
@@ -200,7 +200,7 @@ module RuboCop
|
|
200
200
|
alias on_super on_send
|
201
201
|
alias on_yield on_send
|
202
202
|
|
203
|
-
def on_hash(node)
|
203
|
+
def on_hash(node) # rubocop:todo Metrics/CyclomaticComplexity
|
204
204
|
return if ignored_node?(node)
|
205
205
|
return if node.pairs.empty? || node.single_line?
|
206
206
|
|
@@ -219,8 +219,7 @@ module RuboCop
|
|
219
219
|
correct_node(node, delta)
|
220
220
|
end
|
221
221
|
|
222
|
-
attr_accessor :offences_by
|
223
|
-
attr_accessor :column_deltas
|
222
|
+
attr_accessor :offences_by, :column_deltas
|
224
223
|
|
225
224
|
private
|
226
225
|
|
@@ -161,11 +161,11 @@ module RuboCop
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def heredoc_body(node)
|
164
|
-
node.loc.heredoc_body.source
|
164
|
+
node.loc.heredoc_body.source
|
165
165
|
end
|
166
166
|
|
167
167
|
def heredoc_end(node)
|
168
|
-
node.loc.heredoc_end.source
|
168
|
+
node.loc.heredoc_end.source
|
169
169
|
end
|
170
170
|
end
|
171
171
|
end
|
@@ -95,17 +95,27 @@ module RuboCop
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def line_break_necessary_in_args?(node)
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
98
|
+
needed_length_for_args(node) > max_line_length
|
99
|
+
end
|
100
|
+
|
101
|
+
def needed_length_for_args(node)
|
102
|
+
node.source_range.column +
|
103
|
+
characters_needed_for_space_and_pipes(node) +
|
104
|
+
node.source.lines.first.chomp.length +
|
105
|
+
block_arg_string(node, node.arguments).length
|
106
|
+
end
|
107
|
+
|
108
|
+
def characters_needed_for_space_and_pipes(node)
|
109
|
+
if node.source.lines.first.end_with?("|\n")
|
110
|
+
PIPE_SIZE
|
111
|
+
else
|
112
|
+
1 + PIPE_SIZE * 2
|
113
|
+
end
|
103
114
|
end
|
104
115
|
|
105
116
|
def add_offense_for_expression(node, expr, msg)
|
106
117
|
expression = expr.source_range
|
107
118
|
range = range_between(expression.begin_pos, expression.end_pos)
|
108
|
-
|
109
119
|
add_offense(node, location: range, message: msg)
|
110
120
|
end
|
111
121
|
|
@@ -121,7 +131,7 @@ module RuboCop
|
|
121
131
|
end
|
122
132
|
|
123
133
|
def autocorrect_body(corrector, node, block_body)
|
124
|
-
first_node = if block_body.begin_type?
|
134
|
+
first_node = if block_body.begin_type? && !block_body.source.start_with?('(')
|
125
135
|
block_body.children.first
|
126
136
|
else
|
127
137
|
block_body
|
@@ -37,7 +37,7 @@ module RuboCop
|
|
37
37
|
# ...then each key/value pair is treated as a method 'argument'
|
38
38
|
# when determining where line breaks should appear.
|
39
39
|
if (last_arg = args.last)
|
40
|
-
args = args.
|
40
|
+
args = args[0...-1] + last_arg.children if last_arg.hash_type? && !last_arg.braces?
|
41
41
|
end
|
42
42
|
|
43
43
|
check_line_breaks(node, args)
|
@@ -96,7 +96,6 @@ module RuboCop
|
|
96
96
|
)
|
97
97
|
end
|
98
98
|
|
99
|
-
# rubocop:disable Metrics/AbcSize
|
100
99
|
def alignment_source(node, starting_loc)
|
101
100
|
ending_loc =
|
102
101
|
case node.type
|
@@ -115,7 +114,6 @@ module RuboCop
|
|
115
114
|
|
116
115
|
range_between(starting_loc.begin_pos, ending_loc.end_pos).source
|
117
116
|
end
|
118
|
-
# rubocop:enable Metrics/AbcSize
|
119
117
|
|
120
118
|
# We will use ancestor or wrapper with access modifier.
|
121
119
|
|
@@ -24,9 +24,10 @@ module RuboCop
|
|
24
24
|
# # good
|
25
25
|
# {}.each { | x, y | puts x }
|
26
26
|
# ->( x, y ) { puts x }
|
27
|
-
class SpaceAroundBlockParameters <
|
27
|
+
class SpaceAroundBlockParameters < Base
|
28
28
|
include ConfigurableEnforcedStyle
|
29
29
|
include RangeHelp
|
30
|
+
extend AutoCorrector
|
30
31
|
|
31
32
|
def on_block(node)
|
32
33
|
arguments = node.arguments
|
@@ -38,23 +39,6 @@ module RuboCop
|
|
38
39
|
check_each_arg(arguments)
|
39
40
|
end
|
40
41
|
|
41
|
-
# @param target [RuboCop::AST::Node,Parser::Source::Range]
|
42
|
-
def autocorrect(target)
|
43
|
-
lambda do |corrector|
|
44
|
-
if target.is_a?(RuboCop::AST::Node)
|
45
|
-
if target.parent.children.first == target
|
46
|
-
corrector.insert_before(target, ' ')
|
47
|
-
else
|
48
|
-
corrector.insert_after(target, ' ')
|
49
|
-
end
|
50
|
-
elsif /^\s+$/.match?(target.source)
|
51
|
-
corrector.remove(target)
|
52
|
-
else
|
53
|
-
corrector.insert_after(target, ' ')
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
42
|
private
|
59
43
|
|
60
44
|
def pipes(arguments)
|
@@ -72,11 +56,12 @@ module RuboCop
|
|
72
56
|
def check_inside_pipes(arguments)
|
73
57
|
opening_pipe, closing_pipe = pipes(arguments)
|
74
58
|
|
75
|
-
|
59
|
+
case style
|
60
|
+
when :no_space
|
76
61
|
check_no_space_style_inside_pipes(arguments.children,
|
77
62
|
opening_pipe,
|
78
63
|
closing_pipe)
|
79
|
-
|
64
|
+
when :space
|
80
65
|
check_space_style_inside_pipes(arguments.children,
|
81
66
|
opening_pipe,
|
82
67
|
closing_pipe)
|
@@ -97,7 +82,7 @@ module RuboCop
|
|
97
82
|
|
98
83
|
check_no_space(opening_pipe.end_pos, first.begin_pos,
|
99
84
|
'Space before first')
|
100
|
-
check_no_space(last_end_pos_inside_pipes(last
|
85
|
+
check_no_space(last_end_pos_inside_pipes(last),
|
101
86
|
closing_pipe.begin_pos, 'Space after last')
|
102
87
|
end
|
103
88
|
|
@@ -118,7 +103,7 @@ module RuboCop
|
|
118
103
|
|
119
104
|
def check_closing_pipe_space(args, closing_pipe)
|
120
105
|
last = args.last.source_range
|
121
|
-
last_end_pos = last_end_pos_inside_pipes(last
|
106
|
+
last_end_pos = last_end_pos_inside_pipes(last)
|
122
107
|
|
123
108
|
check_space(last_end_pos, closing_pipe.begin_pos, last,
|
124
109
|
'after last block parameter')
|
@@ -126,8 +111,9 @@ module RuboCop
|
|
126
111
|
'Extra space after last')
|
127
112
|
end
|
128
113
|
|
129
|
-
def last_end_pos_inside_pipes(
|
130
|
-
|
114
|
+
def last_end_pos_inside_pipes(range)
|
115
|
+
pos = range.end_pos
|
116
|
+
range.source_buffer.source[pos] == ',' ? pos + 1 : pos
|
131
117
|
end
|
132
118
|
|
133
119
|
def check_each_arg(args)
|
@@ -151,7 +137,14 @@ module RuboCop
|
|
151
137
|
return if space_begin_pos != space_end_pos
|
152
138
|
|
153
139
|
target = node || range
|
154
|
-
|
140
|
+
message = "Space #{msg} missing."
|
141
|
+
add_offense(target, message: message) do |corrector|
|
142
|
+
if node
|
143
|
+
corrector.insert_before(node, ' ')
|
144
|
+
else
|
145
|
+
corrector.insert_after(target, ' ')
|
146
|
+
end
|
147
|
+
end
|
155
148
|
end
|
156
149
|
|
157
150
|
def check_no_space(space_begin_pos, space_end_pos, msg)
|
@@ -160,8 +153,10 @@ module RuboCop
|
|
160
153
|
range = range_between(space_begin_pos, space_end_pos)
|
161
154
|
return if range.source.include?("\n")
|
162
155
|
|
163
|
-
|
164
|
-
|
156
|
+
message = "#{msg} block parameter detected."
|
157
|
+
add_offense(range, message: message) do |corrector|
|
158
|
+
corrector.remove(range)
|
159
|
+
end
|
165
160
|
end
|
166
161
|
end
|
167
162
|
end
|
@@ -186,7 +186,7 @@ module RuboCop
|
|
186
186
|
pos = range.begin_pos - 1
|
187
187
|
return false if pos.negative?
|
188
188
|
|
189
|
-
|
189
|
+
!/[\s(|{\[;,*=]/.match?(range.source_buffer.source[pos])
|
190
190
|
end
|
191
191
|
|
192
192
|
def space_after_missing?(range)
|
@@ -198,7 +198,7 @@ module RuboCop
|
|
198
198
|
return false if accept_namespace_operator?(range) &&
|
199
199
|
namespace_operator?(range, pos)
|
200
200
|
|
201
|
-
|
201
|
+
!/[\s;,#\\)}\].]/.match?(char)
|
202
202
|
end
|
203
203
|
|
204
204
|
def accepted_opening_delimiter?(range, char)
|
@@ -34,96 +34,63 @@ module RuboCop
|
|
34
34
|
# RuboCop::Cop::Cop
|
35
35
|
# ::RuboCop::Cop
|
36
36
|
#
|
37
|
-
class SpaceAroundMethodCallOperator <
|
38
|
-
include
|
37
|
+
class SpaceAroundMethodCallOperator < Base
|
38
|
+
include RangeHelp
|
39
|
+
extend AutoCorrector
|
40
|
+
|
41
|
+
SPACES_REGEXP = /\A[ \t]+\z/.freeze
|
39
42
|
|
40
43
|
MSG = 'Avoid using spaces around a method call operator.'
|
41
44
|
|
42
45
|
def on_send(node)
|
43
|
-
return unless
|
46
|
+
return unless node.dot? || node.safe_navigation?
|
44
47
|
|
45
|
-
|
48
|
+
check_space_before_dot(node)
|
49
|
+
check_space_after_dot(node)
|
46
50
|
end
|
51
|
+
alias on_csend on_send
|
47
52
|
|
48
53
|
def on_const(node)
|
49
54
|
return unless node.loc.double_colon
|
50
55
|
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
def autocorrect(node)
|
55
|
-
operator = operator_token(node)
|
56
|
-
left = left_token_for_auto_correction(node, operator)
|
57
|
-
right = right_token_for_auto_correction(operator)
|
58
|
-
|
59
|
-
lambda do |corrector|
|
60
|
-
SpaceCorrector.remove_space(
|
61
|
-
processed_source, corrector, left, right
|
62
|
-
)
|
63
|
-
end
|
56
|
+
check_space_after_double_colon(node)
|
64
57
|
end
|
65
58
|
|
66
|
-
alias on_csend on_send
|
67
|
-
|
68
59
|
private
|
69
60
|
|
70
|
-
def
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
if !right.comment? && valid_right_token?(right, operator)
|
76
|
-
no_space_offenses(node, operator, right, MSG)
|
77
|
-
end
|
78
|
-
return unless valid_left_token?(left, operator)
|
79
|
-
|
80
|
-
no_space_offenses(node, left, operator, MSG) if add_left_offense
|
61
|
+
def check_space_before_dot(node)
|
62
|
+
receiver_pos = node.receiver.source_range.end_pos
|
63
|
+
dot_pos = node.loc.dot.begin_pos
|
64
|
+
check_space(receiver_pos, dot_pos)
|
81
65
|
end
|
82
66
|
|
83
|
-
def
|
84
|
-
|
85
|
-
node.const_type? ? node.loc.double_colon : node.loc.dot
|
67
|
+
def check_space_after_dot(node)
|
68
|
+
dot_pos = node.loc.dot.end_pos
|
86
69
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
index.zero? ? nil : processed_source.tokens[index - 1]
|
95
|
-
end
|
96
|
-
|
97
|
-
def next_token(current_token)
|
98
|
-
index = processed_source.tokens.index(current_token)
|
99
|
-
processed_source.tokens[index + 1]
|
100
|
-
end
|
70
|
+
selector_pos =
|
71
|
+
# `Proc#call` shorthand syntax
|
72
|
+
if node.method?(:call) && !node.loc.selector
|
73
|
+
node.loc.begin.begin_pos
|
74
|
+
else
|
75
|
+
node.loc.selector.begin_pos
|
76
|
+
end
|
101
77
|
|
102
|
-
|
103
|
-
node.dot? || node.safe_navigation?
|
78
|
+
check_space(dot_pos, selector_pos)
|
104
79
|
end
|
105
80
|
|
106
|
-
def
|
107
|
-
|
81
|
+
def check_space_after_double_colon(node)
|
82
|
+
double_colon_pos = node.loc.double_colon.end_pos
|
83
|
+
name_pos = node.loc.name.begin_pos
|
84
|
+
check_space(double_colon_pos, name_pos)
|
108
85
|
end
|
109
86
|
|
110
|
-
def
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
def left_token_for_auto_correction(node, operator)
|
115
|
-
left_token = previous_token(operator)
|
116
|
-
return operator if node.const_type?
|
117
|
-
return left_token if valid_left_token?(left_token, operator)
|
118
|
-
|
119
|
-
operator
|
120
|
-
end
|
87
|
+
def check_space(begin_pos, end_pos)
|
88
|
+
return if end_pos <= begin_pos
|
121
89
|
|
122
|
-
|
123
|
-
|
124
|
-
return right_token if !right_token.comment? && valid_right_token?(right_token, operator)
|
90
|
+
range = range_between(begin_pos, end_pos)
|
91
|
+
return unless range.source.match?(SPACES_REGEXP)
|
125
92
|
|
126
|
-
|
93
|
+
add_offense(range) { |corrector| corrector.remove(range) }
|
127
94
|
end
|
128
95
|
end
|
129
96
|
end
|