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
|
@@ -19,6 +19,15 @@ module RuboCop
|
|
|
19
19
|
# @@test = 10
|
|
20
20
|
# end
|
|
21
21
|
#
|
|
22
|
+
# class A
|
|
23
|
+
# def self.test(name, value)
|
|
24
|
+
# class_variable_set("@@#{name}", value)
|
|
25
|
+
# end
|
|
26
|
+
# end
|
|
27
|
+
#
|
|
28
|
+
# class A; end
|
|
29
|
+
# A.class_variable_set(:@@test, 10)
|
|
30
|
+
#
|
|
22
31
|
# # good
|
|
23
32
|
# class A
|
|
24
33
|
# @test = 10
|
|
@@ -30,17 +39,25 @@ module RuboCop
|
|
|
30
39
|
# end
|
|
31
40
|
# end
|
|
32
41
|
#
|
|
33
|
-
class
|
|
34
|
-
|
|
35
|
-
|
|
42
|
+
# class A
|
|
43
|
+
# def self.test(name)
|
|
44
|
+
# class_variable_get("@@#{name}") # you can access without offense
|
|
45
|
+
# end
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
class ClassVars < Base
|
|
49
|
+
MSG = 'Replace class var %<class_var>s with a class instance var.'
|
|
36
50
|
|
|
37
51
|
def on_cvasgn(node)
|
|
38
|
-
add_offense(node,
|
|
52
|
+
add_offense(node.loc.name, message: format(MSG, class_var: node.children.first))
|
|
39
53
|
end
|
|
40
54
|
|
|
41
|
-
def
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
def on_send(node)
|
|
56
|
+
return unless node.method?(:class_variable_set)
|
|
57
|
+
|
|
58
|
+
add_offense(
|
|
59
|
+
node.first_argument, message: format(MSG, class_var: node.first_argument.source)
|
|
60
|
+
)
|
|
44
61
|
end
|
|
45
62
|
end
|
|
46
63
|
end
|
|
@@ -37,8 +37,9 @@ module RuboCop
|
|
|
37
37
|
# items.select
|
|
38
38
|
# items.include?
|
|
39
39
|
#
|
|
40
|
-
class CollectionMethods <
|
|
40
|
+
class CollectionMethods < Base
|
|
41
41
|
include MethodPreference
|
|
42
|
+
extend AutoCorrector
|
|
42
43
|
|
|
43
44
|
MSG = 'Prefer `%<prefer>s` over `%<current>s`.'
|
|
44
45
|
|
|
@@ -47,31 +48,24 @@ module RuboCop
|
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
def on_send(node)
|
|
50
|
-
return unless node.arguments.one? &&
|
|
51
|
-
node.first_argument.block_pass_type?
|
|
51
|
+
return unless node.arguments.one? && node.first_argument.block_pass_type?
|
|
52
52
|
|
|
53
53
|
check_method_node(node)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
def autocorrect(node)
|
|
57
|
-
lambda do |corrector|
|
|
58
|
-
corrector.replace(node.loc.selector,
|
|
59
|
-
preferred_method(node.loc.selector.source))
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
56
|
private
|
|
64
57
|
|
|
65
|
-
def message(node)
|
|
66
|
-
format(MSG,
|
|
67
|
-
prefer: preferred_method(node.method_name),
|
|
68
|
-
current: node.method_name)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
58
|
def check_method_node(node)
|
|
72
59
|
return unless preferred_methods[node.method_name]
|
|
73
60
|
|
|
74
|
-
|
|
61
|
+
message = message(node)
|
|
62
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
|
63
|
+
corrector.replace(node.loc.selector, preferred_method(node.loc.selector.source))
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def message(node)
|
|
68
|
+
format(MSG, prefer: preferred_method(node.method_name), current: node.method_name)
|
|
75
69
|
end
|
|
76
70
|
end
|
|
77
71
|
end
|
|
@@ -17,7 +17,9 @@ module RuboCop
|
|
|
17
17
|
# FileUtils.rmdir(dir)
|
|
18
18
|
# Marshal.dump(obj)
|
|
19
19
|
#
|
|
20
|
-
class ColonMethodCall <
|
|
20
|
+
class ColonMethodCall < Base
|
|
21
|
+
extend AutoCorrector
|
|
22
|
+
|
|
21
23
|
MSG = 'Do not use `::` for method calls.'
|
|
22
24
|
|
|
23
25
|
def_node_matcher :java_type_node?, <<~PATTERN
|
|
@@ -30,17 +32,14 @@ module RuboCop
|
|
|
30
32
|
end
|
|
31
33
|
|
|
32
34
|
def on_send(node)
|
|
33
|
-
# ignore Java interop code like Java::int
|
|
34
|
-
return if java_type_node?(node)
|
|
35
|
-
|
|
36
35
|
return unless node.receiver && node.double_colon?
|
|
37
36
|
return if node.camel_case_method?
|
|
37
|
+
# ignore Java interop code like Java::int
|
|
38
|
+
return if java_type_node?(node)
|
|
38
39
|
|
|
39
|
-
add_offense(node
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def autocorrect(node)
|
|
43
|
-
->(corrector) { corrector.replace(node.loc.dot, '.') }
|
|
40
|
+
add_offense(node.loc.dot) do |corrector|
|
|
41
|
+
corrector.replace(node.loc.dot, '.')
|
|
42
|
+
end
|
|
44
43
|
end
|
|
45
44
|
end
|
|
46
45
|
end
|
|
@@ -19,17 +19,17 @@ module RuboCop
|
|
|
19
19
|
# end
|
|
20
20
|
# end
|
|
21
21
|
#
|
|
22
|
-
class ColonMethodDefinition <
|
|
22
|
+
class ColonMethodDefinition < Base
|
|
23
|
+
extend AutoCorrector
|
|
24
|
+
|
|
23
25
|
MSG = 'Do not use `::` for defining class methods.'
|
|
24
26
|
|
|
25
27
|
def on_defs(node)
|
|
26
28
|
return unless node.loc.operator.source == '::'
|
|
27
29
|
|
|
28
|
-
add_offense(node
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def autocorrect(node)
|
|
32
|
-
->(corrector) { corrector.replace(node.loc.operator, '.') }
|
|
30
|
+
add_offense(node.loc.operator) do |corrector|
|
|
31
|
+
corrector.replace(node.loc.operator, '.')
|
|
32
|
+
end
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -75,8 +75,9 @@ module RuboCop
|
|
|
75
75
|
# @example AllowInnerBackticks: true
|
|
76
76
|
# # good
|
|
77
77
|
# `echo \`ls\``
|
|
78
|
-
class CommandLiteral <
|
|
78
|
+
class CommandLiteral < Base
|
|
79
79
|
include ConfigurableEnforcedStyle
|
|
80
|
+
extend AutoCorrector
|
|
80
81
|
|
|
81
82
|
MSG_USE_BACKTICKS = 'Use backticks around command string.'
|
|
82
83
|
MSG_USE_PERCENT_X = 'Use `%x` around command string.'
|
|
@@ -85,43 +86,41 @@ module RuboCop
|
|
|
85
86
|
return if node.heredoc?
|
|
86
87
|
|
|
87
88
|
if backtick_literal?(node)
|
|
88
|
-
check_backtick_literal(node)
|
|
89
|
+
check_backtick_literal(node, MSG_USE_PERCENT_X)
|
|
89
90
|
else
|
|
90
|
-
check_percent_x_literal(node)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def autocorrect(node)
|
|
95
|
-
return if contains_backtick?(node)
|
|
96
|
-
|
|
97
|
-
replacement = if backtick_literal?(node)
|
|
98
|
-
['%x', ''].zip(preferred_delimiter).map(&:join)
|
|
99
|
-
else
|
|
100
|
-
%w[` `]
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
lambda do |corrector|
|
|
104
|
-
corrector.replace(node.loc.begin, replacement.first)
|
|
105
|
-
corrector.replace(node.loc.end, replacement.last)
|
|
91
|
+
check_percent_x_literal(node, MSG_USE_BACKTICKS)
|
|
106
92
|
end
|
|
107
93
|
end
|
|
108
94
|
|
|
109
95
|
private
|
|
110
96
|
|
|
111
|
-
def check_backtick_literal(node)
|
|
97
|
+
def check_backtick_literal(node, message)
|
|
112
98
|
return if allowed_backtick_literal?(node)
|
|
113
99
|
|
|
114
|
-
add_offense(node)
|
|
100
|
+
add_offense(node, message: message) do |corrector|
|
|
101
|
+
autocorrect(corrector, node)
|
|
102
|
+
end
|
|
115
103
|
end
|
|
116
104
|
|
|
117
|
-
def check_percent_x_literal(node)
|
|
105
|
+
def check_percent_x_literal(node, message)
|
|
118
106
|
return if allowed_percent_x_literal?(node)
|
|
119
107
|
|
|
120
|
-
add_offense(node)
|
|
108
|
+
add_offense(node, message: message) do |corrector|
|
|
109
|
+
autocorrect(corrector, node)
|
|
110
|
+
end
|
|
121
111
|
end
|
|
122
112
|
|
|
123
|
-
def
|
|
124
|
-
|
|
113
|
+
def autocorrect(corrector, node)
|
|
114
|
+
return if contains_backtick?(node)
|
|
115
|
+
|
|
116
|
+
replacement = if backtick_literal?(node)
|
|
117
|
+
['%x', ''].zip(preferred_delimiter).map(&:join)
|
|
118
|
+
else
|
|
119
|
+
%w[` `]
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
corrector.replace(node.loc.begin, replacement.first)
|
|
123
|
+
corrector.replace(node.loc.end, replacement.last)
|
|
125
124
|
end
|
|
126
125
|
|
|
127
126
|
def allowed_backtick_literal?(node)
|
|
@@ -153,7 +152,7 @@ module RuboCop
|
|
|
153
152
|
end
|
|
154
153
|
|
|
155
154
|
def contains_backtick?(node)
|
|
156
|
-
node_body(node)
|
|
155
|
+
/`/.match?(node_body(node))
|
|
157
156
|
end
|
|
158
157
|
|
|
159
158
|
def node_body(node)
|
|
@@ -30,9 +30,10 @@ module RuboCop
|
|
|
30
30
|
#
|
|
31
31
|
# # good
|
|
32
32
|
# # OPTIMIZE: does not work
|
|
33
|
-
class CommentAnnotation <
|
|
33
|
+
class CommentAnnotation < Base
|
|
34
34
|
include AnnotationComment
|
|
35
35
|
include RangeHelp
|
|
36
|
+
extend AutoCorrector
|
|
36
37
|
|
|
37
38
|
MSG = 'Annotation keywords like `%<keyword>s` should be all ' \
|
|
38
39
|
'upper case, followed by a colon, and a space, ' \
|
|
@@ -40,7 +41,7 @@ module RuboCop
|
|
|
40
41
|
MISSING_NOTE = 'Annotation comment, with keyword `%<keyword>s`, ' \
|
|
41
42
|
'is missing a note.'
|
|
42
43
|
|
|
43
|
-
def
|
|
44
|
+
def on_new_investigation
|
|
44
45
|
processed_source.comments.each_with_index do |comment, index|
|
|
45
46
|
next unless first_comment_line?(processed_source.comments, index) ||
|
|
46
47
|
inline_comment?(comment)
|
|
@@ -49,26 +50,25 @@ module RuboCop
|
|
|
49
50
|
next unless annotation?(comment) &&
|
|
50
51
|
!correct_annotation?(first_word, colon, space, note)
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
first_word, colon, space),
|
|
56
|
-
message: format(note ? MSG : MISSING_NOTE, keyword: first_word)
|
|
57
|
-
)
|
|
53
|
+
range = annotation_range(comment, margin, first_word, colon, space)
|
|
54
|
+
|
|
55
|
+
register_offense(range, note, first_word)
|
|
58
56
|
end
|
|
59
57
|
end
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
margin, first_word, colon, space, note = split_comment(comment)
|
|
63
|
-
return if note.nil?
|
|
59
|
+
private
|
|
64
60
|
|
|
65
|
-
|
|
61
|
+
def register_offense(range, note, first_word)
|
|
62
|
+
add_offense(
|
|
63
|
+
range,
|
|
64
|
+
message: format(note ? MSG : MISSING_NOTE, keyword: first_word)
|
|
65
|
+
) do |corrector|
|
|
66
|
+
next if note.nil?
|
|
66
67
|
|
|
67
|
-
|
|
68
|
+
corrector.replace(range, "#{first_word.upcase}: ")
|
|
69
|
+
end
|
|
68
70
|
end
|
|
69
71
|
|
|
70
|
-
private
|
|
71
|
-
|
|
72
72
|
def first_comment_line?(comments, index)
|
|
73
73
|
index.zero? ||
|
|
74
74
|
comments[index - 1].loc.line < comments[index].loc.line - 1
|
|
@@ -38,7 +38,7 @@ module RuboCop
|
|
|
38
38
|
'`%<keyword>s` keyword.'
|
|
39
39
|
|
|
40
40
|
def investigate(processed_source)
|
|
41
|
-
processed_source.
|
|
41
|
+
processed_source.comments.each do |comment|
|
|
42
42
|
add_offense(comment) if offensive?(comment)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
@@ -46,17 +46,20 @@ module RuboCop
|
|
|
46
46
|
private
|
|
47
47
|
|
|
48
48
|
KEYWORDS = %w[begin class def end module].freeze
|
|
49
|
+
KEYWORD_REGEXES = KEYWORDS.map { |w| /^\s*#{w}\s/ }.freeze
|
|
50
|
+
|
|
49
51
|
ALLOWED_COMMENTS = %w[
|
|
50
52
|
:nodoc:
|
|
51
53
|
:yields:
|
|
52
54
|
rubocop:disable
|
|
53
55
|
rubocop:todo
|
|
54
56
|
].freeze
|
|
57
|
+
ALLOWED_COMMENT_REGEXES = ALLOWED_COMMENTS.map { |c| /#\s*#{c}/ }.freeze
|
|
55
58
|
|
|
56
59
|
def offensive?(comment)
|
|
57
60
|
line = line(comment)
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
KEYWORD_REGEXES.any? { |r| r.match?(line) } &&
|
|
62
|
+
ALLOWED_COMMENT_REGEXES.none? { |r| r.match?(line) }
|
|
60
63
|
end
|
|
61
64
|
|
|
62
65
|
def message(comment)
|
|
@@ -30,7 +30,7 @@ module RuboCop
|
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def tail(branch)
|
|
33
|
-
branch.begin_type? ?
|
|
33
|
+
branch.begin_type? ? Array(branch).last : branch
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
# rubocop:disable Metrics/AbcSize
|
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
|
43
43
|
when :and_asgn, :or_asgn
|
|
44
44
|
"#{node.children[0].source} #{node.loc.operator.source} "
|
|
45
45
|
when :casgn
|
|
46
|
-
|
|
46
|
+
lhs_for_casgn(node)
|
|
47
47
|
when *ConditionalAssignment::VARIABLE_ASSIGNMENT_TYPES
|
|
48
48
|
"#{node.children[0]} = "
|
|
49
49
|
else
|
|
@@ -93,6 +93,15 @@ module RuboCop
|
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
+
def lhs_for_casgn(node)
|
|
97
|
+
namespace = node.children[0]
|
|
98
|
+
if namespace.nil? || namespace.cbase_type?
|
|
99
|
+
"#{namespace&.source}#{node.children[1]} = "
|
|
100
|
+
else
|
|
101
|
+
"#{namespace.source}::#{node.children[1]} = "
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
96
105
|
def setter_method?(method_name)
|
|
97
106
|
method_name.to_s.end_with?(EQUAL) &&
|
|
98
107
|
!%i[!= == === >= <=].include?(method_name)
|
|
@@ -224,7 +233,7 @@ module RuboCop
|
|
|
224
233
|
def_node_matcher :assignment_type?, <<~PATTERN
|
|
225
234
|
{
|
|
226
235
|
#{ASSIGNMENT_TYPES.join(' ')}
|
|
227
|
-
(send _recv {:[]= :<< :=~ :!~ :<=> #end_with_eq?} ...)
|
|
236
|
+
(send _recv {:[]= :<< :=~ :!~ :<=> #end_with_eq? :< :>} ...)
|
|
228
237
|
}
|
|
229
238
|
PATTERN
|
|
230
239
|
|
|
@@ -26,7 +26,7 @@ module RuboCop
|
|
|
26
26
|
# public_constant :BAZ
|
|
27
27
|
# end
|
|
28
28
|
#
|
|
29
|
-
class ConstantVisibility <
|
|
29
|
+
class ConstantVisibility < Base
|
|
30
30
|
MSG = 'Explicitly make `%<constant_name>s` public or private using ' \
|
|
31
31
|
'either `#public_constant` or `#private_constant`.'
|
|
32
32
|
|
|
@@ -34,7 +34,8 @@ module RuboCop
|
|
|
34
34
|
return unless class_or_module_scope?(node)
|
|
35
35
|
return if visibility_declaration?(node)
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
message = message(node)
|
|
38
|
+
add_offense(node, message: message)
|
|
38
39
|
end
|
|
39
40
|
|
|
40
41
|
private
|
|
@@ -15,28 +15,24 @@ module RuboCop
|
|
|
15
15
|
# that RuboCop scans, a comment that matches this regex must be found or
|
|
16
16
|
# an offense is reported.
|
|
17
17
|
#
|
|
18
|
-
class Copyright <
|
|
18
|
+
class Copyright < Base
|
|
19
19
|
include RangeHelp
|
|
20
|
+
extend AutoCorrector
|
|
20
21
|
|
|
21
22
|
MSG = 'Include a copyright notice matching /%<notice>s/ before ' \
|
|
22
23
|
'any code.'
|
|
23
24
|
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in ' \
|
|
24
25
|
'your RuboCop config'
|
|
25
26
|
|
|
26
|
-
def
|
|
27
|
-
return if notice.empty?
|
|
28
|
-
return if notice_found?(processed_source)
|
|
27
|
+
def on_new_investigation
|
|
28
|
+
return if notice.empty? || notice_found?(processed_source)
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
location: range, message: format(MSG, notice: notice))
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def autocorrect(token)
|
|
36
|
-
verify_autocorrect_notice!
|
|
30
|
+
add_offense(offense_range, message: format(MSG, notice: notice)) do |corrector|
|
|
31
|
+
verify_autocorrect_notice!
|
|
37
32
|
|
|
38
|
-
|
|
33
|
+
token = insert_notice_before(processed_source)
|
|
39
34
|
range = token.nil? ? range_between(0, 0) : token.pos
|
|
35
|
+
|
|
40
36
|
corrector.insert_before(range, "#{autocorrect_notice}\n")
|
|
41
37
|
end
|
|
42
38
|
end
|
|
@@ -51,6 +47,10 @@ module RuboCop
|
|
|
51
47
|
cop_config['AutocorrectNotice']
|
|
52
48
|
end
|
|
53
49
|
|
|
50
|
+
def offense_range
|
|
51
|
+
source_range(processed_source.buffer, 1, 0)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
54
|
def verify_autocorrect_notice!
|
|
55
55
|
raise Warning, AUTOCORRECT_EMPTY_WARNING if autocorrect_notice.empty?
|
|
56
56
|
|
|
@@ -72,14 +72,14 @@ module RuboCop
|
|
|
72
72
|
return false if token_index >= processed_source.tokens.size
|
|
73
73
|
|
|
74
74
|
token = processed_source.tokens[token_index]
|
|
75
|
-
token.comment? && token.text
|
|
75
|
+
token.comment? && /^#!.*$/.match?(token.text)
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def encoding_token?(processed_source, token_index)
|
|
79
79
|
return false if token_index >= processed_source.tokens.size
|
|
80
80
|
|
|
81
81
|
token = processed_source.tokens[token_index]
|
|
82
|
-
token.comment? &&
|
|
82
|
+
token.comment? && /^#.*coding\s?[:=]\s?(?:UTF|utf)-8/.match?(token.text)
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
def notice_found?(processed_source)
|
|
@@ -88,7 +88,7 @@ module RuboCop
|
|
|
88
88
|
processed_source.each_token do |token|
|
|
89
89
|
break unless token.comment?
|
|
90
90
|
|
|
91
|
-
notice_found =
|
|
91
|
+
notice_found = notice_regexp.match?(token.text)
|
|
92
92
|
break if notice_found
|
|
93
93
|
end
|
|
94
94
|
notice_found
|
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
|
41
41
|
#
|
|
42
42
|
# # good
|
|
43
43
|
# something.to_time
|
|
44
|
-
class DateTime <
|
|
44
|
+
class DateTime < Base
|
|
45
45
|
CLASS_MSG = 'Prefer Time over DateTime.'
|
|
46
46
|
COERCION_MSG = 'Do not use #to_datetime.'
|
|
47
47
|
|
|
@@ -50,7 +50,7 @@ module RuboCop
|
|
|
50
50
|
PATTERN
|
|
51
51
|
|
|
52
52
|
def_node_matcher :historic_date?, <<~PATTERN
|
|
53
|
-
(send _ _ _ (const (const nil? :Date) _))
|
|
53
|
+
(send _ _ _ (const (const {nil? (cbase)} :Date) _))
|
|
54
54
|
PATTERN
|
|
55
55
|
|
|
56
56
|
def_node_matcher :to_datetime?, <<~PATTERN
|
|
@@ -33,24 +33,22 @@ module RuboCop
|
|
|
33
33
|
# def Baz.foo
|
|
34
34
|
# # does a thing
|
|
35
35
|
# end
|
|
36
|
-
class DefWithParentheses <
|
|
36
|
+
class DefWithParentheses < Base
|
|
37
|
+
extend AutoCorrector
|
|
38
|
+
|
|
37
39
|
MSG = "Omit the parentheses in defs when the method doesn't accept " \
|
|
38
40
|
'any arguments.'
|
|
39
41
|
|
|
40
42
|
def on_def(node)
|
|
41
43
|
return if node.single_line?
|
|
42
|
-
return unless !node.arguments? && node.arguments.loc.begin
|
|
44
|
+
return unless !node.arguments? && (node_arguments_loc_begin = node.arguments.loc.begin)
|
|
43
45
|
|
|
44
|
-
add_offense(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def autocorrect(node)
|
|
49
|
-
lambda do |corrector|
|
|
50
|
-
corrector.remove(node.loc.begin)
|
|
51
|
-
corrector.remove(node.loc.end)
|
|
46
|
+
add_offense(node_arguments_loc_begin) do |corrector|
|
|
47
|
+
corrector.remove(node_arguments_loc_begin)
|
|
48
|
+
corrector.remove(node.arguments.loc.end)
|
|
52
49
|
end
|
|
53
50
|
end
|
|
51
|
+
alias on_defs on_def
|
|
54
52
|
end
|
|
55
53
|
end
|
|
56
54
|
end
|
|
@@ -16,24 +16,21 @@ module RuboCop
|
|
|
16
16
|
#
|
|
17
17
|
# # good
|
|
18
18
|
# path = __dir__
|
|
19
|
-
class Dir <
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
class Dir < Base
|
|
20
|
+
extend AutoCorrector
|
|
21
|
+
|
|
22
|
+
MSG = "Use `__dir__` to get an absolute path to the current file's directory."
|
|
22
23
|
|
|
23
24
|
def_node_matcher :dir_replacement?, <<~PATTERN
|
|
24
|
-
{(send (const nil? :File) :expand_path (send (const nil? :File) :dirname #file_keyword?))
|
|
25
|
-
(send (const nil? :File) :dirname (send (const nil? :File) :realpath #file_keyword?))}
|
|
25
|
+
{(send (const {nil? cbase} :File) :expand_path (send (const {nil? cbase} :File) :dirname #file_keyword?))
|
|
26
|
+
(send (const {nil? cbase} :File) :dirname (send (const {nil? cbase} :File) :realpath #file_keyword?))}
|
|
26
27
|
PATTERN
|
|
27
28
|
|
|
28
29
|
def on_send(node)
|
|
29
30
|
dir_replacement?(node) do
|
|
30
|
-
add_offense(node)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def autocorrect(node)
|
|
35
|
-
lambda do |corrector|
|
|
36
|
-
corrector.replace(node, '__dir__')
|
|
31
|
+
add_offense(node) do |corrector|
|
|
32
|
+
corrector.replace(node, '__dir__')
|
|
33
|
+
end
|
|
37
34
|
end
|
|
38
35
|
end
|
|
39
36
|
|
|
@@ -20,28 +20,26 @@ module RuboCop
|
|
|
20
20
|
# def fixed_method_name_and_no_rubocop_comments
|
|
21
21
|
# end
|
|
22
22
|
#
|
|
23
|
-
class DisableCopsWithinSourceCodeDirective <
|
|
23
|
+
class DisableCopsWithinSourceCodeDirective < Base
|
|
24
|
+
extend AutoCorrector
|
|
25
|
+
|
|
24
26
|
# rubocop:enable Lint/RedundantCopDisableDirective
|
|
25
27
|
MSG = 'Comment to disable/enable RuboCop.'
|
|
26
28
|
|
|
27
|
-
def
|
|
29
|
+
def on_new_investigation
|
|
28
30
|
processed_source.comments.each do |comment|
|
|
29
31
|
next unless rubocop_directive_comment?(comment)
|
|
30
32
|
|
|
31
|
-
add_offense(comment)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def autocorrect(comment)
|
|
36
|
-
lambda do |corrector|
|
|
37
|
-
corrector.replace(comment, '')
|
|
33
|
+
add_offense(comment) do |corrector|
|
|
34
|
+
corrector.replace(comment, '')
|
|
35
|
+
end
|
|
38
36
|
end
|
|
39
37
|
end
|
|
40
38
|
|
|
41
39
|
private
|
|
42
40
|
|
|
43
41
|
def rubocop_directive_comment?(comment)
|
|
44
|
-
comment.text
|
|
42
|
+
CommentConfig::COMMENT_DIRECTIVE_REGEXP.match?(comment.text)
|
|
45
43
|
end
|
|
46
44
|
end
|
|
47
45
|
end
|
|
@@ -55,7 +55,7 @@ module RuboCop
|
|
|
55
55
|
# Public = Class.new
|
|
56
56
|
# end
|
|
57
57
|
#
|
|
58
|
-
class Documentation <
|
|
58
|
+
class Documentation < Base
|
|
59
59
|
include DocumentationComment
|
|
60
60
|
|
|
61
61
|
MSG = 'Missing top-level %<type>s documentation comment.'
|
|
@@ -84,9 +84,7 @@ module RuboCop
|
|
|
84
84
|
return if compact_namespace?(node) &&
|
|
85
85
|
nodoc_comment?(outer_module(node).first)
|
|
86
86
|
|
|
87
|
-
add_offense(node,
|
|
88
|
-
location: :keyword,
|
|
89
|
-
message: format(MSG, type: type))
|
|
87
|
+
add_offense(node.loc.keyword, message: format(MSG, type: type))
|
|
90
88
|
end
|
|
91
89
|
|
|
92
90
|
def namespace?(node)
|
|
@@ -104,7 +102,7 @@ module RuboCop
|
|
|
104
102
|
end
|
|
105
103
|
|
|
106
104
|
def compact_namespace?(node)
|
|
107
|
-
node.loc.name.source
|
|
105
|
+
/::/.match?(node.loc.name.source)
|
|
108
106
|
end
|
|
109
107
|
|
|
110
108
|
# First checks if the :nodoc: comment is associated with the
|
|
@@ -112,18 +110,18 @@ module RuboCop
|
|
|
112
110
|
# proceeds to check its ancestors for :nodoc: all.
|
|
113
111
|
# Note: How end-of-line comments are associated with code changed in
|
|
114
112
|
# parser-2.2.0.4.
|
|
115
|
-
def nodoc_comment?(node, require_all
|
|
113
|
+
def nodoc_comment?(node, require_all: false)
|
|
116
114
|
return false unless node&.children&.first
|
|
117
115
|
|
|
118
116
|
nodoc = nodoc(node)
|
|
119
117
|
|
|
120
|
-
return true if same_line?(nodoc, node) && nodoc?(nodoc, require_all)
|
|
118
|
+
return true if same_line?(nodoc, node) && nodoc?(nodoc, require_all: require_all)
|
|
121
119
|
|
|
122
|
-
nodoc_comment?(node.parent, true)
|
|
120
|
+
nodoc_comment?(node.parent, require_all: true)
|
|
123
121
|
end
|
|
124
122
|
|
|
125
|
-
def nodoc?(comment, require_all
|
|
126
|
-
|
|
123
|
+
def nodoc?(comment, require_all: false)
|
|
124
|
+
/^#\s*:nodoc:#{"\s+all\s*$" if require_all}/.match?(comment.text)
|
|
127
125
|
end
|
|
128
126
|
|
|
129
127
|
def nodoc(node)
|