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
@@ -15,20 +15,17 @@ module RuboCop
|
|
15
15
|
# extend self
|
16
16
|
# end
|
17
17
|
#
|
18
|
-
class TrailingBodyOnModule <
|
18
|
+
class TrailingBodyOnModule < Base
|
19
19
|
include Alignment
|
20
20
|
include TrailingBody
|
21
|
+
extend AutoCorrector
|
21
22
|
|
22
23
|
MSG = 'Place the first line of module body on its own line.'
|
23
24
|
|
24
25
|
def on_module(node)
|
25
26
|
return unless trailing_body?(node)
|
26
27
|
|
27
|
-
add_offense(
|
28
|
-
end
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
28
|
+
add_offense(first_part_of(node.to_a.last)) do |corrector|
|
32
29
|
LineBreakCorrector.correct_trailing_body(
|
33
30
|
configured_width: configured_indentation_width,
|
34
31
|
corrector: corrector,
|
@@ -84,8 +84,9 @@ module RuboCop
|
|
84
84
|
# 1,
|
85
85
|
# 2
|
86
86
|
# )
|
87
|
-
class TrailingCommaInArguments <
|
87
|
+
class TrailingCommaInArguments < Base
|
88
88
|
include TrailingComma
|
89
|
+
extend AutoCorrector
|
89
90
|
|
90
91
|
def on_send(node)
|
91
92
|
return unless node.arguments? && node.parenthesized?
|
@@ -96,10 +97,6 @@ module RuboCop
|
|
96
97
|
end
|
97
98
|
alias on_csend on_send
|
98
99
|
|
99
|
-
def autocorrect(range)
|
100
|
-
PunctuationCorrector.swap_comma(range)
|
101
|
-
end
|
102
|
-
|
103
100
|
def self.autocorrect_incompatible_with
|
104
101
|
[Layout::HeredocArgumentClosingParenthesis]
|
105
102
|
end
|
@@ -81,18 +81,15 @@ module RuboCop
|
|
81
81
|
# 1,
|
82
82
|
# 2
|
83
83
|
# ]
|
84
|
-
class TrailingCommaInArrayLiteral <
|
84
|
+
class TrailingCommaInArrayLiteral < Base
|
85
85
|
include TrailingComma
|
86
|
+
extend AutoCorrector
|
86
87
|
|
87
88
|
def on_array(node)
|
88
89
|
return unless node.square_brackets?
|
89
90
|
|
90
91
|
check_literal(node, 'item of %<article>s array')
|
91
92
|
end
|
92
|
-
|
93
|
-
def autocorrect(range)
|
94
|
-
PunctuationCorrector.swap_comma(range)
|
95
|
-
end
|
96
93
|
end
|
97
94
|
end
|
98
95
|
end
|
@@ -40,20 +40,21 @@ module RuboCop
|
|
40
40
|
# add do
|
41
41
|
# foo + bar
|
42
42
|
# end
|
43
|
-
class TrailingCommaInBlockArgs <
|
43
|
+
class TrailingCommaInBlockArgs < Base
|
44
|
+
extend AutoCorrector
|
45
|
+
|
44
46
|
MSG = 'Useless trailing comma present in block arguments.'
|
45
47
|
|
46
48
|
def on_block(node)
|
47
49
|
# lambda literal (`->`) never has block arguments.
|
48
50
|
return if node.send_node.lambda_literal?
|
49
|
-
|
50
51
|
return unless useless_trailing_comma?(node)
|
51
52
|
|
52
|
-
|
53
|
-
end
|
53
|
+
last_comma_pos = last_comma(node).pos
|
54
54
|
|
55
|
-
|
56
|
-
|
55
|
+
add_offense(last_comma_pos) do |corrector|
|
56
|
+
corrector.replace(last_comma_pos, '')
|
57
|
+
end
|
57
58
|
end
|
58
59
|
|
59
60
|
private
|
@@ -75,12 +76,13 @@ module RuboCop
|
|
75
76
|
end
|
76
77
|
|
77
78
|
def argument_tokens(node)
|
78
|
-
|
79
|
+
tokens = processed_source.tokens_within(node)
|
80
|
+
pipes = tokens.select { |token| token.type == :tPIPE }
|
79
81
|
begin_pos, end_pos = pipes.map do |pipe|
|
80
|
-
tokens
|
82
|
+
tokens.index(pipe)
|
81
83
|
end
|
82
84
|
|
83
|
-
tokens
|
85
|
+
tokens[begin_pos + 1..end_pos - 1]
|
84
86
|
end
|
85
87
|
end
|
86
88
|
end
|
@@ -84,16 +84,13 @@ module RuboCop
|
|
84
84
|
# foo: 1,
|
85
85
|
# bar: 2
|
86
86
|
# }
|
87
|
-
class TrailingCommaInHashLiteral <
|
87
|
+
class TrailingCommaInHashLiteral < Base
|
88
88
|
include TrailingComma
|
89
|
+
extend AutoCorrector
|
89
90
|
|
90
91
|
def on_hash(node)
|
91
92
|
check_literal(node, 'item of %<article>s hash')
|
92
93
|
end
|
93
|
-
|
94
|
-
def autocorrect(range)
|
95
|
-
PunctuationCorrector.swap_comma(range)
|
96
|
-
end
|
97
94
|
end
|
98
95
|
end
|
99
96
|
end
|
@@ -28,9 +28,10 @@ module RuboCop
|
|
28
28
|
# # bad
|
29
29
|
# a, b, _something = foo()
|
30
30
|
#
|
31
|
-
class TrailingUnderscoreVariable <
|
31
|
+
class TrailingUnderscoreVariable < Base
|
32
32
|
include SurroundingSpace
|
33
33
|
include RangeHelp
|
34
|
+
extend AutoCorrector
|
34
35
|
|
35
36
|
MSG = 'Do not use trailing `_`s in parallel assignment. ' \
|
36
37
|
'Prefer `%<code>s`.'
|
@@ -44,17 +45,9 @@ module RuboCop
|
|
44
45
|
offset = range.begin_pos - node.source_range.begin_pos
|
45
46
|
good_code[offset, range.size] = ''
|
46
47
|
|
47
|
-
add_offense(
|
48
|
-
|
49
|
-
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def autocorrect(node)
|
54
|
-
ranges = unneeded_ranges(node)
|
55
|
-
|
56
|
-
lambda do |corrector|
|
57
|
-
ranges.each { |range| corrector.remove(range) if range }
|
48
|
+
add_offense(range, message: format(MSG, code: good_code)) do |corrector|
|
49
|
+
corrector.remove(range)
|
50
|
+
end
|
58
51
|
end
|
59
52
|
end
|
60
53
|
|
@@ -75,11 +68,9 @@ module RuboCop
|
|
75
68
|
|
76
69
|
var, = *variable
|
77
70
|
var, = *var
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
break offense unless var.to_s.start_with?(UNDERSCORE)
|
82
|
-
end
|
71
|
+
|
72
|
+
break offense if (allow_named_underscore_variables && var != :_) ||
|
73
|
+
!var.to_s.start_with?(UNDERSCORE)
|
83
74
|
|
84
75
|
variable
|
85
76
|
end
|
@@ -27,8 +27,9 @@ module RuboCop
|
|
27
27
|
# class << self
|
28
28
|
# attr_reader :baz
|
29
29
|
# end
|
30
|
-
class TrivialAccessors <
|
30
|
+
class TrivialAccessors < Base
|
31
31
|
include AllowedMethods
|
32
|
+
extend AutoCorrector
|
32
33
|
|
33
34
|
MSG = 'Use `attr_%<kind>s` to define trivial %<kind>s methods.'
|
34
35
|
|
@@ -41,17 +42,6 @@ module RuboCop
|
|
41
42
|
end
|
42
43
|
alias on_defs on_def
|
43
44
|
|
44
|
-
def autocorrect(node)
|
45
|
-
parent = node.parent
|
46
|
-
return if parent&.send_type?
|
47
|
-
|
48
|
-
if node.def_type?
|
49
|
-
autocorrect_instance(node)
|
50
|
-
elsif node.defs_type? && node.children.first.self_type?
|
51
|
-
autocorrect_class(node)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
45
|
private
|
56
46
|
|
57
47
|
def in_module_or_instance_eval?(node)
|
@@ -76,9 +66,20 @@ module RuboCop
|
|
76
66
|
end
|
77
67
|
return unless kind
|
78
68
|
|
79
|
-
add_offense(node,
|
80
|
-
|
81
|
-
|
69
|
+
add_offense(node.loc.keyword, message: format(MSG, kind: kind)) do |corrector|
|
70
|
+
autocorrect(corrector, node)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def autocorrect(corrector, node)
|
75
|
+
parent = node.parent
|
76
|
+
return if parent&.send_type?
|
77
|
+
|
78
|
+
if node.def_type?
|
79
|
+
autocorrect_instance(corrector, node)
|
80
|
+
elsif node.defs_type? && node.children.first.self_type?
|
81
|
+
autocorrect_class(corrector, node)
|
82
|
+
end
|
82
83
|
end
|
83
84
|
|
84
85
|
def exact_name_match?
|
@@ -156,31 +157,26 @@ module RuboCop
|
|
156
157
|
"attr_#{kind} :#{method_name.to_s.chomp('=')}"
|
157
158
|
end
|
158
159
|
|
159
|
-
def autocorrect_instance(node)
|
160
|
+
def autocorrect_instance(corrector, node)
|
160
161
|
kind = trivial_accessor_kind(node)
|
161
162
|
|
162
163
|
return unless names_match?(node) && !node.predicate_method? && kind
|
163
164
|
|
164
|
-
|
165
|
-
corrector.replace(node,
|
166
|
-
accessor(kind, node.method_name))
|
167
|
-
end
|
165
|
+
corrector.replace(node, accessor(kind, node.method_name))
|
168
166
|
end
|
169
167
|
|
170
|
-
def autocorrect_class(node)
|
168
|
+
def autocorrect_class(corrector, node)
|
171
169
|
kind = trivial_accessor_kind(node)
|
172
170
|
|
173
171
|
return unless names_match?(node) && kind
|
174
172
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
)
|
183
|
-
end
|
173
|
+
indent = ' ' * node.loc.column
|
174
|
+
corrector.replace(
|
175
|
+
node.source_range,
|
176
|
+
['class << self',
|
177
|
+
"#{indent} #{accessor(kind, node.method_name)}",
|
178
|
+
"#{indent}end"].join("\n")
|
179
|
+
)
|
184
180
|
end
|
185
181
|
|
186
182
|
def top_level_node?(node)
|
@@ -19,8 +19,9 @@ module RuboCop
|
|
19
19
|
# else
|
20
20
|
# # do a different thing...
|
21
21
|
# end
|
22
|
-
class UnlessElse <
|
22
|
+
class UnlessElse < Base
|
23
23
|
include RangeHelp
|
24
|
+
extend AutoCorrector
|
24
25
|
|
25
26
|
MSG = 'Do not use `unless` with `else`. Rewrite these with the ' \
|
26
27
|
'positive case first.'
|
@@ -28,14 +29,10 @@ module RuboCop
|
|
28
29
|
def on_if(node)
|
29
30
|
return unless node.unless? && node.else?
|
30
31
|
|
31
|
-
add_offense(node)
|
32
|
-
|
33
|
-
|
34
|
-
def autocorrect(node)
|
35
|
-
body_range = range_between_condition_and_else(node, node.condition)
|
36
|
-
else_range = range_between_else_and_end(node)
|
32
|
+
add_offense(node) do |corrector|
|
33
|
+
body_range = range_between_condition_and_else(node, node.condition)
|
34
|
+
else_range = range_between_else_and_end(node)
|
37
35
|
|
38
|
-
lambda do |corrector|
|
39
36
|
corrector.replace(node.loc.keyword, 'if')
|
40
37
|
corrector.replace(body_range, else_range.source)
|
41
38
|
corrector.replace(else_range, body_range.source)
|
@@ -17,9 +17,12 @@ module RuboCop
|
|
17
17
|
# # good
|
18
18
|
# 'foo'.unpack1('h*')
|
19
19
|
#
|
20
|
-
class UnpackFirst <
|
20
|
+
class UnpackFirst < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = 'Use `%<receiver>s.unpack1(%<format>s)` instead of '\
|
22
24
|
'`%<receiver>s.unpack(%<format>s)%<method>s`.'
|
25
|
+
RESTRICT_ON_SEND = %i[first [] slice at].freeze
|
23
26
|
|
24
27
|
def_node_matcher :unpack_and_first_element?, <<~PATTERN
|
25
28
|
{
|
@@ -35,13 +38,7 @@ module RuboCop
|
|
35
38
|
receiver: unpack_call.receiver.source,
|
36
39
|
format: unpack_arg.source,
|
37
40
|
method: range.source)
|
38
|
-
add_offense(node, message: message)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def autocorrect(node)
|
43
|
-
unpack_and_first_element?(node) do |unpack_call, _unpack_arg|
|
44
|
-
lambda do |corrector|
|
41
|
+
add_offense(node, message: message) do |corrector|
|
45
42
|
corrector.remove(first_element_range(node, unpack_call))
|
46
43
|
corrector.replace(unpack_call.loc.selector, 'unpack1')
|
47
44
|
end
|
@@ -15,28 +15,25 @@ module RuboCop
|
|
15
15
|
# "His name is #{$name}"
|
16
16
|
# /check #{$pattern}/
|
17
17
|
# "Let's go to the #{@store}"
|
18
|
-
class VariableInterpolation <
|
18
|
+
class VariableInterpolation < Base
|
19
19
|
include Interpolation
|
20
|
+
extend AutoCorrector
|
20
21
|
|
21
22
|
MSG = 'Replace interpolated variable `%<variable>s` ' \
|
22
23
|
'with expression `#{%<variable>s}`.'
|
23
24
|
|
24
25
|
def on_node_with_interpolations(node)
|
25
26
|
var_nodes(node.children).each do |var_node|
|
26
|
-
add_offense(var_node)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
def autocorrect(node)
|
31
|
-
lambda do |corrector|
|
32
|
-
corrector.replace(node, "{#{node.source}}")
|
27
|
+
add_offense(var_node) do |corrector|
|
28
|
+
corrector.replace(var_node, "{#{var_node.source}}")
|
29
|
+
end
|
33
30
|
end
|
34
31
|
end
|
35
32
|
|
36
33
|
private
|
37
34
|
|
38
|
-
def message(
|
39
|
-
format(MSG, variable:
|
35
|
+
def message(range)
|
36
|
+
format(MSG, variable: range.source)
|
40
37
|
end
|
41
38
|
|
42
39
|
def var_nodes(nodes)
|
@@ -17,17 +17,15 @@ module RuboCop
|
|
17
17
|
# when 1 then 'baz'
|
18
18
|
# when 2 then 'bar'
|
19
19
|
# end
|
20
|
-
class WhenThen <
|
20
|
+
class WhenThen < Base
|
21
|
+
extend AutoCorrector
|
22
|
+
|
21
23
|
MSG = 'Do not use `when x;`. Use `when x then` instead.'
|
22
24
|
|
23
25
|
def on_when(node)
|
24
26
|
return if node.multiline? || node.then? || !node.body
|
25
27
|
|
26
|
-
add_offense(node
|
27
|
-
end
|
28
|
-
|
29
|
-
def autocorrect(node)
|
30
|
-
lambda do |corrector|
|
28
|
+
add_offense(node.loc.begin) do |corrector|
|
31
29
|
corrector.replace(node.loc.begin, ' then')
|
32
30
|
end
|
33
31
|
end
|
@@ -28,31 +28,21 @@ module RuboCop
|
|
28
28
|
# until x.empty?
|
29
29
|
# do_something(x.pop)
|
30
30
|
# end
|
31
|
-
class WhileUntilDo <
|
31
|
+
class WhileUntilDo < Base
|
32
|
+
extend AutoCorrector
|
33
|
+
|
32
34
|
MSG = 'Do not use `do` with multi-line `%<keyword>s`.'
|
33
35
|
|
34
36
|
def on_while(node)
|
35
|
-
handle(node)
|
36
|
-
end
|
37
|
-
|
38
|
-
def on_until(node)
|
39
|
-
handle(node)
|
40
|
-
end
|
41
|
-
|
42
|
-
def handle(node)
|
43
37
|
return unless node.multiline? && node.do?
|
44
38
|
|
45
|
-
add_offense(node,
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
def autocorrect(node)
|
50
|
-
do_range = node.condition.source_range.end.join(node.loc.begin)
|
39
|
+
add_offense(node.loc.begin, message: format(MSG, keyword: node.keyword)) do |corrector|
|
40
|
+
do_range = node.condition.source_range.end.join(node.loc.begin)
|
51
41
|
|
52
|
-
lambda do |corrector|
|
53
42
|
corrector.remove(do_range)
|
54
43
|
end
|
55
44
|
end
|
45
|
+
alias on_until on_while
|
56
46
|
end
|
57
47
|
end
|
58
48
|
end
|
@@ -24,37 +24,23 @@ module RuboCop
|
|
24
24
|
#
|
25
25
|
# # good
|
26
26
|
# x += 1 until x > 10
|
27
|
-
class WhileUntilModifier <
|
27
|
+
class WhileUntilModifier < Base
|
28
28
|
include StatementModifier
|
29
|
+
extend AutoCorrector
|
29
30
|
|
30
31
|
MSG = 'Favor modifier `%<keyword>s` usage when ' \
|
31
32
|
'having a single-line body.'
|
32
33
|
|
33
34
|
def on_while(node)
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
def on_until(node)
|
38
|
-
check(node)
|
39
|
-
end
|
35
|
+
return unless node.multiline? && single_line_as_modifier?(node)
|
40
36
|
|
41
|
-
|
42
|
-
|
43
|
-
"#{node.condition.source}"
|
37
|
+
add_offense(node.loc.keyword, message: format(MSG, keyword: node.keyword)) do |corrector|
|
38
|
+
oneline = "#{node.body.source} #{node.keyword} #{node.condition.source}"
|
44
39
|
|
45
|
-
lambda do |corrector|
|
46
40
|
corrector.replace(node, oneline)
|
47
41
|
end
|
48
42
|
end
|
49
|
-
|
50
|
-
private
|
51
|
-
|
52
|
-
def check(node)
|
53
|
-
return unless node.multiline? && single_line_as_modifier?(node)
|
54
|
-
|
55
|
-
add_offense(node, location: :keyword,
|
56
|
-
message: format(MSG, keyword: node.keyword))
|
57
|
-
end
|
43
|
+
alias on_until on_while
|
58
44
|
end
|
59
45
|
end
|
60
46
|
end
|