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
@@ -43,8 +43,8 @@ module RuboCop
|
|
43
43
|
'Modifier form of `%<keyword>s` makes the line too long.'
|
44
44
|
|
45
45
|
def on_if(node)
|
46
|
-
msg = if single_line_as_modifier?(node)
|
47
|
-
MSG_USE_MODIFIER
|
46
|
+
msg = if single_line_as_modifier?(node) && !named_capture_in_condition?(node)
|
47
|
+
MSG_USE_MODIFIER
|
48
48
|
elsif too_long_due_to_modifier?(node)
|
49
49
|
MSG_USE_NORMAL
|
50
50
|
end
|
@@ -157,10 +157,6 @@ module RuboCop
|
|
157
157
|
#{indentation}end
|
158
158
|
RUBY
|
159
159
|
end
|
160
|
-
|
161
|
-
def first_line_comment(node)
|
162
|
-
processed_source.comment_at_line(node.loc.line)&.text
|
163
|
-
end
|
164
160
|
end
|
165
161
|
end
|
166
162
|
end
|
@@ -17,6 +17,7 @@ module RuboCop
|
|
17
17
|
class ImplicitRuntimeError < Base
|
18
18
|
MSG = 'Use `%<method>s` with an explicit exception class and message,' \
|
19
19
|
' rather than just a message.'
|
20
|
+
RESTRICT_ON_SEND = %i[raise fail].freeze
|
20
21
|
|
21
22
|
def_node_matcher :implicit_runtime_error_raise_or_fail,
|
22
23
|
'(send nil? ${:raise :fail} {str dstr})'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop enforces that optional keyword parameters are placed at the
|
7
|
+
# end of the parameters list.
|
8
|
+
#
|
9
|
+
# This improves readability, because when looking through the source,
|
10
|
+
# it is expected to find required parameters at the beginning of parameters list
|
11
|
+
# and optional parameters at the end.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# # bad
|
15
|
+
# def some_method(first: false, second:, third: 10)
|
16
|
+
# # body omitted
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # good
|
20
|
+
# def some_method(second:, first: false, third: 10)
|
21
|
+
# # body omitted
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
class KeywordParametersOrder < Base
|
25
|
+
include RangeHelp
|
26
|
+
extend AutoCorrector
|
27
|
+
|
28
|
+
MSG = 'Place optional keyword parameters at the end of the parameters list.'
|
29
|
+
|
30
|
+
def on_kwoptarg(node)
|
31
|
+
kwarg_nodes = node.right_siblings.select(&:kwarg_type?)
|
32
|
+
return if kwarg_nodes.empty?
|
33
|
+
|
34
|
+
add_offense(node) do |corrector|
|
35
|
+
if node.parent.find(&:kwoptarg_type?) == node
|
36
|
+
corrector.insert_before(node, "#{kwarg_nodes.map(&:source).join(', ')}, ")
|
37
|
+
remove_kwargs(kwarg_nodes, corrector)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def remove_kwargs(kwarg_nodes, corrector)
|
45
|
+
kwarg_nodes.each do |kwarg|
|
46
|
+
with_space = range_with_surrounding_space(range: kwarg.source_range)
|
47
|
+
corrector.remove(range_with_surrounding_comma(with_space, :left))
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -22,8 +22,10 @@ module RuboCop
|
|
22
22
|
include ConfigurableEnforcedStyle
|
23
23
|
extend AutoCorrector
|
24
24
|
|
25
|
+
RESTRICT_ON_SEND = %i[call].freeze
|
26
|
+
|
25
27
|
def on_send(node)
|
26
|
-
return unless node.receiver
|
28
|
+
return unless node.receiver
|
27
29
|
|
28
30
|
if offense?(node) && opposite_style_detected
|
29
31
|
add_offense(node) do |corrector|
|
@@ -8,10 +8,19 @@ module RuboCop
|
|
8
8
|
# when reading code.
|
9
9
|
#
|
10
10
|
# @example
|
11
|
-
#
|
11
|
+
# # bad
|
12
12
|
# a do
|
13
13
|
# b
|
14
14
|
# end.c
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# a { b }.c
|
18
|
+
#
|
19
|
+
# # good
|
20
|
+
# foo = a do
|
21
|
+
# b
|
22
|
+
# end
|
23
|
+
# foo.c
|
15
24
|
class MethodCalledOnDoEndBlock < Base
|
16
25
|
include RangeHelp
|
17
26
|
|
@@ -140,16 +140,12 @@ module RuboCop
|
|
140
140
|
def missing_parentheses(node)
|
141
141
|
location = node.arguments.source_range
|
142
142
|
|
143
|
-
return unless unexpected_style_detected(:require_no_parentheses)
|
144
|
-
|
145
143
|
add_offense(location, message: MSG_MISSING) do |corrector|
|
146
144
|
correct_definition(node, corrector)
|
147
145
|
end
|
148
146
|
end
|
149
147
|
|
150
148
|
def unwanted_parentheses(args)
|
151
|
-
return unless unexpected_style_detected(:require_parentheses)
|
152
|
-
|
153
149
|
add_offense(args, message: MSG_PRESENT) do |corrector|
|
154
150
|
# offense is registered on args node when parentheses are unwanted
|
155
151
|
correct_arguments(args, corrector)
|
@@ -43,47 +43,28 @@ module RuboCop
|
|
43
43
|
class MixinUsage < Base
|
44
44
|
MSG = '`%<statement>s` is used at the top level. Use inside `class` ' \
|
45
45
|
'or `module`.'
|
46
|
+
RESTRICT_ON_SEND = %i[include extend prepend].freeze
|
46
47
|
|
47
48
|
def_node_matcher :include_statement, <<~PATTERN
|
48
49
|
(send nil? ${:include :extend :prepend}
|
49
50
|
const)
|
50
51
|
PATTERN
|
51
52
|
|
52
|
-
def_node_matcher :
|
53
|
-
{
|
53
|
+
def_node_matcher :in_top_level_scope?, <<~PATTERN
|
54
|
+
{
|
55
|
+
root? # either at the top level
|
56
|
+
^[ {kwbegin begin if def} # or wrapped within one of these
|
57
|
+
#in_top_level_scope? ] # that is in top level scope
|
58
|
+
}
|
54
59
|
PATTERN
|
55
60
|
|
56
61
|
def on_send(node)
|
57
62
|
include_statement(node) do |statement|
|
58
|
-
return
|
59
|
-
accepted_include?(node) ||
|
60
|
-
belongs_to_class_or_module?(node)
|
63
|
+
return unless in_top_level_scope?(node)
|
61
64
|
|
62
65
|
add_offense(node, message: format(MSG, statement: statement))
|
63
66
|
end
|
64
67
|
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def accepted_include?(node)
|
69
|
-
node.parent && (node.macro? || ascend_macro_scope?(node.parent))
|
70
|
-
end
|
71
|
-
|
72
|
-
def ascend_macro_scope?(ancestor)
|
73
|
-
return true if wrapped_macro_scope?(ancestor)
|
74
|
-
|
75
|
-
ancestor.parent && ascend_macro_scope?(ancestor.parent)
|
76
|
-
end
|
77
|
-
|
78
|
-
def belongs_to_class_or_module?(node)
|
79
|
-
if !node.parent
|
80
|
-
false
|
81
|
-
else
|
82
|
-
return true if node.parent.class_type? || node.parent.module_type?
|
83
|
-
|
84
|
-
belongs_to_class_or_module?(node.parent)
|
85
|
-
end
|
86
|
-
end
|
87
68
|
end
|
88
69
|
end
|
89
70
|
end
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
# alive_threads.map do |t|
|
23
23
|
# t.object_id
|
24
24
|
# end
|
25
|
-
class MultilineBlockChain <
|
25
|
+
class MultilineBlockChain < Base
|
26
26
|
include RangeHelp
|
27
27
|
|
28
28
|
MSG = 'Avoid multi-line chains of blocks.'
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
36
36
|
range = range_between(receiver.loc.end.begin_pos,
|
37
37
|
node.send_node.source_range.end_pos)
|
38
38
|
|
39
|
-
add_offense(
|
39
|
+
add_offense(range)
|
40
40
|
|
41
41
|
# Done. If there are more blocks in the chain, they will be
|
42
42
|
# found by subsequent calls to on_block.
|
@@ -5,6 +5,9 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop checks for multi-line ternary op expressions.
|
7
7
|
#
|
8
|
+
# NOTE: `return if ... else ... end` is syntax error. If `return` is used before
|
9
|
+
# multiline ternary operator expression, it cannot be auto-corrected.
|
10
|
+
#
|
8
11
|
# @example
|
9
12
|
# # bad
|
10
13
|
# a = cond ?
|
@@ -29,9 +32,13 @@ module RuboCop
|
|
29
32
|
'use `if` or `unless` instead.'
|
30
33
|
|
31
34
|
def on_if(node)
|
32
|
-
return unless
|
35
|
+
return unless offense?(node)
|
33
36
|
|
34
37
|
add_offense(node) do |corrector|
|
38
|
+
# `return if ... else ... end` is syntax error. If `return` is used before
|
39
|
+
# multiline ternary operator expression, it cannot be auto-corrected.
|
40
|
+
next unless offense?(node) && !node.parent.return_type?
|
41
|
+
|
35
42
|
corrector.replace(node, <<~RUBY.chop)
|
36
43
|
if #{node.condition.source}
|
37
44
|
#{node.if_branch.source}
|
@@ -41,6 +48,12 @@ module RuboCop
|
|
41
48
|
RUBY
|
42
49
|
end
|
43
50
|
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def offense?(node)
|
55
|
+
node.ternary? && node.multiline?
|
56
|
+
end
|
44
57
|
end
|
45
58
|
end
|
46
59
|
end
|
@@ -44,7 +44,7 @@ module RuboCop
|
|
44
44
|
# Requires `then` for write `when` and its body on the same line.
|
45
45
|
return if require_then?(node)
|
46
46
|
|
47
|
-
#
|
47
|
+
# For arrays and hashes there's no offense
|
48
48
|
return if accept_node_type?(node.body)
|
49
49
|
|
50
50
|
range = node.loc.begin
|
@@ -58,13 +58,14 @@ module RuboCop
|
|
58
58
|
private
|
59
59
|
|
60
60
|
def require_then?(when_node)
|
61
|
+
return true if when_node.conditions.count >= 2
|
61
62
|
return false unless when_node.body
|
62
63
|
|
63
64
|
when_node.loc.line == when_node.body.loc.line
|
64
65
|
end
|
65
66
|
|
66
67
|
def accept_node_type?(node)
|
67
|
-
node&.
|
68
|
+
node&.array_type? || node&.hash_type?
|
68
69
|
end
|
69
70
|
end
|
70
71
|
end
|
@@ -68,19 +68,19 @@ module RuboCop
|
|
68
68
|
# if !foo
|
69
69
|
# bar
|
70
70
|
# end
|
71
|
-
class NegatedIf <
|
71
|
+
class NegatedIf < Base
|
72
72
|
include ConfigurableEnforcedStyle
|
73
73
|
include NegativeConditional
|
74
|
+
extend AutoCorrector
|
74
75
|
|
75
76
|
def on_if(node)
|
76
77
|
return if node.unless? || node.elsif? || node.ternary?
|
77
78
|
return if correct_style?(node)
|
78
79
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
ConditionCorrector.correct_negative_condition(node)
|
80
|
+
message = message(node)
|
81
|
+
check_negative_conditional(node, message: message) do |corrector|
|
82
|
+
ConditionCorrector.correct_negative_condition(corrector, node)
|
83
|
+
end
|
84
84
|
end
|
85
85
|
|
86
86
|
private
|
@@ -58,19 +58,19 @@ module RuboCop
|
|
58
58
|
# unless !foo
|
59
59
|
# bar
|
60
60
|
# end
|
61
|
-
class NegatedUnless <
|
61
|
+
class NegatedUnless < Base
|
62
62
|
include ConfigurableEnforcedStyle
|
63
63
|
include NegativeConditional
|
64
|
+
extend AutoCorrector
|
64
65
|
|
65
66
|
def on_if(node)
|
66
67
|
return if node.if? || node.elsif? || node.ternary?
|
67
68
|
return if correct_style?(node)
|
68
69
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
ConditionCorrector.correct_negative_condition(node)
|
70
|
+
message = message(node)
|
71
|
+
check_negative_conditional(node, message: message) do |corrector|
|
72
|
+
ConditionCorrector.correct_negative_condition(corrector, node)
|
73
|
+
end
|
74
74
|
end
|
75
75
|
|
76
76
|
private
|
@@ -22,26 +22,18 @@ module RuboCop
|
|
22
22
|
# # good
|
23
23
|
# bar while foo
|
24
24
|
# bar while !foo && baz
|
25
|
-
class NegatedWhile <
|
25
|
+
class NegatedWhile < Base
|
26
26
|
include NegativeConditional
|
27
|
+
extend AutoCorrector
|
27
28
|
|
28
29
|
def on_while(node)
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
def on_until(node)
|
33
|
-
check_negative_conditional(node)
|
34
|
-
end
|
35
|
-
|
36
|
-
def autocorrect(node)
|
37
|
-
ConditionCorrector.correct_negative_condition(node)
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
30
|
+
message = format(MSG, inverse: node.inverse_keyword, current: node.keyword)
|
41
31
|
|
42
|
-
|
43
|
-
|
32
|
+
check_negative_conditional(node, message: message) do |corrector|
|
33
|
+
ConditionCorrector.correct_negative_condition(corrector, node)
|
34
|
+
end
|
44
35
|
end
|
36
|
+
alias on_until on_while
|
45
37
|
end
|
46
38
|
end
|
47
39
|
end
|
@@ -13,28 +13,27 @@ module RuboCop
|
|
13
13
|
#
|
14
14
|
# # good
|
15
15
|
# something if b && a
|
16
|
-
class NestedModifier <
|
16
|
+
class NestedModifier < Base
|
17
17
|
include RangeHelp
|
18
|
+
extend AutoCorrector
|
18
19
|
|
19
20
|
MSG = 'Avoid using nested modifiers.'
|
20
21
|
|
21
22
|
def on_while(node)
|
22
23
|
check(node)
|
23
24
|
end
|
25
|
+
alias on_until on_while
|
26
|
+
alias on_if on_while
|
24
27
|
|
25
|
-
|
26
|
-
check(node)
|
27
|
-
end
|
28
|
-
|
29
|
-
def on_if(node)
|
30
|
-
check(node)
|
31
|
-
end
|
28
|
+
private
|
32
29
|
|
33
30
|
def check(node)
|
34
31
|
return if part_of_ignored_node?(node)
|
35
32
|
return unless modifier?(node) && modifier?(node.parent)
|
36
33
|
|
37
|
-
add_offense(node
|
34
|
+
add_offense(node.loc.keyword) do |corrector|
|
35
|
+
autocorrect(corrector, node)
|
36
|
+
end
|
38
37
|
ignore_node(node)
|
39
38
|
end
|
40
39
|
|
@@ -42,15 +41,13 @@ module RuboCop
|
|
42
41
|
node&.basic_conditional? && node&.modifier_form?
|
43
42
|
end
|
44
43
|
|
45
|
-
def autocorrect(node)
|
44
|
+
def autocorrect(corrector, node)
|
46
45
|
return unless node.if_type? && node.parent.if_type?
|
47
46
|
|
48
47
|
range = range_between(node.loc.keyword.begin_pos,
|
49
48
|
node.parent.condition.source_range.end_pos)
|
50
49
|
|
51
|
-
|
52
|
-
corrector.replace(range, new_expression(node))
|
53
|
-
end
|
50
|
+
corrector.replace(range, new_expression(node))
|
54
51
|
end
|
55
52
|
|
56
53
|
def new_expression(inner_node)
|
@@ -12,9 +12,10 @@ module RuboCop
|
|
12
12
|
#
|
13
13
|
# # bad
|
14
14
|
# method1(method2 arg)
|
15
|
-
class NestedParenthesizedCalls <
|
15
|
+
class NestedParenthesizedCalls < Base
|
16
16
|
include RangeHelp
|
17
17
|
include AllowedMethods
|
18
|
+
extend AutoCorrector
|
18
19
|
|
19
20
|
MSG = 'Add parentheses to nested method call `%<source>s`.'
|
20
21
|
|
@@ -24,14 +25,17 @@ module RuboCop
|
|
24
25
|
node.each_child_node(:send, :csend) do |nested|
|
25
26
|
next if allowed_omission?(nested)
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
message = format(MSG, source: nested.source)
|
29
|
+
add_offense(nested.source_range, message: message) do |corrector|
|
30
|
+
autocorrect(corrector, nested)
|
31
|
+
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
alias on_csend on_send
|
33
35
|
|
34
|
-
|
36
|
+
private
|
37
|
+
|
38
|
+
def autocorrect(corrector, nested)
|
35
39
|
first_arg = nested.first_argument.source_range
|
36
40
|
last_arg = nested.last_argument.source_range
|
37
41
|
|
@@ -41,14 +45,10 @@ module RuboCop
|
|
41
45
|
whitespace: true,
|
42
46
|
continuations: true)
|
43
47
|
|
44
|
-
|
45
|
-
|
46
|
-
corrector.insert_after(last_arg, ')')
|
47
|
-
end
|
48
|
+
corrector.replace(leading_space, '(')
|
49
|
+
corrector.insert_after(last_arg, ')')
|
48
50
|
end
|
49
51
|
|
50
|
-
private
|
51
|
-
|
52
52
|
def allowed_omission?(send_node)
|
53
53
|
!send_node.arguments? || send_node.parenthesized? ||
|
54
54
|
send_node.setter_method? || send_node.operator_method? ||
|