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
|
@@ -65,7 +65,7 @@ module RuboCop
|
|
|
65
65
|
|
|
66
66
|
# If there is no LF on the last line, we don't care if there's no CR.
|
|
67
67
|
def unimportant_missing_cr?(index, last_line, line)
|
|
68
|
-
style == :crlf && index == last_line - 1 && line
|
|
68
|
+
style == :crlf && index == last_line - 1 && !/\n$/.match?(line)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
def offense_message(line)
|
|
@@ -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,9 +37,10 @@ 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
|
|
|
43
|
+
@aligned_comments = aligned_locations(processed_source.comments.map(&:loc))
|
|
44
44
|
@corrected = Set.new if force_equal_sign_alignment?
|
|
45
45
|
|
|
46
46
|
processed_source.tokens.each_cons(2) do |token1, token2|
|
|
@@ -48,18 +48,20 @@ module RuboCop
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def aligned_locations(locs)
|
|
54
|
+
return [] if locs.empty?
|
|
55
|
+
|
|
56
|
+
aligned = Set[locs.first.line, locs.last.line]
|
|
57
|
+
locs.each_cons(3) do |before, loc, after|
|
|
58
|
+
col = loc.column
|
|
59
|
+
aligned << loc.line if col == before.column || # rubocop:disable Style/MultipleComparison
|
|
60
|
+
col == after.column
|
|
58
61
|
end
|
|
62
|
+
aligned
|
|
59
63
|
end
|
|
60
64
|
|
|
61
|
-
private
|
|
62
|
-
|
|
63
65
|
def check_tokens(ast, token1, token2)
|
|
64
66
|
return if token2.type == :tNL
|
|
65
67
|
|
|
@@ -74,7 +76,9 @@ module RuboCop
|
|
|
74
76
|
return unless aligned_with_preceding_assignment(token) == :no
|
|
75
77
|
|
|
76
78
|
message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
|
|
77
|
-
add_offense(token.pos,
|
|
79
|
+
add_offense(token.pos, message: message) do |corrector|
|
|
80
|
+
align_equal_signs(token.pos, corrector)
|
|
81
|
+
end
|
|
78
82
|
end
|
|
79
83
|
|
|
80
84
|
def check_other(token1, token2, ast)
|
|
@@ -84,7 +88,9 @@ module RuboCop
|
|
|
84
88
|
extra_space_range(token1, token2) do |range|
|
|
85
89
|
next if ignored_range?(ast, range.begin_pos)
|
|
86
90
|
|
|
87
|
-
add_offense(range,
|
|
91
|
+
add_offense(range, message: MSG_UNNECESSARY) do |corrector|
|
|
92
|
+
corrector.remove(range)
|
|
93
|
+
end
|
|
88
94
|
end
|
|
89
95
|
end
|
|
90
96
|
|
|
@@ -102,7 +108,7 @@ module RuboCop
|
|
|
102
108
|
|
|
103
109
|
def aligned_tok?(token)
|
|
104
110
|
if token.comment?
|
|
105
|
-
aligned_comments?(token)
|
|
111
|
+
@aligned_comments.include?(token.line)
|
|
106
112
|
else
|
|
107
113
|
aligned_with_something?(token.pos)
|
|
108
114
|
end
|
|
@@ -126,26 +132,6 @@ module RuboCop
|
|
|
126
132
|
end.compact
|
|
127
133
|
end
|
|
128
134
|
|
|
129
|
-
def aligned_comments?(comment_token)
|
|
130
|
-
ix = processed_source.comments.index do |comment|
|
|
131
|
-
comment.loc.expression.begin_pos == comment_token.begin_pos
|
|
132
|
-
end
|
|
133
|
-
aligned_with_previous_comment?(ix) || aligned_with_next_comment?(ix)
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def aligned_with_previous_comment?(index)
|
|
137
|
-
index.positive? && comment_column(index - 1) == comment_column(index)
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
def aligned_with_next_comment?(index)
|
|
141
|
-
index < processed_source.comments.length - 1 &&
|
|
142
|
-
comment_column(index + 1) == comment_column(index)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
def comment_column(index)
|
|
146
|
-
processed_source.comments[index].loc.column
|
|
147
|
-
end
|
|
148
|
-
|
|
149
135
|
def force_equal_sign_alignment?
|
|
150
136
|
cop_config['ForceEqualSignAlignment']
|
|
151
137
|
end
|
|
@@ -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
|
|
@@ -55,7 +55,7 @@ module RuboCop
|
|
|
55
55
|
MSG = 'Missing space after `#`.'
|
|
56
56
|
|
|
57
57
|
def investigate(processed_source)
|
|
58
|
-
processed_source.
|
|
58
|
+
processed_source.comments.each do |comment|
|
|
59
59
|
next unless /\A#+[^#\s=:+-]/.match?(comment.text)
|
|
60
60
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
|
61
61
|
next if doxygen_comment_style?(comment)
|
|
@@ -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
|
|
@@ -134,7 +134,7 @@ module RuboCop
|
|
|
134
134
|
|
|
135
135
|
def autocorrect(range)
|
|
136
136
|
lambda do |corrector|
|
|
137
|
-
if range.source
|
|
137
|
+
if /\*\*/.match?(range.source) && !space_around_exponent_operator?
|
|
138
138
|
corrector.replace(range, '**')
|
|
139
139
|
elsif range.source.end_with?("\n")
|
|
140
140
|
corrector.replace(range, " #{range.source.strip}\n")
|
|
@@ -27,6 +27,20 @@ module RuboCop
|
|
|
27
27
|
# foo.map{ |a|
|
|
28
28
|
# a.bar.to_s
|
|
29
29
|
# }
|
|
30
|
+
#
|
|
31
|
+
# @example EnforcedStyleForEmptyBraces: space (default)
|
|
32
|
+
# # bad
|
|
33
|
+
# 7.times{}
|
|
34
|
+
#
|
|
35
|
+
# # good
|
|
36
|
+
# 7.times {}
|
|
37
|
+
#
|
|
38
|
+
# @example EnforcedStyleForEmptyBraces: no_space
|
|
39
|
+
# # bad
|
|
40
|
+
# 7.times {}
|
|
41
|
+
#
|
|
42
|
+
# # good
|
|
43
|
+
# 7.times{}
|
|
30
44
|
class SpaceBeforeBlockBraces < Cop
|
|
31
45
|
include ConfigurableEnforcedStyle
|
|
32
46
|
include RangeHelp
|
|
@@ -130,7 +130,7 @@ module RuboCop
|
|
|
130
130
|
line, col = line_and_column_for(token)
|
|
131
131
|
return true if col == -1
|
|
132
132
|
|
|
133
|
-
processed_source.lines[line][0..col]
|
|
133
|
+
!/\S/.match?(processed_source.lines[line][0..col])
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
def index_for(node, token)
|
|
@@ -142,11 +142,12 @@ module RuboCop
|
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
def issue_offenses(node, left, right, start_ok, end_ok)
|
|
145
|
-
|
|
145
|
+
case style
|
|
146
|
+
when :no_space
|
|
146
147
|
start_ok = next_to_comment?(node, left)
|
|
147
148
|
no_space_offenses(node, left, right, MSG, start_ok: start_ok,
|
|
148
149
|
end_ok: end_ok)
|
|
149
|
-
|
|
150
|
+
when :space
|
|
150
151
|
space_offenses(node, left, right, MSG, start_ok: start_ok,
|
|
151
152
|
end_ok: end_ok)
|
|
152
153
|
else
|
|
@@ -150,7 +150,7 @@ module RuboCop
|
|
|
150
150
|
end
|
|
151
151
|
|
|
152
152
|
def check_right_brace(inner, left_brace, right_brace, single_line)
|
|
153
|
-
if single_line &&
|
|
153
|
+
if single_line && /\S$/.match?(inner)
|
|
154
154
|
no_space(right_brace.begin_pos, right_brace.end_pos,
|
|
155
155
|
'Space missing inside }.')
|
|
156
156
|
else
|
|
@@ -182,7 +182,7 @@ module RuboCop
|
|
|
182
182
|
def range_of_space_to_the_right(range)
|
|
183
183
|
src = range.source_buffer.source
|
|
184
184
|
end_pos = range.end_pos
|
|
185
|
-
end_pos += 1 while
|
|
185
|
+
end_pos += 1 while /[ \t]/.match?(src[end_pos])
|
|
186
186
|
|
|
187
187
|
range_between(range.begin_pos + 1, end_pos)
|
|
188
188
|
end
|
|
@@ -190,7 +190,7 @@ module RuboCop
|
|
|
190
190
|
def range_of_space_to_the_left(range)
|
|
191
191
|
src = range.source_buffer.source
|
|
192
192
|
begin_pos = range.begin_pos
|
|
193
|
-
begin_pos -= 1 while src[begin_pos - 1]
|
|
193
|
+
begin_pos -= 1 while /[ \t]/.match?(src[begin_pos - 1])
|
|
194
194
|
|
|
195
195
|
range_between(begin_pos, range.end_pos - 1)
|
|
196
196
|
end
|