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
@@ -0,0 +1,136 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# This cop enforces empty line after multiline condition.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# if multiline &&
|
11
|
+
# condition
|
12
|
+
# do_something
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# # good
|
16
|
+
# if multiline &&
|
17
|
+
# condition
|
18
|
+
#
|
19
|
+
# do_something
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# # bad
|
23
|
+
# case x
|
24
|
+
# when foo,
|
25
|
+
# bar
|
26
|
+
# do_something
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# # good
|
30
|
+
# case x
|
31
|
+
# when foo,
|
32
|
+
# bar
|
33
|
+
#
|
34
|
+
# do_something
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# # bad
|
38
|
+
# begin
|
39
|
+
# do_something
|
40
|
+
# rescue FooError,
|
41
|
+
# BarError
|
42
|
+
# handle_error
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# # good
|
46
|
+
# begin
|
47
|
+
# do_something
|
48
|
+
# rescue FooError,
|
49
|
+
# BarError
|
50
|
+
#
|
51
|
+
# handle_error
|
52
|
+
# end
|
53
|
+
#
|
54
|
+
class EmptyLineAfterMultilineCondition < Base
|
55
|
+
include RangeHelp
|
56
|
+
extend AutoCorrector
|
57
|
+
|
58
|
+
MSG = 'Use empty line after multiline condition.'
|
59
|
+
|
60
|
+
def on_if(node)
|
61
|
+
return if node.ternary?
|
62
|
+
|
63
|
+
if node.modifier_form?
|
64
|
+
check_condition(node.condition) if node.right_sibling
|
65
|
+
else
|
66
|
+
check_condition(node.condition)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def on_while(node)
|
71
|
+
check_condition(node.condition)
|
72
|
+
end
|
73
|
+
alias on_until on_while
|
74
|
+
|
75
|
+
def on_while_post(node)
|
76
|
+
return unless node.right_sibling
|
77
|
+
|
78
|
+
check_condition(node.condition)
|
79
|
+
end
|
80
|
+
alias on_until_post on_while_post
|
81
|
+
|
82
|
+
def on_case(node)
|
83
|
+
node.each_when do |when_node|
|
84
|
+
last_condition = when_node.conditions.last
|
85
|
+
|
86
|
+
next if !multiline_when_condition?(when_node) ||
|
87
|
+
next_line_empty?(last_condition.last_line)
|
88
|
+
|
89
|
+
add_offense(when_node, &autocorrect(last_condition))
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def on_rescue(node)
|
94
|
+
node.resbody_branches.each do |resbody|
|
95
|
+
rescued_exceptions = resbody.exceptions
|
96
|
+
next if !multiline_rescue_exceptions?(rescued_exceptions) ||
|
97
|
+
next_line_empty?(rescued_exceptions.last.last_line)
|
98
|
+
|
99
|
+
add_offense(resbody, &autocorrect(rescued_exceptions.last))
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def check_condition(condition)
|
106
|
+
return unless condition.multiline?
|
107
|
+
return if next_line_empty?(condition.last_line)
|
108
|
+
|
109
|
+
add_offense(condition, &autocorrect(condition))
|
110
|
+
end
|
111
|
+
|
112
|
+
def next_line_empty?(line)
|
113
|
+
processed_source[line].blank?
|
114
|
+
end
|
115
|
+
|
116
|
+
def multiline_when_condition?(when_node)
|
117
|
+
when_node.conditions.first.first_line != when_node.conditions.last.last_line
|
118
|
+
end
|
119
|
+
|
120
|
+
def multiline_rescue_exceptions?(exception_nodes)
|
121
|
+
return false if exception_nodes.size <= 1
|
122
|
+
|
123
|
+
first, *_rest, last = *exception_nodes
|
124
|
+
first.first_line != last.last_line
|
125
|
+
end
|
126
|
+
|
127
|
+
def autocorrect(node)
|
128
|
+
lambda do |corrector|
|
129
|
+
range = range_by_whole_lines(node.source_range)
|
130
|
+
corrector.insert_after(range, "\n")
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -29,8 +29,9 @@ module RuboCop
|
|
29
29
|
#
|
30
30
|
# def b
|
31
31
|
# end
|
32
|
-
class EmptyLineBetweenDefs <
|
32
|
+
class EmptyLineBetweenDefs < Base
|
33
33
|
include RangeHelp
|
34
|
+
extend AutoCorrector
|
34
35
|
|
35
36
|
MSG = 'Use empty lines between method definitions.'
|
36
37
|
|
@@ -57,23 +58,26 @@ module RuboCop
|
|
57
58
|
cop_config['AllowAdjacentOneLineDefs']
|
58
59
|
|
59
60
|
location = nodes.last.loc.keyword.join(nodes.last.loc.name)
|
60
|
-
add_offense(
|
61
|
+
add_offense(location) do |corrector|
|
62
|
+
autocorrect(corrector, *nodes)
|
63
|
+
end
|
61
64
|
end
|
62
65
|
|
63
|
-
def autocorrect(node)
|
64
|
-
prev_def = prev_node(node)
|
65
|
-
|
66
|
+
def autocorrect(corrector, prev_def, node)
|
66
67
|
# finds position of first newline
|
67
68
|
end_pos = prev_def.loc.end.end_pos
|
68
69
|
source_buffer = prev_def.loc.end.source_buffer
|
69
70
|
newline_pos = source_buffer.source.index("\n", end_pos)
|
70
71
|
|
72
|
+
# Handle the case when multiple one-liners are on the same line.
|
73
|
+
newline_pos = end_pos + 1 if newline_pos > node.source_range.begin_pos
|
74
|
+
|
71
75
|
count = blank_lines_count_between(prev_def, node)
|
72
76
|
|
73
77
|
if count > maximum_empty_lines
|
74
|
-
autocorrect_remove_lines(newline_pos, count)
|
78
|
+
autocorrect_remove_lines(corrector, newline_pos, count)
|
75
79
|
else
|
76
|
-
autocorrect_insert_lines(newline_pos, count)
|
80
|
+
autocorrect_insert_lines(corrector, newline_pos, count)
|
77
81
|
end
|
78
82
|
end
|
79
83
|
|
@@ -111,16 +115,12 @@ module RuboCop
|
|
111
115
|
Array(cop_config['NumberOfEmptyLines']).last
|
112
116
|
end
|
113
117
|
|
114
|
-
def prev_node(node)
|
115
|
-
return nil unless node.sibling_index.positive?
|
116
|
-
|
117
|
-
node.parent.children[node.sibling_index - 1]
|
118
|
-
end
|
119
|
-
|
120
118
|
def lines_between_defs(first_def_node, second_def_node)
|
121
|
-
|
119
|
+
begin_line_num = def_end(first_def_node)
|
120
|
+
end_line_num = def_start(second_def_node) - 2
|
121
|
+
return [] if end_line_num.negative?
|
122
122
|
|
123
|
-
processed_source.lines[
|
123
|
+
processed_source.lines[begin_line_num..end_line_num]
|
124
124
|
end
|
125
125
|
|
126
126
|
def def_start(node)
|
@@ -131,20 +131,18 @@ module RuboCop
|
|
131
131
|
node.loc.end.line
|
132
132
|
end
|
133
133
|
|
134
|
-
def autocorrect_remove_lines(newline_pos, count)
|
134
|
+
def autocorrect_remove_lines(corrector, newline_pos, count)
|
135
135
|
difference = count - maximum_empty_lines
|
136
136
|
range_to_remove = range_between(newline_pos, newline_pos + difference)
|
137
|
-
|
138
|
-
|
139
|
-
end
|
137
|
+
|
138
|
+
corrector.remove(range_to_remove)
|
140
139
|
end
|
141
140
|
|
142
|
-
def autocorrect_insert_lines(newline_pos, count)
|
141
|
+
def autocorrect_insert_lines(corrector, newline_pos, count)
|
143
142
|
difference = minimum_empty_lines - count
|
144
143
|
where_to_insert = range_between(newline_pos, newline_pos + 1)
|
145
|
-
|
146
|
-
|
147
|
-
end
|
144
|
+
|
145
|
+
corrector.insert_after(where_to_insert, "\n" * difference)
|
148
146
|
end
|
149
147
|
end
|
150
148
|
end
|
@@ -18,13 +18,14 @@ module RuboCop
|
|
18
18
|
# # one empty line
|
19
19
|
# some_method
|
20
20
|
#
|
21
|
-
class EmptyLines <
|
21
|
+
class EmptyLines < Base
|
22
22
|
include RangeHelp
|
23
|
+
extend AutoCorrector
|
23
24
|
|
24
25
|
MSG = 'Extra blank line detected.'
|
25
26
|
LINE_OFFSET = 2
|
26
27
|
|
27
|
-
def
|
28
|
+
def on_new_investigation
|
28
29
|
return if processed_source.tokens.empty?
|
29
30
|
|
30
31
|
lines = Set.new
|
@@ -33,14 +34,12 @@ module RuboCop
|
|
33
34
|
end
|
34
35
|
|
35
36
|
each_extra_empty_line(lines.sort) do |range|
|
36
|
-
add_offense(range
|
37
|
+
add_offense(range) do |corrector|
|
38
|
+
corrector.remove(range)
|
39
|
+
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
40
|
-
def autocorrect(range)
|
41
|
-
->(corrector) { corrector.remove(range) }
|
42
|
-
end
|
43
|
-
|
44
43
|
private
|
45
44
|
|
46
45
|
def each_extra_empty_line(lines)
|
@@ -40,9 +40,10 @@ module RuboCop
|
|
40
40
|
# def baz; end
|
41
41
|
# end
|
42
42
|
#
|
43
|
-
class EmptyLinesAroundAccessModifier <
|
43
|
+
class EmptyLinesAroundAccessModifier < Base
|
44
44
|
include ConfigurableEnforcedStyle
|
45
45
|
include RangeHelp
|
46
|
+
extend AutoCorrector
|
46
47
|
|
47
48
|
MSG_AFTER = 'Keep a blank line after `%<modifier>s`.'
|
48
49
|
MSG_BEFORE_AND_AFTER = 'Keep a blank line before and after ' \
|
@@ -83,20 +84,11 @@ module RuboCop
|
|
83
84
|
end
|
84
85
|
|
85
86
|
def on_send(node)
|
86
|
-
return unless node.bare_access_modifier?
|
87
|
+
return unless node.bare_access_modifier? && !node.parent&.block_type?
|
88
|
+
return if expected_empty_lines?(node)
|
87
89
|
|
88
|
-
|
89
|
-
|
90
|
-
return if empty_lines_around?(node)
|
91
|
-
when :only_before
|
92
|
-
return if allowed_only_before_style?(node)
|
93
|
-
end
|
94
|
-
|
95
|
-
add_offense(node)
|
96
|
-
end
|
97
|
-
|
98
|
-
def autocorrect(node)
|
99
|
-
lambda do |corrector|
|
90
|
+
message = message(node)
|
91
|
+
add_offense(node, message: message) do |corrector|
|
100
92
|
line = range_by_whole_lines(node.source_range)
|
101
93
|
|
102
94
|
corrector.insert_before(line, "\n") unless previous_line_empty?(node.first_line)
|
@@ -107,6 +99,17 @@ module RuboCop
|
|
107
99
|
|
108
100
|
private
|
109
101
|
|
102
|
+
def expected_empty_lines?(node)
|
103
|
+
case style
|
104
|
+
when :around
|
105
|
+
return true if empty_lines_around?(node)
|
106
|
+
when :only_before
|
107
|
+
return true if allowed_only_before_style?(node)
|
108
|
+
end
|
109
|
+
|
110
|
+
false
|
111
|
+
end
|
112
|
+
|
110
113
|
def allowed_only_before_style?(node)
|
111
114
|
if node.special_modifier?
|
112
115
|
return true if processed_source[node.last_line] == 'end'
|
@@ -38,23 +38,22 @@ module RuboCop
|
|
38
38
|
# x: y
|
39
39
|
# )
|
40
40
|
#
|
41
|
-
class EmptyLinesAroundArguments <
|
41
|
+
class EmptyLinesAroundArguments < Base
|
42
42
|
include RangeHelp
|
43
|
+
extend AutoCorrector
|
43
44
|
|
44
45
|
MSG = 'Empty line detected around arguments.'
|
45
46
|
|
46
47
|
def on_send(node)
|
47
48
|
return if node.single_line? || node.arguments.empty?
|
48
49
|
|
49
|
-
extra_lines(node)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
def autocorrect(node)
|
54
|
-
lambda do |corrector|
|
55
|
-
extra_lines(node) { |range| corrector.remove(range) }
|
50
|
+
extra_lines(node) do |range|
|
51
|
+
add_offense(range) do |corrector|
|
52
|
+
corrector.remove(range)
|
53
|
+
end
|
56
54
|
end
|
57
55
|
end
|
56
|
+
alias on_csend on_send
|
58
57
|
|
59
58
|
private
|
60
59
|
|
@@ -60,9 +60,10 @@ module RuboCop
|
|
60
60
|
# def do_something
|
61
61
|
# end
|
62
62
|
#
|
63
|
-
class EmptyLinesAroundAttributeAccessor <
|
63
|
+
class EmptyLinesAroundAttributeAccessor < Base
|
64
64
|
include RangeHelp
|
65
65
|
include AllowedMethods
|
66
|
+
extend AutoCorrector
|
66
67
|
|
67
68
|
MSG = 'Add an empty line after attribute accessor.'
|
68
69
|
|
@@ -73,11 +74,7 @@ module RuboCop
|
|
73
74
|
next_line_node = next_line_node(node)
|
74
75
|
return unless require_empty_line?(next_line_node)
|
75
76
|
|
76
|
-
add_offense(node)
|
77
|
-
end
|
78
|
-
|
79
|
-
def autocorrect(node)
|
80
|
-
lambda do |corrector|
|
77
|
+
add_offense(node) do |corrector|
|
81
78
|
range = range_by_whole_lines(node.source_range)
|
82
79
|
|
83
80
|
corrector.insert_after(range, "\n")
|
@@ -91,7 +88,7 @@ module RuboCop
|
|
91
88
|
end
|
92
89
|
|
93
90
|
def require_empty_line?(node)
|
94
|
-
return false unless node
|
91
|
+
return false unless node.respond_to?(:type)
|
95
92
|
|
96
93
|
!allow_alias?(node) && !attribute_or_allowed_method?(node)
|
97
94
|
end
|
@@ -99,7 +96,7 @@ module RuboCop
|
|
99
96
|
def next_line_node(node)
|
100
97
|
return if node.parent.if_type?
|
101
98
|
|
102
|
-
node.
|
99
|
+
node.right_sibling
|
103
100
|
end
|
104
101
|
|
105
102
|
def allow_alias?(node)
|
@@ -21,8 +21,9 @@ module RuboCop
|
|
21
21
|
# # ...
|
22
22
|
#
|
23
23
|
# end
|
24
|
-
class EmptyLinesAroundBeginBody <
|
24
|
+
class EmptyLinesAroundBeginBody < Base
|
25
25
|
include EmptyLinesAroundBody
|
26
|
+
extend AutoCorrector
|
26
27
|
|
27
28
|
KIND = '`begin`'
|
28
29
|
|
@@ -30,10 +31,6 @@ module RuboCop
|
|
30
31
|
check(node, nil)
|
31
32
|
end
|
32
33
|
|
33
|
-
def autocorrect(node)
|
34
|
-
EmptyLineCorrector.correct(node)
|
35
|
-
end
|
36
|
-
|
37
34
|
private
|
38
35
|
|
39
36
|
def style
|
@@ -21,8 +21,9 @@ module RuboCop
|
|
21
21
|
# foo do |bar|
|
22
22
|
# # ...
|
23
23
|
# end
|
24
|
-
class EmptyLinesAroundBlockBody <
|
24
|
+
class EmptyLinesAroundBlockBody < Base
|
25
25
|
include EmptyLinesAroundBody
|
26
|
+
extend AutoCorrector
|
26
27
|
|
27
28
|
KIND = 'block'
|
28
29
|
|
@@ -31,10 +32,6 @@ module RuboCop
|
|
31
32
|
|
32
33
|
check(node, node.body, adjusted_first_line: first_line)
|
33
34
|
end
|
34
|
-
|
35
|
-
def autocorrect(node)
|
36
|
-
EmptyLineCorrector.correct(node)
|
37
|
-
end
|
38
35
|
end
|
39
36
|
end
|
40
37
|
end
|
@@ -64,8 +64,9 @@ module RuboCop
|
|
64
64
|
# # ...
|
65
65
|
# end
|
66
66
|
# end
|
67
|
-
class EmptyLinesAroundClassBody <
|
67
|
+
class EmptyLinesAroundClassBody < Base
|
68
68
|
include EmptyLinesAroundBody
|
69
|
+
extend AutoCorrector
|
69
70
|
|
70
71
|
KIND = 'class'
|
71
72
|
|
@@ -78,10 +79,6 @@ module RuboCop
|
|
78
79
|
def on_sclass(node)
|
79
80
|
check(node, node.body)
|
80
81
|
end
|
81
|
-
|
82
|
-
def autocorrect(node)
|
83
|
-
EmptyLineCorrector.correct(node)
|
84
|
-
end
|
85
82
|
end
|
86
83
|
end
|
87
84
|
end
|