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
@@ -26,12 +26,13 @@ module RuboCop
|
|
26
26
|
# @example AllowAsExpressionSeparator: true
|
27
27
|
# # good
|
28
28
|
# foo = 1; bar = 2
|
29
|
-
class Semicolon <
|
29
|
+
class Semicolon < Base
|
30
30
|
include RangeHelp
|
31
|
+
extend AutoCorrector
|
31
32
|
|
32
33
|
MSG = 'Do not use semicolons to terminate expressions.'
|
33
34
|
|
34
|
-
def
|
35
|
+
def on_new_investigation
|
35
36
|
return if processed_source.blank?
|
36
37
|
|
37
38
|
@processed_source = processed_source
|
@@ -66,12 +67,6 @@ module RuboCop
|
|
66
67
|
end
|
67
68
|
end
|
68
69
|
|
69
|
-
def autocorrect(range)
|
70
|
-
return unless range
|
71
|
-
|
72
|
-
->(corrector) { corrector.remove(range) }
|
73
|
-
end
|
74
|
-
|
75
70
|
private
|
76
71
|
|
77
72
|
def check_for_line_terminator_or_opener
|
@@ -93,7 +88,9 @@ module RuboCop
|
|
93
88
|
range = source_range(@processed_source.buffer, line, column)
|
94
89
|
# Don't attempt to autocorrect if semicolon is separating statements
|
95
90
|
# on the same line
|
96
|
-
add_offense(
|
91
|
+
add_offense(range) do |corrector|
|
92
|
+
corrector.remove(range) if autocorrect
|
93
|
+
end
|
97
94
|
end
|
98
95
|
end
|
99
96
|
end
|
@@ -13,16 +13,15 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# Foo.__send__(:bar)
|
15
15
|
# quuz.public_send(:fred)
|
16
|
-
class Send <
|
16
|
+
class Send < Base
|
17
17
|
MSG = 'Prefer `Object#__send__` or `Object#public_send` to ' \
|
18
18
|
'`send`.'
|
19
|
-
|
20
|
-
def_node_matcher :sending?, '({send csend} _ :send ...)'
|
19
|
+
RESTRICT_ON_SEND = %i[send].freeze
|
21
20
|
|
22
21
|
def on_send(node)
|
23
|
-
return unless
|
22
|
+
return unless node.arguments?
|
24
23
|
|
25
|
-
add_offense(node
|
24
|
+
add_offense(node.loc.selector)
|
26
25
|
end
|
27
26
|
alias on_csend on_send
|
28
27
|
end
|
@@ -104,18 +104,21 @@ module RuboCop
|
|
104
104
|
#
|
105
105
|
# explicit_receiver.fail
|
106
106
|
# explicit_receiver.raise
|
107
|
-
class SignalException <
|
107
|
+
class SignalException < Base
|
108
108
|
include ConfigurableEnforcedStyle
|
109
|
+
extend AutoCorrector
|
109
110
|
|
110
111
|
FAIL_MSG = 'Use `fail` instead of `raise` to signal exceptions.'
|
111
112
|
RAISE_MSG = 'Use `raise` instead of `fail` to ' \
|
112
113
|
'rethrow exceptions.'
|
113
114
|
|
115
|
+
RESTRICT_ON_SEND = %i[raise fail].freeze
|
116
|
+
|
114
117
|
def_node_matcher :kernel_call?, '(send (const {nil? cbase} :Kernel) %1 ...)'
|
115
118
|
def_node_search :custom_fail_methods,
|
116
119
|
'{(def :fail ...) (defs _ :fail ...)}'
|
117
120
|
|
118
|
-
def
|
121
|
+
def on_new_investigation
|
119
122
|
ast = processed_source.ast
|
120
123
|
@custom_fail_defined = ast && custom_fail_methods(ast).any?
|
121
124
|
end
|
@@ -145,20 +148,6 @@ module RuboCop
|
|
145
148
|
end
|
146
149
|
end
|
147
150
|
|
148
|
-
def autocorrect(node)
|
149
|
-
lambda do |corrector|
|
150
|
-
name =
|
151
|
-
case style
|
152
|
-
when :semantic
|
153
|
-
command_or_kernel_call?(:raise, node) ? 'fail' : 'raise'
|
154
|
-
when :only_raise then 'raise'
|
155
|
-
when :only_fail then 'fail'
|
156
|
-
end
|
157
|
-
|
158
|
-
corrector.replace(node.loc.selector, name)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
151
|
private
|
163
152
|
|
164
153
|
def message(method_name)
|
@@ -178,8 +167,9 @@ module RuboCop
|
|
178
167
|
each_command_or_kernel_call(method_name, node) do |send_node|
|
179
168
|
next if ignored_node?(send_node)
|
180
169
|
|
181
|
-
add_offense(send_node,
|
182
|
-
|
170
|
+
add_offense(send_node.loc.selector, message: message(method_name)) do |corrector|
|
171
|
+
autocorrect(corrector, send_node)
|
172
|
+
end
|
183
173
|
ignore_node(send_node)
|
184
174
|
end
|
185
175
|
end
|
@@ -187,7 +177,21 @@ module RuboCop
|
|
187
177
|
def check_send(method_name, node)
|
188
178
|
return unless node && command_or_kernel_call?(method_name, node)
|
189
179
|
|
190
|
-
add_offense(node
|
180
|
+
add_offense(node.loc.selector, message: message(method_name)) do |corrector|
|
181
|
+
autocorrect(corrector, node)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def autocorrect(corrector, node)
|
186
|
+
name =
|
187
|
+
case style
|
188
|
+
when :semantic
|
189
|
+
command_or_kernel_call?(:raise, node) ? 'fail' : 'raise'
|
190
|
+
when :only_raise then 'raise'
|
191
|
+
when :only_fail then 'fail'
|
192
|
+
end
|
193
|
+
|
194
|
+
corrector.replace(node.loc.selector, name)
|
191
195
|
end
|
192
196
|
|
193
197
|
def command_or_kernel_call?(name, node)
|
@@ -28,7 +28,7 @@ module RuboCop
|
|
28
28
|
# foo.reduce do |c, d|
|
29
29
|
# c + d
|
30
30
|
# end
|
31
|
-
class SingleLineBlockParams <
|
31
|
+
class SingleLineBlockParams < Base
|
32
32
|
MSG = 'Name `%<method>s` block params `|%<params>s|`.'
|
33
33
|
|
34
34
|
def on_block(node)
|
@@ -39,7 +39,9 @@ module RuboCop
|
|
39
39
|
|
40
40
|
return if args_match?(node.send_node.method_name, node.arguments)
|
41
41
|
|
42
|
-
|
42
|
+
message = message(node.arguments)
|
43
|
+
|
44
|
+
add_offense(node.arguments, message: message)
|
43
45
|
end
|
44
46
|
|
45
47
|
private
|
@@ -24,8 +24,9 @@ module RuboCop
|
|
24
24
|
# # bad
|
25
25
|
# def no_op; end
|
26
26
|
#
|
27
|
-
class SingleLineMethods <
|
27
|
+
class SingleLineMethods < Base
|
28
28
|
include Alignment
|
29
|
+
extend AutoCorrector
|
29
30
|
|
30
31
|
MSG = 'Avoid single-line method definitions.'
|
31
32
|
|
@@ -33,29 +34,29 @@ module RuboCop
|
|
33
34
|
return unless node.single_line?
|
34
35
|
return if allow_empty? && !node.body
|
35
36
|
|
36
|
-
add_offense(node)
|
37
|
+
add_offense(node) do |corrector|
|
38
|
+
autocorrect(corrector, node)
|
39
|
+
end
|
37
40
|
end
|
38
41
|
alias on_defs on_def
|
39
42
|
|
40
|
-
|
41
|
-
lambda do |corrector|
|
42
|
-
each_part(node.body) do |part|
|
43
|
-
LineBreakCorrector.break_line_before(
|
44
|
-
range: part, node: node, corrector: corrector,
|
45
|
-
configured_width: configured_indentation_width
|
46
|
-
)
|
47
|
-
end
|
43
|
+
private
|
48
44
|
|
45
|
+
def autocorrect(corrector, node)
|
46
|
+
each_part(node.body) do |part|
|
49
47
|
LineBreakCorrector.break_line_before(
|
50
|
-
range:
|
51
|
-
|
48
|
+
range: part, node: node, corrector: corrector,
|
49
|
+
configured_width: configured_indentation_width
|
52
50
|
)
|
53
|
-
|
54
|
-
move_comment(node, corrector)
|
55
51
|
end
|
56
|
-
end
|
57
52
|
|
58
|
-
|
53
|
+
LineBreakCorrector.break_line_before(
|
54
|
+
range: node.loc.end, node: node, corrector: corrector,
|
55
|
+
indent_steps: 0, configured_width: configured_indentation_width
|
56
|
+
)
|
57
|
+
|
58
|
+
move_comment(node, corrector)
|
59
|
+
end
|
59
60
|
|
60
61
|
def allow_empty?
|
61
62
|
cop_config['AllowIfMethodIsEmpty']
|
@@ -12,25 +12,23 @@ module RuboCop
|
|
12
12
|
#
|
13
13
|
# # good
|
14
14
|
# items[1..]
|
15
|
-
class SlicingWithRange <
|
15
|
+
class SlicingWithRange < Base
|
16
|
+
extend AutoCorrector
|
16
17
|
extend TargetRubyVersion
|
17
18
|
|
18
19
|
minimum_target_ruby_version 2.6
|
19
20
|
|
20
21
|
MSG = 'Prefer ary[n..] over ary[n..-1].'
|
22
|
+
RESTRICT_ON_SEND = %i[[]].freeze
|
21
23
|
|
22
24
|
def_node_matcher :range_till_minus_one?, '(irange !nil? (int -1))'
|
23
25
|
|
24
26
|
def on_send(node)
|
25
|
-
return unless node.
|
27
|
+
return unless node.arguments.count == 1
|
26
28
|
return unless range_till_minus_one?(node.arguments.first)
|
27
29
|
|
28
|
-
add_offense(node.
|
29
|
-
|
30
|
-
|
31
|
-
def autocorrect(node)
|
32
|
-
lambda do |corrector|
|
33
|
-
corrector.remove(node.end)
|
30
|
+
add_offense(node.first_argument) do |corrector|
|
31
|
+
corrector.remove(node.first_argument.end)
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# If the branch of a conditional consists solely of a conditional node,
|
7
|
+
# its conditions can be combined with the conditions of the outer branch.
|
8
|
+
# This helps to keep the nesting level from getting too deep.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# # bad
|
12
|
+
# if condition_a
|
13
|
+
# if condition_b
|
14
|
+
# do_something
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# if condition_a && condition_b
|
20
|
+
# do_something
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# @example AllowModifier: false (default)
|
24
|
+
# # bad
|
25
|
+
# if condition_a
|
26
|
+
# do_something if condition_b
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# @example AllowModifier: true
|
30
|
+
# # good
|
31
|
+
# if condition_a
|
32
|
+
# do_something if condition_b
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
class SoleNestedConditional < Base
|
36
|
+
MSG = 'Consider merging nested conditions into '\
|
37
|
+
'outer `%<conditional_type>s` conditions.'
|
38
|
+
|
39
|
+
def on_if(node)
|
40
|
+
return if node.ternary? || node.else? || node.elsif?
|
41
|
+
|
42
|
+
branch = node.if_branch
|
43
|
+
return unless offending_branch?(branch)
|
44
|
+
|
45
|
+
message = format(MSG, conditional_type: node.keyword)
|
46
|
+
add_offense(branch.loc.keyword, message: message)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def offending_branch?(branch)
|
52
|
+
return false unless branch
|
53
|
+
|
54
|
+
branch.if_type? &&
|
55
|
+
!branch.else? &&
|
56
|
+
!branch.ternary? &&
|
57
|
+
!(branch.modifier_form? && allow_modifier?)
|
58
|
+
end
|
59
|
+
|
60
|
+
def allow_modifier?
|
61
|
+
cop_config['AllowModifier']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -56,8 +56,9 @@ module RuboCop
|
|
56
56
|
# puts $'
|
57
57
|
# puts $+
|
58
58
|
#
|
59
|
-
class SpecialGlobalVars <
|
59
|
+
class SpecialGlobalVars < Base
|
60
60
|
include ConfigurableEnforcedStyle
|
61
|
+
extend AutoCorrector
|
61
62
|
|
62
63
|
MSG_BOTH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
|
63
64
|
'module (don\'t forget to require it) or `%<regular>s` over ' \
|
@@ -120,13 +121,14 @@ module RuboCop
|
|
120
121
|
correct_style_detected
|
121
122
|
else
|
122
123
|
opposite_style_detected
|
123
|
-
|
124
|
+
|
125
|
+
add_offense(node, message: message(global_var)) do |corrector|
|
126
|
+
autocorrect(corrector, node, global_var)
|
127
|
+
end
|
124
128
|
end
|
125
129
|
end
|
126
130
|
|
127
|
-
def message(
|
128
|
-
global_var, = *node
|
129
|
-
|
131
|
+
def message(global_var)
|
130
132
|
if style == :use_english_names
|
131
133
|
format_english_message(global_var)
|
132
134
|
else
|
@@ -136,17 +138,10 @@ module RuboCop
|
|
136
138
|
end
|
137
139
|
end
|
138
140
|
|
139
|
-
def autocorrect(node)
|
140
|
-
|
141
|
-
global_var, = *node
|
141
|
+
def autocorrect(corrector, node, global_var)
|
142
|
+
node = node.parent while node.parent&.begin_type? && node.parent.children.one?
|
142
143
|
|
143
|
-
|
144
|
-
node.parent.children.one?
|
145
|
-
node = node.parent
|
146
|
-
end
|
147
|
-
|
148
|
-
corrector.replace(node, replacement(node, global_var))
|
149
|
-
end
|
144
|
+
corrector.replace(node, replacement(node, global_var))
|
150
145
|
end
|
151
146
|
|
152
147
|
private
|
@@ -19,26 +19,26 @@ module RuboCop
|
|
19
19
|
#
|
20
20
|
# # good
|
21
21
|
# ->a,b,c { a + b + c}
|
22
|
-
class StabbyLambdaParentheses <
|
22
|
+
class StabbyLambdaParentheses < Base
|
23
23
|
include ConfigurableEnforcedStyle
|
24
|
+
extend AutoCorrector
|
24
25
|
|
25
26
|
MSG_REQUIRE = 'Wrap stabby lambda arguments with parentheses.'
|
26
27
|
MSG_NO_REQUIRE = 'Do not wrap stabby lambda arguments ' \
|
27
28
|
'with parentheses.'
|
28
29
|
def on_send(node)
|
29
30
|
return unless stabby_lambda_with_args?(node)
|
30
|
-
return unless redundant_parentheses?(node) ||
|
31
|
-
missing_parentheses?(node)
|
31
|
+
return unless redundant_parentheses?(node) || missing_parentheses?(node)
|
32
32
|
|
33
|
-
|
34
|
-
end
|
33
|
+
arguments = node.block_node.arguments
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
add_offense(arguments) do |corrector|
|
36
|
+
case style
|
37
|
+
when :require_parentheses
|
38
|
+
missing_parentheses_corrector(corrector, arguments)
|
39
|
+
when :require_no_parentheses
|
40
|
+
unwanted_parentheses_corrector(corrector, arguments)
|
41
|
+
end
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -56,19 +56,15 @@ module RuboCop
|
|
56
56
|
style == :require_parentheses ? MSG_REQUIRE : MSG_NO_REQUIRE
|
57
57
|
end
|
58
58
|
|
59
|
-
def missing_parentheses_corrector(node)
|
60
|
-
|
61
|
-
corrector.wrap(node, '(', ')')
|
62
|
-
end
|
59
|
+
def missing_parentheses_corrector(corrector, node)
|
60
|
+
corrector.wrap(node, '(', ')')
|
63
61
|
end
|
64
62
|
|
65
|
-
def unwanted_parentheses_corrector(node)
|
66
|
-
|
67
|
-
args_loc = node.loc
|
63
|
+
def unwanted_parentheses_corrector(corrector, node)
|
64
|
+
args_loc = node.loc
|
68
65
|
|
69
|
-
|
70
|
-
|
71
|
-
end
|
66
|
+
corrector.replace(args_loc.begin, '')
|
67
|
+
corrector.remove(args_loc.end)
|
72
68
|
end
|
73
69
|
|
74
70
|
def stabby_lambda_with_args?(node)
|
@@ -14,11 +14,13 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# warn('hello')
|
16
16
|
#
|
17
|
-
class StderrPuts <
|
17
|
+
class StderrPuts < Base
|
18
18
|
include RangeHelp
|
19
|
+
extend AutoCorrector
|
19
20
|
|
20
21
|
MSG =
|
21
22
|
'Use `warn` instead of `%<bad>s` to allow such output to be disabled.'
|
23
|
+
RESTRICT_ON_SEND = %i[puts].freeze
|
22
24
|
|
23
25
|
def_node_matcher :stderr_puts?, <<~PATTERN
|
24
26
|
(send
|
@@ -30,11 +32,8 @@ module RuboCop
|
|
30
32
|
def on_send(node)
|
31
33
|
return unless stderr_puts?(node)
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
def autocorrect(node)
|
37
|
-
lambda do |corrector|
|
35
|
+
message = message(node)
|
36
|
+
add_offense(stderr_puts_range(node), message: message) do |corrector|
|
38
37
|
corrector.replace(stderr_puts_range(node), 'warn')
|
39
38
|
end
|
40
39
|
end
|