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
data/lib/rubocop/cop/team.rb
CHANGED
|
@@ -10,23 +10,16 @@ module RuboCop
|
|
|
10
10
|
# first the ones needed for autocorrection (if any), then the rest
|
|
11
11
|
# (unless autocorrections happened).
|
|
12
12
|
class Team
|
|
13
|
-
DEFAULT_OPTIONS = {
|
|
14
|
-
auto_correct: false,
|
|
15
|
-
debug: false
|
|
16
|
-
}.freeze
|
|
17
|
-
|
|
18
|
-
Investigation = Struct.new(:offenses, :errors)
|
|
19
|
-
|
|
20
13
|
attr_reader :errors, :warnings, :updated_source_file, :cops
|
|
21
14
|
|
|
22
15
|
alias updated_source_file? updated_source_file
|
|
23
16
|
|
|
24
|
-
def initialize(cops, config = nil, options =
|
|
17
|
+
def initialize(cops, config = nil, options = {})
|
|
25
18
|
@cops = cops
|
|
26
19
|
@config = config
|
|
27
|
-
@options = options
|
|
28
|
-
|
|
29
|
-
@
|
|
20
|
+
@options = options
|
|
21
|
+
reset
|
|
22
|
+
@ready = true
|
|
30
23
|
|
|
31
24
|
validate_config
|
|
32
25
|
end
|
|
@@ -40,18 +33,17 @@ module RuboCop
|
|
|
40
33
|
end
|
|
41
34
|
|
|
42
35
|
# @return [Team] with cops assembled from the given `cop_classes`
|
|
43
|
-
def self.mobilize(cop_classes, config, options =
|
|
44
|
-
options ||= DEFAULT_OPTIONS
|
|
36
|
+
def self.mobilize(cop_classes, config, options = {})
|
|
45
37
|
cops = mobilize_cops(cop_classes, config, options)
|
|
46
38
|
new(cops, config, options)
|
|
47
39
|
end
|
|
48
40
|
|
|
49
41
|
# @return [Array<Cop::Cop>]
|
|
50
|
-
def self.mobilize_cops(cop_classes, config, options =
|
|
51
|
-
|
|
42
|
+
def self.mobilize_cops(cop_classes, config, options = {})
|
|
43
|
+
cop_classes = Registry.new(cop_classes.to_a) unless cop_classes.is_a?(Registry)
|
|
52
44
|
only = options.fetch(:only, [])
|
|
53
45
|
safe = options.fetch(:safe, false)
|
|
54
|
-
cop_classes.enabled(config, only, safe).map do |cop_class|
|
|
46
|
+
cop_classes.enabled(config, only, only_safe: safe).map do |cop_class|
|
|
55
47
|
cop_class.new(config, options)
|
|
56
48
|
end
|
|
57
49
|
end
|
|
@@ -64,93 +56,102 @@ module RuboCop
|
|
|
64
56
|
@options[:debug]
|
|
65
57
|
end
|
|
66
58
|
|
|
59
|
+
# @deprecated. Use investigate
|
|
60
|
+
# @return Array<offenses>
|
|
67
61
|
def inspect_file(processed_source)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
investigate(processed_source).offenses
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @return [Commissioner::InvestigationReport]
|
|
66
|
+
def investigate(processed_source)
|
|
67
|
+
be_ready
|
|
68
|
+
|
|
69
|
+
# The autocorrection process may have to be repeated multiple times
|
|
70
|
+
# until there are no corrections left to perform
|
|
71
|
+
# To speed things up, run auto-correcting cops by themselves, and only
|
|
72
|
+
# run the other cops when no corrections are left
|
|
73
|
+
on_duty = roundup_relevant_cops(processed_source.file_path)
|
|
74
|
+
|
|
75
|
+
autocorrect_cops, other_cops = on_duty.partition(&:autocorrect?)
|
|
76
|
+
|
|
77
|
+
report = investigate_partial(autocorrect_cops, processed_source)
|
|
78
|
+
|
|
79
|
+
unless autocorrect(processed_source, report)
|
|
80
|
+
# If we corrected some errors, another round of inspection will be
|
|
81
|
+
# done, and any other offenses will be caught then, so only need
|
|
82
|
+
# to check other_cops if no correction was done
|
|
83
|
+
report = report.merge(investigate_partial(other_cops, processed_source))
|
|
73
84
|
end
|
|
74
85
|
|
|
75
|
-
|
|
86
|
+
process_errors(processed_source.path, report.errors)
|
|
87
|
+
|
|
88
|
+
report
|
|
89
|
+
ensure
|
|
90
|
+
@ready = false
|
|
76
91
|
end
|
|
77
92
|
|
|
93
|
+
# @deprecated
|
|
78
94
|
def forces
|
|
79
|
-
@forces ||= forces_for(cops)
|
|
95
|
+
@forces ||= self.class.forces_for(cops)
|
|
80
96
|
end
|
|
81
97
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
98
|
+
# @return [Array<Force>] needed for the given cops
|
|
99
|
+
def self.forces_for(cops)
|
|
100
|
+
needed = Hash.new { |h, k| h[k] = [] }
|
|
101
|
+
cops.each do |cop|
|
|
102
|
+
Array(cop.class.joining_forces).each { |force| needed[force] << cop }
|
|
103
|
+
end
|
|
86
104
|
|
|
87
|
-
|
|
105
|
+
needed.map do |force_class, joining_cops|
|
|
106
|
+
force_class.new(joining_cops)
|
|
88
107
|
end
|
|
89
108
|
end
|
|
90
109
|
|
|
91
|
-
def
|
|
110
|
+
def external_dependency_checksum
|
|
111
|
+
keys = cops.map(&:external_dependency_checksum).compact
|
|
112
|
+
Digest::SHA1.hexdigest(keys.join)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
|
|
117
|
+
def autocorrect(processed_source, report)
|
|
92
118
|
@updated_source_file = false
|
|
93
119
|
return unless autocorrect?
|
|
94
120
|
|
|
95
|
-
new_source =
|
|
121
|
+
new_source = autocorrect_report(report)
|
|
96
122
|
|
|
97
|
-
return
|
|
123
|
+
return unless new_source
|
|
98
124
|
|
|
99
125
|
if @options[:stdin]
|
|
100
126
|
# holds source read in from stdin, when --stdin option is used
|
|
101
127
|
@options[:stdin] = new_source
|
|
102
128
|
else
|
|
103
|
-
filename = buffer.name
|
|
129
|
+
filename = processed_source.buffer.name
|
|
104
130
|
File.open(filename, 'w') { |f| f.write(new_source) }
|
|
105
131
|
end
|
|
106
132
|
@updated_source_file = true
|
|
107
|
-
rescue RuboCop::ErrorWithAnalyzedFileLocation => e
|
|
108
|
-
process_errors(buffer.name, [e])
|
|
109
|
-
raise e.cause
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def external_dependency_checksum
|
|
113
|
-
keys = cops.map(&:external_dependency_checksum).compact
|
|
114
|
-
Digest::SHA1.hexdigest(keys.join)
|
|
115
133
|
end
|
|
116
134
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def offenses(processed_source) # rubocop:disable Metrics/AbcSize
|
|
120
|
-
# The autocorrection process may have to be repeated multiple times
|
|
121
|
-
# until there are no corrections left to perform
|
|
122
|
-
# To speed things up, run auto-correcting cops by themselves, and only
|
|
123
|
-
# run the other cops when no corrections are left
|
|
124
|
-
on_duty = roundup_relevant_cops(processed_source.file_path)
|
|
125
|
-
|
|
126
|
-
autocorrect_cops, other_cops = on_duty.partition(&:autocorrect?)
|
|
127
|
-
|
|
128
|
-
autocorrect = investigate(autocorrect_cops, processed_source)
|
|
129
|
-
|
|
130
|
-
if autocorrect(processed_source.buffer, autocorrect_cops)
|
|
131
|
-
# We corrected some errors. Another round of inspection will be
|
|
132
|
-
# done, and any other offenses will be caught then, so we don't
|
|
133
|
-
# need to continue.
|
|
134
|
-
return autocorrect.offenses
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
other = investigate(other_cops, processed_source)
|
|
135
|
+
def be_ready
|
|
136
|
+
return if @ready
|
|
138
137
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
autocorrect.offenses.concat(other.offenses)
|
|
138
|
+
reset
|
|
139
|
+
@cops.map!(&:ready)
|
|
140
|
+
@ready = true
|
|
143
141
|
end
|
|
144
142
|
|
|
145
|
-
def
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
offenses = commissioner.investigate(processed_source)
|
|
143
|
+
def reset
|
|
144
|
+
@errors = []
|
|
145
|
+
@warnings = []
|
|
146
|
+
end
|
|
150
147
|
|
|
151
|
-
|
|
148
|
+
# @return [Commissioner::InvestigationReport]
|
|
149
|
+
def investigate_partial(cops, processed_source)
|
|
150
|
+
commissioner = Commissioner.new(cops, self.class.forces_for(cops), @options)
|
|
151
|
+
commissioner.investigate(processed_source)
|
|
152
152
|
end
|
|
153
153
|
|
|
154
|
+
# @return [Array<cop>]
|
|
154
155
|
def roundup_relevant_cops(filename)
|
|
155
156
|
cops.reject do |cop|
|
|
156
157
|
cop.excluded_file?(filename) ||
|
|
@@ -171,30 +172,45 @@ module RuboCop
|
|
|
171
172
|
cop.class.support_target_rails_version?(cop.target_rails_version)
|
|
172
173
|
end
|
|
173
174
|
|
|
174
|
-
def
|
|
175
|
-
corrector =
|
|
175
|
+
def autocorrect_report(report)
|
|
176
|
+
corrector = collate_corrections(report)
|
|
176
177
|
|
|
177
|
-
|
|
178
|
+
corrector.rewrite unless corrector.empty?
|
|
179
|
+
end
|
|
178
180
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
def collate_corrections(report)
|
|
182
|
+
corrector = Corrector.new(report.processed_source)
|
|
183
|
+
|
|
184
|
+
each_corrector(report) do |to_merge|
|
|
185
|
+
suppress_clobbering do
|
|
186
|
+
corrector.merge!(to_merge)
|
|
187
|
+
end
|
|
183
188
|
end
|
|
189
|
+
|
|
190
|
+
corrector
|
|
184
191
|
end
|
|
185
192
|
|
|
186
|
-
def
|
|
193
|
+
def each_corrector(report)
|
|
187
194
|
skips = Set.new
|
|
195
|
+
report.cop_reports.each do |cop_report|
|
|
196
|
+
cop = cop_report.cop
|
|
197
|
+
corrector = cop_report.corrector
|
|
188
198
|
|
|
189
|
-
|
|
190
|
-
next if cop.corrections.empty?
|
|
199
|
+
next if corrector.nil? || corrector.empty?
|
|
191
200
|
next if skips.include?(cop.class)
|
|
192
201
|
|
|
193
|
-
corrector
|
|
202
|
+
yield corrector
|
|
203
|
+
|
|
194
204
|
skips.merge(cop.class.autocorrect_incompatible_with)
|
|
195
205
|
end
|
|
196
206
|
end
|
|
197
207
|
|
|
208
|
+
def suppress_clobbering
|
|
209
|
+
yield
|
|
210
|
+
rescue ::Parser::ClobberingError
|
|
211
|
+
# ignore Clobbering errors
|
|
212
|
+
end
|
|
213
|
+
|
|
198
214
|
def validate_config
|
|
199
215
|
cops.each do |cop|
|
|
200
216
|
cop.validate_config if cop.respond_to?(:validate_config)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module RuboCop
|
|
4
|
+
# Common methods and behaviors for dealing with tokens.
|
|
5
|
+
module TokensUtil
|
|
6
|
+
module_function
|
|
7
|
+
|
|
8
|
+
# rubocop:disable Metrics/AbcSize
|
|
9
|
+
def tokens(node)
|
|
10
|
+
@tokens ||= {}
|
|
11
|
+
return @tokens[node.object_id] if @tokens[node.object_id]
|
|
12
|
+
|
|
13
|
+
@tokens[node.object_id] =
|
|
14
|
+
# The tokens list is always sorted by token position,
|
|
15
|
+
# except for cases when heredoc is passed as a method argument.
|
|
16
|
+
# In this case tokens are interleaved by heredoc contents' tokens.
|
|
17
|
+
# We can try a fast (binary) search, assuming the mentioned cases are rare,
|
|
18
|
+
# and fallback to linear search if failed.
|
|
19
|
+
if (tokens = fast_tokens(node))
|
|
20
|
+
tokens
|
|
21
|
+
else
|
|
22
|
+
begin_pos = node.source_range.begin_pos
|
|
23
|
+
end_pos = node.source_range.end_pos
|
|
24
|
+
|
|
25
|
+
processed_source.tokens.select do |token|
|
|
26
|
+
token.end_pos <= end_pos && token.begin_pos >= begin_pos
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
# rubocop:enable Metrics/AbcSize
|
|
31
|
+
|
|
32
|
+
def index_of_first_token(node)
|
|
33
|
+
index = fast_index_of_first_token(node)
|
|
34
|
+
return index if index
|
|
35
|
+
|
|
36
|
+
begin_pos = node.source_range.begin_pos
|
|
37
|
+
processed_source.tokens.index { |token| token.begin_pos == begin_pos }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def index_of_last_token(node)
|
|
41
|
+
index = fast_index_of_last_token(node)
|
|
42
|
+
return index if index
|
|
43
|
+
|
|
44
|
+
end_pos = node.source_range.end_pos
|
|
45
|
+
processed_source.tokens.index { |token| token.end_pos == end_pos }
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def fast_index_of_first_token(node)
|
|
51
|
+
begin_pos = node.source_range.begin_pos
|
|
52
|
+
tokens = processed_source.tokens
|
|
53
|
+
|
|
54
|
+
index = tokens.bsearch_index { |token| token.begin_pos >= begin_pos }
|
|
55
|
+
index if index && tokens[index].begin_pos == begin_pos
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def fast_index_of_last_token(node)
|
|
59
|
+
end_pos = node.source_range.end_pos
|
|
60
|
+
tokens = processed_source.tokens
|
|
61
|
+
|
|
62
|
+
index = tokens.bsearch_index { |token| token.end_pos >= end_pos }
|
|
63
|
+
index if index && tokens[index].end_pos == end_pos
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def fast_tokens(node)
|
|
67
|
+
begin_index = index_of_first_token(node)
|
|
68
|
+
end_index = index_of_last_token(node)
|
|
69
|
+
|
|
70
|
+
tokens = processed_source.tokens[begin_index..end_index]
|
|
71
|
+
tokens if sorted_tokens?(tokens)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def sorted_tokens?(tokens)
|
|
75
|
+
prev_begin_pos = -1
|
|
76
|
+
tokens.each do |token|
|
|
77
|
+
return false if token.begin_pos < prev_begin_pos
|
|
78
|
+
|
|
79
|
+
prev_begin_pos = token.begin_pos
|
|
80
|
+
end
|
|
81
|
+
true
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
data/lib/rubocop/cop/util.rb
CHANGED
|
@@ -5,6 +5,7 @@ module RuboCop
|
|
|
5
5
|
# This module contains a collection of useful utility methods.
|
|
6
6
|
module Util
|
|
7
7
|
include PathUtil
|
|
8
|
+
include TokensUtil
|
|
8
9
|
|
|
9
10
|
# Match literal regex characters, not including anchors, character
|
|
10
11
|
# classes, alternatives, groups, repetitions, references, etc
|
|
@@ -13,10 +14,12 @@ module RuboCop
|
|
|
13
14
|
|
|
14
15
|
module_function
|
|
15
16
|
|
|
17
|
+
# This is a bad API
|
|
16
18
|
def comment_line?(line_source)
|
|
17
|
-
|
|
19
|
+
/^\s*#/.match?(line_source)
|
|
18
20
|
end
|
|
19
21
|
|
|
22
|
+
# @deprecated Use `ProcessedSource#line_with_comment?`, `contains_comment` or similar
|
|
20
23
|
def comment_lines?(node)
|
|
21
24
|
processed_source[line_range(node)].any? { |line| comment_line?(line) }
|
|
22
25
|
end
|
|
@@ -88,7 +91,7 @@ module RuboCop
|
|
|
88
91
|
|
|
89
92
|
# Regex matches IF there is a ' or there is a \\ in the string that is
|
|
90
93
|
# not preceded/followed by another \\ (e.g. "\\x34") but not "\\\\".
|
|
91
|
-
|
|
94
|
+
/'|(?<! \\) \\{2}* \\ (?![\\"])/x.match?(string)
|
|
92
95
|
end
|
|
93
96
|
|
|
94
97
|
def needs_escaping?(string)
|
|
@@ -127,19 +130,6 @@ module RuboCop
|
|
|
127
130
|
.sub('Style', 'Styles')
|
|
128
131
|
end
|
|
129
132
|
|
|
130
|
-
def tokens(node)
|
|
131
|
-
@tokens ||= {}
|
|
132
|
-
return @tokens[node.object_id] if @tokens[node.object_id]
|
|
133
|
-
|
|
134
|
-
source_range = node.source_range
|
|
135
|
-
begin_pos = source_range.begin_pos
|
|
136
|
-
end_pos = source_range.end_pos
|
|
137
|
-
|
|
138
|
-
@tokens[node.object_id] = processed_source.tokens.select do |token|
|
|
139
|
-
token.end_pos <= end_pos && token.begin_pos >= begin_pos
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
|
|
143
133
|
private
|
|
144
134
|
|
|
145
135
|
def compatible_external_encoding_for?(src)
|
|
@@ -41,8 +41,7 @@ module RuboCop
|
|
|
41
41
|
#
|
|
42
42
|
# @see https://ruby-doc.org/core-2.6.3/Kernel.html#method-i-format
|
|
43
43
|
class FormatSequence
|
|
44
|
-
attr_reader :begin_pos, :end_pos
|
|
45
|
-
attr_reader :flags, :width, :precision, :name, :type
|
|
44
|
+
attr_reader :begin_pos, :end_pos, :flags, :width, :precision, :name, :type
|
|
46
45
|
|
|
47
46
|
def initialize(match)
|
|
48
47
|
@source = match[0]
|
|
@@ -120,7 +119,7 @@ module RuboCop
|
|
|
120
119
|
end
|
|
121
120
|
|
|
122
121
|
def mixed_formats?
|
|
123
|
-
formats = format_sequences.map do |seq|
|
|
122
|
+
formats = format_sequences.reject(&:percent?).map do |seq|
|
|
124
123
|
if seq.name
|
|
125
124
|
:named
|
|
126
125
|
elsif seq.max_digit_dollar_num
|
|
@@ -38,14 +38,14 @@ module RuboCop
|
|
|
38
38
|
!@references.empty?
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
41
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
42
42
|
def reference!(node)
|
|
43
43
|
reference = Reference.new(node, @scope)
|
|
44
44
|
@references << reference
|
|
45
|
-
consumed_branches =
|
|
45
|
+
consumed_branches = nil
|
|
46
46
|
|
|
47
47
|
@assignments.reverse_each do |assignment|
|
|
48
|
-
next if consumed_branches
|
|
48
|
+
next if consumed_branches&.include?(assignment.branch)
|
|
49
49
|
|
|
50
50
|
assignment.reference!(node) unless assignment.run_exclusively_with?(reference)
|
|
51
51
|
|
|
@@ -58,10 +58,12 @@ module RuboCop
|
|
|
58
58
|
|
|
59
59
|
break if !assignment.branch || assignment.branch == reference.branch
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
unless assignment.branch.may_run_incompletely?
|
|
62
|
+
(consumed_branches ||= Set.new) << assignment.branch
|
|
63
|
+
end
|
|
62
64
|
end
|
|
63
65
|
end
|
|
64
|
-
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
|
66
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
|
65
67
|
|
|
66
68
|
def in_modifier_if?(assignment)
|
|
67
69
|
parent = assignment.node.parent
|
|
@@ -197,7 +197,6 @@ module RuboCop
|
|
|
197
197
|
regexp.named_captures.keys
|
|
198
198
|
end
|
|
199
199
|
|
|
200
|
-
# rubocop:disable Metrics/AbcSize
|
|
201
200
|
def process_variable_operator_assignment(node)
|
|
202
201
|
if LOGICAL_OPERATOR_ASSIGNMENT_TYPES.include?(node.type)
|
|
203
202
|
asgn_node, rhs_node = *node
|
|
@@ -232,7 +231,6 @@ module RuboCop
|
|
|
232
231
|
|
|
233
232
|
skip_children!
|
|
234
233
|
end
|
|
235
|
-
# rubocop:enable Metrics/AbcSize
|
|
236
234
|
|
|
237
235
|
def process_variable_multiple_assignment(node)
|
|
238
236
|
lhs_node, rhs_node = *node
|