rubocop 0.89.1 → 0.93.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/config/default.yml +160 -14
- data/lib/rubocop.rb +33 -5
- data/lib/rubocop/cached_data.rb +3 -1
- data/lib/rubocop/cli/command.rb +1 -0
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -0
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +9 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -0
- data/lib/rubocop/cli/command/show_cops.rb +1 -0
- data/lib/rubocop/cli/command/version.rb +1 -0
- data/lib/rubocop/cli/environment.rb +1 -0
- data/lib/rubocop/comment_config.rb +14 -5
- data/lib/rubocop/config_loader.rb +20 -9
- data/lib/rubocop/config_loader_resolver.rb +1 -0
- data/lib/rubocop/config_obsoletion.rb +1 -0
- data/lib/rubocop/config_regeneration.rb +33 -0
- data/lib/rubocop/config_store.rb +3 -3
- data/lib/rubocop/config_validator.rb +3 -0
- data/lib/rubocop/cop/base.rb +23 -0
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +5 -1
- data/lib/rubocop/cop/bundler/gem_comment.rb +8 -3
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +2 -0
- data/lib/rubocop/cop/commissioner.rb +47 -7
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/condition_corrector.rb +3 -5
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +9 -10
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +4 -4
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +8 -3
- data/lib/rubocop/cop/correctors/parentheses_corrector.rb +5 -8
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +4 -9
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +8 -10
- data/lib/rubocop/cop/documentation.rb +22 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +10 -10
- data/lib/rubocop/cop/generator.rb +2 -1
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -0
- data/lib/rubocop/cop/layout/array_alignment.rb +1 -0
- data/lib/rubocop/cop/layout/begin_end_alignment.rb +77 -0
- data/lib/rubocop/cop/layout/block_alignment.rb +23 -19
- data/lib/rubocop/cop/layout/case_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/class_structure.rb +11 -10
- data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +4 -6
- data/lib/rubocop/cop/layout/condition_position.rb +13 -15
- data/lib/rubocop/cop/layout/def_end_alignment.rb +8 -5
- data/lib/rubocop/cop/layout/dot_position.rb +21 -20
- data/lib/rubocop/cop/layout/empty_comment.rb +30 -23
- data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +21 -18
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +13 -13
- data/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb +136 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +21 -23
- data/lib/rubocop/cop/layout/empty_lines.rb +6 -7
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +17 -14
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +7 -8
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +5 -8
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -7
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -5
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +2 -5
- data/lib/rubocop/cop/layout/end_alignment.rb +11 -17
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +4 -8
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +2 -5
- data/lib/rubocop/cop/layout/hash_alignment.rb +17 -20
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +15 -14
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +14 -11
- data/lib/rubocop/cop/layout/initial_indentation.rb +6 -7
- data/lib/rubocop/cop/layout/leading_comment_space.rb +11 -9
- data/lib/rubocop/cop/layout/leading_empty_lines.rb +6 -11
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -14
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +21 -19
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +5 -9
- data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +2 -5
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +41 -22
- data/lib/rubocop/cop/layout/space_after_colon.rb +11 -7
- data/lib/rubocop/cop/layout/space_after_comma.rb +2 -5
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -6
- data/lib/rubocop/cop/layout/space_after_not.rb +9 -11
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +17 -21
- data/lib/rubocop/cop/layout/space_around_keyword.rb +17 -18
- data/lib/rubocop/cop/layout/space_around_operators.rb +17 -16
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +23 -22
- data/lib/rubocop/cop/layout/space_before_comma.rb +3 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +10 -7
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +7 -7
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +2 -5
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +9 -17
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +20 -23
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -8
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +13 -16
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +19 -37
- data/lib/rubocop/cop/layout/space_inside_parens.rb +9 -14
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +5 -10
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +8 -17
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +16 -24
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +12 -13
- data/lib/rubocop/cop/layout/trailing_empty_lines.rb +10 -15
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +11 -11
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +2 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +15 -1
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -2
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +1 -1
- data/lib/rubocop/cop/lint/boolean_symbol.rb +3 -0
- data/lib/rubocop/cop/lint/constant_definition_in_block.rb +74 -0
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +2 -3
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +2 -4
- data/lib/rubocop/cop/lint/duplicate_require.rb +46 -0
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +2 -15
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -0
- data/lib/rubocop/cop/lint/empty_file.rb +50 -0
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -0
- data/lib/rubocop/cop/lint/float_comparison.rb +2 -2
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +2 -2
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +37 -0
- data/lib/rubocop/cop/lint/identity_comparison.rb +51 -0
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +2 -5
- data/lib/rubocop/cop/lint/inherit_exception.rb +2 -2
- data/lib/rubocop/cop/lint/missing_super.rb +2 -2
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +3 -35
- data/lib/rubocop/cop/lint/multiple_comparison.rb +3 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -0
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +9 -20
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
- data/lib/rubocop/cop/lint/percent_string_array.rb +8 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +1 -0
- data/lib/rubocop/cop/lint/rand_one.rb +2 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +22 -12
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +14 -4
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +1 -0
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +45 -0
- data/lib/rubocop/cop/lint/rescue_type.rb +0 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +3 -1
- data/lib/rubocop/cop/lint/shadowed_exception.rb +6 -6
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +4 -4
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -0
- data/lib/rubocop/cop/lint/to_json.rb +16 -5
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +1 -1
- data/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb +57 -0
- data/lib/rubocop/cop/lint/unreachable_loop.rb +3 -6
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +2 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +3 -9
- data/lib/rubocop/cop/lint/useless_method_definition.rb +70 -0
- data/lib/rubocop/cop/lint/useless_times.rb +106 -0
- data/lib/rubocop/cop/metrics/block_length.rb +3 -1
- data/lib/rubocop/cop/metrics/class_length.rb +8 -6
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +27 -16
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +1 -0
- data/lib/rubocop/cop/mixin/alignment.rb +3 -0
- data/lib/rubocop/cop/mixin/allowed_methods.rb +2 -0
- data/lib/rubocop/cop/mixin/annotation_comment.rb +5 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +16 -7
- data/lib/rubocop/cop/mixin/comments_help.rb +48 -0
- data/lib/rubocop/cop/mixin/configurable_naming.rb +2 -2
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +3 -3
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +8 -7
- data/lib/rubocop/cop/mixin/empty_parameter.rb +3 -1
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +12 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +3 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +27 -2
- data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +3 -1
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +12 -10
- data/lib/rubocop/cop/mixin/negative_conditional.rb +2 -2
- data/lib/rubocop/cop/mixin/percent_array.rb +14 -3
- data/lib/rubocop/cop/mixin/rescue_node.rb +11 -1
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +4 -3
- data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -3
- data/lib/rubocop/cop/mixin/surrounding_space.rb +8 -4
- data/lib/rubocop/cop/mixin/trailing_comma.rb +7 -7
- data/lib/rubocop/cop/mixin/visibility_help.rb +4 -16
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/security/eval.rb +1 -0
- data/lib/rubocop/cop/security/json_load.rb +1 -0
- data/lib/rubocop/cop/security/marshal_load.rb +1 -0
- data/lib/rubocop/cop/security/open.rb +1 -0
- data/lib/rubocop/cop/security/yaml_load.rb +1 -0
- data/lib/rubocop/cop/severity.rb +0 -8
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +7 -11
- data/lib/rubocop/cop/style/accessor_grouping.rb +3 -0
- data/lib/rubocop/cop/style/alias.rb +2 -0
- data/lib/rubocop/cop/style/array_coercion.rb +4 -0
- data/lib/rubocop/cop/style/array_join.rb +1 -0
- data/lib/rubocop/cop/style/attr.rb +1 -0
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +2 -0
- data/lib/rubocop/cop/style/case_equality.rb +11 -3
- data/lib/rubocop/cop/style/case_like_if.rb +40 -8
- data/lib/rubocop/cop/style/class_and_module_children.rb +2 -0
- data/lib/rubocop/cop/style/class_check.rb +6 -9
- data/lib/rubocop/cop/style/class_equality_comparison.rb +49 -0
- data/lib/rubocop/cop/style/class_methods_definitions.rb +157 -0
- data/lib/rubocop/cop/style/class_vars.rb +1 -2
- data/lib/rubocop/cop/style/combinable_loops.rb +91 -0
- data/lib/rubocop/cop/style/comment_annotation.rb +6 -0
- data/lib/rubocop/cop/style/commented_keyword.rb +7 -8
- data/lib/rubocop/cop/style/conditional_assignment.rb +49 -60
- data/lib/rubocop/cop/style/date_time.rb +12 -1
- data/lib/rubocop/cop/style/dir.rb +1 -0
- data/lib/rubocop/cop/style/double_negation.rb +1 -0
- data/lib/rubocop/cop/style/empty_block_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +9 -10
- data/lib/rubocop/cop/style/empty_literal.rb +3 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -3
- data/lib/rubocop/cop/style/even_odd.rb +1 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
- data/lib/rubocop/cop/style/explicit_block_argument.rb +7 -3
- data/lib/rubocop/cop/style/float_division.rb +2 -0
- data/lib/rubocop/cop/style/for.rb +0 -4
- data/lib/rubocop/cop/style/format_string.rb +1 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -1
- data/lib/rubocop/cop/style/guard_clause.rb +1 -0
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +24 -5
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -5
- data/lib/rubocop/cop/style/hash_transform_keys.rb +16 -9
- data/lib/rubocop/cop/style/hash_transform_values.rb +16 -9
- data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -6
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +1 -0
- data/lib/rubocop/cop/style/keyword_parameters_order.rb +53 -0
- data/lib/rubocop/cop/style/lambda_call.rb +3 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +10 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +0 -4
- data/lib/rubocop/cop/style/mixin_usage.rb +8 -27
- data/lib/rubocop/cop/style/multiline_block_chain.rb +2 -2
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +14 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +3 -2
- data/lib/rubocop/cop/style/negated_if.rb +6 -6
- data/lib/rubocop/cop/style/negated_unless.rb +6 -6
- data/lib/rubocop/cop/style/negated_while.rb +7 -15
- data/lib/rubocop/cop/style/nested_modifier.rb +10 -13
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +11 -11
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +16 -16
- data/lib/rubocop/cop/style/next.rb +10 -14
- data/lib/rubocop/cop/style/nil_comparison.rb +13 -11
- data/lib/rubocop/cop/style/non_nil_check.rb +34 -26
- data/lib/rubocop/cop/style/not.rb +20 -26
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +4 -9
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -14
- data/lib/rubocop/cop/style/one_line_conditional.rb +73 -23
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +12 -1
- data/lib/rubocop/cop/style/or_assignment.rb +13 -10
- data/lib/rubocop/cop/style/parallel_assignment.rb +14 -14
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +6 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +13 -19
- data/lib/rubocop/cop/style/percent_q_literals.rb +8 -10
- data/lib/rubocop/cop/style/perl_backrefs.rb +8 -10
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +11 -14
- data/lib/rubocop/cop/style/proc.rb +6 -6
- data/lib/rubocop/cop/style/raise_args.rb +12 -24
- data/lib/rubocop/cop/style/random_with_offset.rb +19 -19
- data/lib/rubocop/cop/style/redundant_assignment.rb +8 -18
- data/lib/rubocop/cop/style/redundant_begin.rb +28 -12
- data/lib/rubocop/cop/style/redundant_capital_w.rb +6 -9
- data/lib/rubocop/cop/style/redundant_condition.rb +10 -7
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -5
- data/lib/rubocop/cop/style/redundant_exception.rb +1 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +3 -12
- data/lib/rubocop/cop/style/redundant_file_extension_in_require.rb +9 -8
- data/lib/rubocop/cop/style/redundant_freeze.rb +5 -7
- data/lib/rubocop/cop/style/redundant_interpolation.rb +31 -25
- data/lib/rubocop/cop/style/redundant_parentheses.rb +21 -15
- data/lib/rubocop/cop/style/redundant_percent_q.rb +9 -11
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +44 -36
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +13 -29
- data/lib/rubocop/cop/style/redundant_return.rb +17 -17
- data/lib/rubocop/cop/style/redundant_self.rb +9 -11
- data/lib/rubocop/cop/style/redundant_self_assignment.rb +116 -0
- data/lib/rubocop/cop/style/redundant_sort.rb +12 -29
- data/lib/rubocop/cop/style/redundant_sort_by.rb +5 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +10 -21
- data/lib/rubocop/cop/style/rescue_modifier.rb +29 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +20 -16
- data/lib/rubocop/cop/style/return_nil.rb +5 -5
- data/lib/rubocop/cop/style/safe_navigation.rb +18 -12
- data/lib/rubocop/cop/style/sample.rb +12 -14
- data/lib/rubocop/cop/style/self_assignment.rb +26 -22
- data/lib/rubocop/cop/style/semicolon.rb +6 -9
- data/lib/rubocop/cop/style/send.rb +4 -5
- data/lib/rubocop/cop/style/signal_exception.rb +23 -19
- data/lib/rubocop/cop/style/single_argument_dig.rb +1 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +4 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +17 -16
- data/lib/rubocop/cop/style/slicing_with_range.rb +6 -8
- data/lib/rubocop/cop/style/sole_nested_conditional.rb +66 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +10 -15
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -21
- data/lib/rubocop/cop/style/stderr_puts.rb +5 -6
- data/lib/rubocop/cop/style/string_concatenation.rb +17 -3
- data/lib/rubocop/cop/style/string_hash_keys.rb +6 -7
- data/lib/rubocop/cop/style/string_methods.rb +7 -17
- data/lib/rubocop/cop/style/strip.rb +9 -14
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -6
- data/lib/rubocop/cop/style/symbol_array.rb +5 -16
- data/lib/rubocop/cop/style/symbol_literal.rb +4 -6
- data/lib/rubocop/cop/style/symbol_proc.rb +14 -18
- data/lib/rubocop/cop/style/ternary_parentheses.rb +22 -22
- data/lib/rubocop/cop/style/trailing_body_on_class.rb +3 -6
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +4 -7
- data/lib/rubocop/cop/style/trailing_body_on_module.rb +3 -6
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +11 -9
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +2 -5
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -17
- data/lib/rubocop/cop/style/trivial_accessors.rb +26 -30
- data/lib/rubocop/cop/style/unless_else.rb +5 -8
- data/lib/rubocop/cop/style/unpack_first.rb +5 -8
- data/lib/rubocop/cop/style/variable_interpolation.rb +7 -10
- data/lib/rubocop/cop/style/when_then.rb +4 -6
- data/lib/rubocop/cop/style/while_until_do.rb +6 -16
- data/lib/rubocop/cop/style/while_until_modifier.rb +6 -20
- data/lib/rubocop/cop/style/word_array.rb +5 -23
- data/lib/rubocop/cop/style/yoda_condition.rb +4 -15
- data/lib/rubocop/cop/style/zero_length_predicate.rb +12 -18
- data/lib/rubocop/cop/team.rb +1 -0
- data/lib/rubocop/cop/util.rb +1 -2
- data/lib/rubocop/cop/utils/format_string.rb +3 -5
- data/lib/rubocop/cop/variable_force.rb +2 -0
- data/lib/rubocop/cop/variable_force/branch.rb +0 -4
- data/lib/rubocop/cops_documentation_generator.rb +4 -2
- data/lib/rubocop/core_ext/string.rb +2 -2
- data/lib/rubocop/directive_comment.rb +32 -0
- data/lib/rubocop/ext/regexp_node.rb +62 -0
- data/lib/rubocop/file_finder.rb +1 -0
- data/lib/rubocop/formatter/auto_gen_config_formatter.rb +2 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +12 -5
- data/lib/rubocop/formatter/html_formatter.rb +2 -0
- data/lib/rubocop/formatter/progress_formatter.rb +2 -1
- data/lib/rubocop/formatter/quiet_formatter.rb +1 -1
- data/lib/rubocop/formatter/simple_text_formatter.rb +36 -6
- data/lib/rubocop/name_similarity.rb +1 -0
- data/lib/rubocop/options.rb +40 -17
- data/lib/rubocop/remote_config.rb +1 -0
- data/lib/rubocop/result_cache.rb +39 -15
- data/lib/rubocop/rspec/cop_helper.rb +5 -2
- data/lib/rubocop/rspec/expect_offense.rb +14 -9
- data/lib/rubocop/rspec/shared_contexts.rb +12 -0
- data/lib/rubocop/runner.rb +38 -18
- data/lib/rubocop/string_interpreter.rb +3 -0
- data/lib/rubocop/target_finder.rb +28 -26
- data/lib/rubocop/target_ruby.rb +7 -1
- data/lib/rubocop/version.rb +7 -1
- data/lib/rubocop/yaml_duplication_checker.rb +1 -0
- metadata +31 -17
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +0 -43
- data/lib/rubocop/cop/tokens_util.rb +0 -84
@@ -4,7 +4,8 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# This cop checks for places where keyword arguments can be used instead of
|
7
|
-
# boolean arguments when defining methods.
|
7
|
+
# boolean arguments when defining methods. `respond_to_missing?` method is allowed by default.
|
8
|
+
# These are customizable with `AllowedMethods` option.
|
8
9
|
#
|
9
10
|
# @example
|
10
11
|
# # bad
|
@@ -23,11 +24,21 @@ module RuboCop
|
|
23
24
|
# puts bar
|
24
25
|
# end
|
25
26
|
#
|
27
|
+
# @example AllowedMethods: ['some_method']
|
28
|
+
# # good
|
29
|
+
# def some_method(bar = false)
|
30
|
+
# puts bar
|
31
|
+
# end
|
32
|
+
#
|
26
33
|
class OptionalBooleanParameter < Base
|
34
|
+
include AllowedMethods
|
35
|
+
|
27
36
|
MSG = 'Use keyword arguments when defining method with boolean argument.'
|
28
37
|
BOOLEAN_TYPES = %i[true false].freeze
|
29
38
|
|
30
39
|
def on_def(node)
|
40
|
+
return if allowed_method?(node.method_name)
|
41
|
+
|
31
42
|
node.arguments.each do |arg|
|
32
43
|
next unless arg.optarg_type?
|
33
44
|
|
@@ -26,7 +26,9 @@ module RuboCop
|
|
26
26
|
#
|
27
27
|
# # good - set name to 'Bozhidar', only if it's nil or false
|
28
28
|
# name ||= 'Bozhidar'
|
29
|
-
class OrAssignment <
|
29
|
+
class OrAssignment < Base
|
30
|
+
extend AutoCorrector
|
31
|
+
|
30
32
|
MSG = 'Use the double pipe equals operator `||=` instead.'
|
31
33
|
|
32
34
|
def_node_matcher :ternary_assignment?, <<~PATTERN
|
@@ -47,35 +49,36 @@ module RuboCop
|
|
47
49
|
def on_if(node)
|
48
50
|
return unless unless_assignment?(node)
|
49
51
|
|
50
|
-
add_offense(node)
|
52
|
+
add_offense(node) do |corrector|
|
53
|
+
autocorrect(corrector, node)
|
54
|
+
end
|
51
55
|
end
|
52
56
|
|
53
57
|
def on_lvasgn(node)
|
54
58
|
return unless (else_branch = ternary_assignment?(node))
|
55
59
|
return if else_branch.if_type?
|
56
60
|
|
57
|
-
add_offense(node)
|
61
|
+
add_offense(node) do |corrector|
|
62
|
+
autocorrect(corrector, node)
|
63
|
+
end
|
58
64
|
end
|
59
65
|
|
60
66
|
alias on_ivasgn on_lvasgn
|
61
67
|
alias on_cvasgn on_lvasgn
|
62
68
|
alias on_gvasgn on_lvasgn
|
63
69
|
|
64
|
-
|
70
|
+
private
|
71
|
+
|
72
|
+
def autocorrect(corrector, node)
|
65
73
|
if ternary_assignment?(node)
|
66
74
|
variable, default = take_variable_and_default_from_ternary(node)
|
67
75
|
else
|
68
76
|
variable, default = take_variable_and_default_from_unless(node)
|
69
77
|
end
|
70
78
|
|
71
|
-
|
72
|
-
corrector.replace(node,
|
73
|
-
"#{variable} ||= #{default.source}")
|
74
|
-
end
|
79
|
+
corrector.replace(node, "#{variable} ||= #{default.source}")
|
75
80
|
end
|
76
81
|
|
77
|
-
private
|
78
|
-
|
79
82
|
def take_variable_and_default_from_ternary(node)
|
80
83
|
variable, if_statement = *node
|
81
84
|
[variable, if_statement.else_branch]
|
@@ -22,8 +22,9 @@ module RuboCop
|
|
22
22
|
# a = 1
|
23
23
|
# b = 2
|
24
24
|
# c = 3
|
25
|
-
class ParallelAssignment <
|
25
|
+
class ParallelAssignment < Base
|
26
26
|
include RescueNode
|
27
|
+
extend AutoCorrector
|
27
28
|
|
28
29
|
MSG = 'Do not use parallel assignment.'
|
29
30
|
|
@@ -35,24 +36,23 @@ module RuboCop
|
|
35
36
|
return if allowed_lhs?(lhs) || allowed_rhs?(rhs) ||
|
36
37
|
allowed_masign?(lhs_elements, rhs_elements)
|
37
38
|
|
38
|
-
add_offense(node)
|
39
|
-
|
40
|
-
|
41
|
-
def autocorrect(node)
|
42
|
-
lambda do |corrector|
|
43
|
-
left, right = *node
|
44
|
-
left_elements = *left
|
45
|
-
right_elements = Array(right).compact
|
46
|
-
order = find_valid_order(left_elements, right_elements)
|
47
|
-
correction = assignment_corrector(node, order)
|
48
|
-
|
49
|
-
corrector.replace(correction.correction_range,
|
50
|
-
correction.correction)
|
39
|
+
add_offense(node) do |corrector|
|
40
|
+
autocorrect(corrector, node)
|
51
41
|
end
|
52
42
|
end
|
53
43
|
|
54
44
|
private
|
55
45
|
|
46
|
+
def autocorrect(corrector, node)
|
47
|
+
left, right = *node
|
48
|
+
left_elements = *left
|
49
|
+
right_elements = Array(right).compact
|
50
|
+
order = find_valid_order(left_elements, right_elements)
|
51
|
+
correction = assignment_corrector(node, order)
|
52
|
+
|
53
|
+
corrector.replace(correction.correction_range, correction.correction)
|
54
|
+
end
|
55
|
+
|
56
56
|
def allowed_masign?(lhs_elements, rhs_elements)
|
57
57
|
lhs_elements.size != rhs_elements.size ||
|
58
58
|
!find_valid_order(lhs_elements,
|
@@ -53,9 +53,10 @@ module RuboCop
|
|
53
53
|
# y > 10)
|
54
54
|
# end
|
55
55
|
#
|
56
|
-
class ParenthesesAroundCondition <
|
56
|
+
class ParenthesesAroundCondition < Base
|
57
57
|
include SafeAssignment
|
58
58
|
include Parentheses
|
59
|
+
extend AutoCorrector
|
59
60
|
|
60
61
|
def on_if(node)
|
61
62
|
return if node.ternary?
|
@@ -68,10 +69,6 @@ module RuboCop
|
|
68
69
|
end
|
69
70
|
alias on_until on_while
|
70
71
|
|
71
|
-
def autocorrect(node)
|
72
|
-
ParenthesesCorrector.correct(node)
|
73
|
-
end
|
74
|
-
|
75
72
|
private
|
76
73
|
|
77
74
|
def_node_matcher :control_op_condition, <<~PATTERN
|
@@ -85,7 +82,10 @@ module RuboCop
|
|
85
82
|
return if modifier_op?(first_child)
|
86
83
|
return if parens_allowed?(cond)
|
87
84
|
|
88
|
-
|
85
|
+
message = message(cond)
|
86
|
+
add_offense(cond, message: message) do |corrector|
|
87
|
+
ParenthesesCorrector.correct(corrector, cond)
|
88
|
+
end
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -23,8 +23,9 @@ module RuboCop
|
|
23
23
|
#
|
24
24
|
# # bad
|
25
25
|
# %I(alpha beta)
|
26
|
-
class PercentLiteralDelimiters <
|
26
|
+
class PercentLiteralDelimiters < Base
|
27
27
|
include PercentLiteral
|
28
|
+
extend AutoCorrector
|
28
29
|
|
29
30
|
def on_array(node)
|
30
31
|
process(node, '%w', '%W', '%i', '%I')
|
@@ -47,34 +48,27 @@ module RuboCop
|
|
47
48
|
process(node, '%x')
|
48
49
|
end
|
49
50
|
|
50
|
-
|
51
|
-
type = type(node)
|
52
|
-
delimiters = preferred_delimiters_for(type)
|
53
|
-
|
54
|
-
"`#{type}`-literals should be delimited by " \
|
55
|
-
"`#{delimiters[0]}` and `#{delimiters[1]}`."
|
56
|
-
end
|
51
|
+
private
|
57
52
|
|
58
|
-
def
|
53
|
+
def on_percent_literal(node)
|
59
54
|
type = type(node)
|
55
|
+
return if uses_preferred_delimiter?(node, type) ||
|
56
|
+
contains_preferred_delimiter?(node, type) ||
|
57
|
+
include_same_character_as_used_for_delimiter?(node, type)
|
60
58
|
|
61
|
-
|
59
|
+
add_offense(node, message: message(type)) do |corrector|
|
60
|
+
opening_delimiter, closing_delimiter = preferred_delimiters_for(type)
|
62
61
|
|
63
|
-
lambda do |corrector|
|
64
62
|
corrector.replace(node.loc.begin, "#{type}#{opening_delimiter}")
|
65
63
|
corrector.replace(node.loc.end, closing_delimiter)
|
66
64
|
end
|
67
65
|
end
|
68
66
|
|
69
|
-
|
70
|
-
|
71
|
-
def on_percent_literal(node)
|
72
|
-
type = type(node)
|
73
|
-
return if uses_preferred_delimiter?(node, type) ||
|
74
|
-
contains_preferred_delimiter?(node, type) ||
|
75
|
-
include_same_character_as_used_for_delimiter?(node, type)
|
67
|
+
def message(type)
|
68
|
+
delimiters = preferred_delimiters_for(type)
|
76
69
|
|
77
|
-
|
70
|
+
"`#{type}`-literals should be delimited by " \
|
71
|
+
"`#{delimiters[0]}` and `#{delimiters[1]}`."
|
78
72
|
end
|
79
73
|
|
80
74
|
def preferred_delimiters_for(type)
|
@@ -25,9 +25,10 @@ module RuboCop
|
|
25
25
|
# # good
|
26
26
|
# %Q/Mix the foo into the baz./
|
27
27
|
# %Q{They all said: 'Hooray!'}
|
28
|
-
class PercentQLiterals <
|
28
|
+
class PercentQLiterals < Base
|
29
29
|
include PercentLiteral
|
30
30
|
include ConfigurableEnforcedStyle
|
31
|
+
extend AutoCorrector
|
31
32
|
|
32
33
|
LOWER_CASE_Q_MSG = 'Do not use `%Q` unless interpolation is ' \
|
33
34
|
'needed. Use `%q`.'
|
@@ -37,12 +38,6 @@ module RuboCop
|
|
37
38
|
process(node, '%Q', '%q')
|
38
39
|
end
|
39
40
|
|
40
|
-
def autocorrect(node)
|
41
|
-
lambda do |corrector|
|
42
|
-
corrector.replace(node, corrected(node.source))
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
41
|
private
|
47
42
|
|
48
43
|
def on_percent_literal(node)
|
@@ -50,9 +45,12 @@ module RuboCop
|
|
50
45
|
|
51
46
|
# Report offense only if changing case doesn't change semantics,
|
52
47
|
# i.e., if the string would become dynamic or has special characters.
|
53
|
-
|
48
|
+
ast = ProcessedSource.new(corrected(node.source), target_ruby_version).ast
|
49
|
+
return if node.children != ast.children
|
54
50
|
|
55
|
-
add_offense(node
|
51
|
+
add_offense(node.loc.begin) do |corrector|
|
52
|
+
corrector.replace(node, corrected(node.source))
|
53
|
+
end
|
56
54
|
end
|
57
55
|
|
58
56
|
def correct_literal_style?(node)
|
@@ -60,7 +58,7 @@ module RuboCop
|
|
60
58
|
style == :upper_case_q && type(node) == '%Q'
|
61
59
|
end
|
62
60
|
|
63
|
-
def message(
|
61
|
+
def message(_range)
|
64
62
|
style == :lower_case_q ? LOWER_CASE_Q_MSG : UPPER_CASE_Q_MSG
|
65
63
|
end
|
66
64
|
|
@@ -12,23 +12,21 @@ module RuboCop
|
|
12
12
|
#
|
13
13
|
# # good
|
14
14
|
# puts Regexp.last_match(1)
|
15
|
-
class PerlBackrefs <
|
15
|
+
class PerlBackrefs < Base
|
16
|
+
extend AutoCorrector
|
17
|
+
|
16
18
|
MSG = 'Avoid the use of Perl-style backrefs.'
|
17
19
|
|
18
20
|
def on_nth_ref(node)
|
19
|
-
add_offense(node)
|
20
|
-
end
|
21
|
-
|
22
|
-
def autocorrect(node)
|
23
|
-
lambda do |corrector|
|
21
|
+
add_offense(node) do |corrector|
|
24
22
|
backref, = *node
|
25
23
|
parent_type = node.parent ? node.parent.type : nil
|
24
|
+
|
26
25
|
if %i[dstr xstr regexp].include?(parent_type)
|
27
|
-
corrector.replace(node,
|
28
|
-
|
26
|
+
corrector.replace(node, "{Regexp.last_match(#{backref})}")
|
27
|
+
|
29
28
|
else
|
30
|
-
corrector.replace(node,
|
31
|
-
"Regexp.last_match(#{backref})")
|
29
|
+
corrector.replace(node, "Regexp.last_match(#{backref})")
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -25,8 +25,9 @@ module RuboCop
|
|
25
25
|
# # good
|
26
26
|
# Hash#has_key?
|
27
27
|
# Hash#has_value?
|
28
|
-
class PreferredHashMethods <
|
28
|
+
class PreferredHashMethods < Base
|
29
29
|
include ConfigurableEnforcedStyle
|
30
|
+
extend AutoCorrector
|
30
31
|
|
31
32
|
MSG = 'Use `Hash#%<prefer>s` instead of `Hash#%<current>s`.'
|
32
33
|
|
@@ -35,27 +36,23 @@ module RuboCop
|
|
35
36
|
verbose: %i[key? value?]
|
36
37
|
}.freeze
|
37
38
|
|
39
|
+
RESTRICT_ON_SEND = OFFENDING_SELECTORS.values.flatten.freeze
|
40
|
+
|
38
41
|
def on_send(node)
|
39
|
-
return unless node.arguments.one? &&
|
40
|
-
offending_selector?(node.method_name)
|
42
|
+
return unless node.arguments.one? && offending_selector?(node.method_name)
|
41
43
|
|
42
|
-
|
43
|
-
end
|
44
|
-
alias on_csend on_send
|
44
|
+
message = message(node.method_name)
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
corrector.replace(node.loc.selector,
|
49
|
-
proper_method_name(node.loc.selector.source))
|
46
|
+
add_offense(node.loc.selector, message: message) do |corrector|
|
47
|
+
corrector.replace(node.loc.selector, proper_method_name(node.loc.selector.source))
|
50
48
|
end
|
51
49
|
end
|
50
|
+
alias on_csend on_send
|
52
51
|
|
53
52
|
private
|
54
53
|
|
55
|
-
def message(
|
56
|
-
format(MSG,
|
57
|
-
prefer: proper_method_name(node.method_name),
|
58
|
-
current: node.method_name)
|
54
|
+
def message(method_name)
|
55
|
+
format(MSG, prefer: proper_method_name(method_name), current: method_name)
|
59
56
|
end
|
60
57
|
|
61
58
|
def proper_method_name(method_name)
|
@@ -13,7 +13,9 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# p = proc { |n| puts n }
|
15
15
|
#
|
16
|
-
class Proc <
|
16
|
+
class Proc < Base
|
17
|
+
extend AutoCorrector
|
18
|
+
|
17
19
|
MSG = 'Use `proc` instead of `Proc.new`.'
|
18
20
|
|
19
21
|
def_node_matcher :proc_new?,
|
@@ -21,13 +23,11 @@ module RuboCop
|
|
21
23
|
|
22
24
|
def on_block(node)
|
23
25
|
proc_new?(node) do |block_method|
|
24
|
-
add_offense(block_method)
|
26
|
+
add_offense(block_method) do |corrector|
|
27
|
+
corrector.replace(block_method, 'proc')
|
28
|
+
end
|
25
29
|
end
|
26
30
|
end
|
27
|
-
|
28
|
-
def autocorrect(node)
|
29
|
-
->(corrector) { corrector.replace(node, 'proc') }
|
30
|
-
end
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
@@ -32,14 +32,17 @@ module RuboCop
|
|
32
32
|
# raise StandardError.new("message")
|
33
33
|
# raise MyCustomError.new(arg1, arg2, arg3)
|
34
34
|
# fail "message"
|
35
|
-
class RaiseArgs <
|
35
|
+
class RaiseArgs < Base
|
36
36
|
include ConfigurableEnforcedStyle
|
37
|
+
extend AutoCorrector
|
37
38
|
|
38
39
|
EXPLODED_MSG = 'Provide an exception class and message ' \
|
39
40
|
'as arguments to `%<method>s`.'
|
40
41
|
COMPACT_MSG = 'Provide an exception object ' \
|
41
42
|
'as an argument to `%<method>s`.'
|
42
43
|
|
44
|
+
RESTRICT_ON_SEND = %i[raise fail].freeze
|
45
|
+
|
43
46
|
def on_send(node)
|
44
47
|
return unless node.command?(:raise) || node.command?(:fail)
|
45
48
|
|
@@ -51,16 +54,6 @@ module RuboCop
|
|
51
54
|
end
|
52
55
|
end
|
53
56
|
|
54
|
-
def autocorrect(node)
|
55
|
-
replacement = if style == :compact
|
56
|
-
correction_exploded_to_compact(node)
|
57
|
-
else
|
58
|
-
correction_compact_to_exploded(node)
|
59
|
-
end
|
60
|
-
|
61
|
-
->(corrector) { corrector.replace(node, replacement) }
|
62
|
-
end
|
63
|
-
|
64
57
|
private
|
65
58
|
|
66
59
|
def correction_compact_to_exploded(node)
|
@@ -91,8 +84,10 @@ module RuboCop
|
|
91
84
|
|
92
85
|
def check_compact(node)
|
93
86
|
if node.arguments.size > 1
|
94
|
-
add_offense(node) do
|
95
|
-
|
87
|
+
add_offense(node, message: format(COMPACT_MSG, method: node.method_name)) do |corrector|
|
88
|
+
replacement = correction_exploded_to_compact(node)
|
89
|
+
|
90
|
+
corrector.replace(node, replacement)
|
96
91
|
end
|
97
92
|
else
|
98
93
|
correct_style_detected
|
@@ -105,11 +100,12 @@ module RuboCop
|
|
105
100
|
first_arg = node.first_argument
|
106
101
|
|
107
102
|
return unless first_arg.send_type? && first_arg.method?(:new)
|
108
|
-
|
109
103
|
return if acceptable_exploded_args?(first_arg.arguments)
|
110
104
|
|
111
|
-
add_offense(node) do
|
112
|
-
|
105
|
+
add_offense(node, message: format(EXPLODED_MSG, method: node.method_name)) do |corrector|
|
106
|
+
replacement = correction_compact_to_exploded(node)
|
107
|
+
|
108
|
+
corrector.replace(node, replacement)
|
113
109
|
end
|
114
110
|
end
|
115
111
|
|
@@ -131,14 +127,6 @@ module RuboCop
|
|
131
127
|
parent.and_type? || parent.or_type? ||
|
132
128
|
parent.if_type? && parent.ternary?
|
133
129
|
end
|
134
|
-
|
135
|
-
def message(node)
|
136
|
-
if style == :compact
|
137
|
-
format(COMPACT_MSG, method: node.method_name)
|
138
|
-
else
|
139
|
-
format(EXPLODED_MSG, method: node.method_name)
|
140
|
-
end
|
141
|
-
end
|
142
130
|
end
|
143
131
|
end
|
144
132
|
end
|