rubocop 0.51.0 → 0.52.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 +1 -2
- data/config/default.yml +86 -10
- data/config/disabled.yml +9 -4
- data/config/enabled.yml +1105 -1006
- data/lib/rubocop.rb +30 -3
- data/lib/rubocop/ast/builder.rb +2 -0
- data/lib/rubocop/ast/node.rb +24 -2
- data/lib/rubocop/ast/node/args_node.rb +17 -0
- data/lib/rubocop/ast/node/array_node.rb +1 -1
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +16 -0
- data/lib/rubocop/ast/node/send_node.rb +20 -0
- data/lib/rubocop/ast/node/str_node.rb +14 -0
- data/lib/rubocop/ast/node/symbol_node.rb +20 -0
- data/lib/rubocop/ast/traversal.rb +4 -4
- data/lib/rubocop/cli.rb +45 -4
- data/lib/rubocop/comment_config.rb +2 -5
- data/lib/rubocop/config.rb +42 -8
- data/lib/rubocop/config_loader.rb +39 -100
- data/lib/rubocop/config_loader_resolver.rb +99 -2
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -1
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +7 -7
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +4 -3
- data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -2
- data/lib/rubocop/cop/cop.rb +16 -46
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +102 -0
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +3 -2
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +87 -0
- data/lib/rubocop/cop/generator.rb +23 -4
- data/lib/rubocop/cop/internal_affairs.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +9 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +1 -1
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +4 -7
- data/lib/rubocop/cop/layout/align_hash.rb +16 -16
- data/lib/rubocop/cop/layout/align_parameters.rb +6 -12
- data/lib/rubocop/cop/layout/block_end_newline.rb +19 -5
- data/lib/rubocop/cop/layout/case_indentation.rb +14 -17
- data/lib/rubocop/cop/layout/class_structure.rb +306 -0
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -0
- data/lib/rubocop/cop/layout/comment_indentation.rb +39 -2
- data/lib/rubocop/cop/layout/dot_position.rb +22 -13
- data/lib/rubocop/cop/layout/else_alignment.rb +6 -6
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +17 -17
- data/lib/rubocop/cop/layout/empty_lines.rb +15 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +3 -2
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +89 -0
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +4 -8
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +30 -5
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +7 -3
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +2 -2
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +22 -7
- data/lib/rubocop/cop/layout/end_of_line.rb +1 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +21 -24
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +4 -1
- data/lib/rubocop/cop/layout/indent_array.rb +67 -20
- data/lib/rubocop/cop/layout/indent_hash.rb +70 -25
- data/lib/rubocop/cop/layout/indent_heredoc.rb +51 -11
- data/lib/rubocop/cop/layout/indentation_width.rb +24 -17
- data/lib/rubocop/cop/layout/initial_indentation.rb +7 -5
- data/lib/rubocop/cop/layout/leading_comment_space.rb +2 -2
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +47 -14
- data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +10 -9
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +19 -16
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +46 -13
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +9 -10
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +4 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +9 -3
- data/lib/rubocop/cop/layout/space_after_colon.rb +4 -4
- data/lib/rubocop/cop/layout/space_after_comma.rb +3 -3
- data/lib/rubocop/cop/layout/space_after_method_name.rb +4 -4
- data/lib/rubocop/cop/layout/space_after_semicolon.rb +8 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +16 -19
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +27 -16
- data/lib/rubocop/cop/layout/space_around_keyword.rb +13 -11
- data/lib/rubocop/cop/layout/space_around_operators.rb +26 -13
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +10 -10
- data/lib/rubocop/cop/layout/space_before_comma.rb +12 -1
- data/lib/rubocop/cop/layout/space_before_comment.rb +2 -4
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +4 -3
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +1 -1
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +6 -12
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +235 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +3 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +87 -16
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +57 -34
- data/lib/rubocop/cop/layout/space_inside_parens.rb +31 -3
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +15 -15
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +81 -0
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +24 -13
- data/lib/rubocop/cop/layout/tab.rb +2 -2
- data/lib/rubocop/cop/layout/trailing_blank_lines.rb +7 -7
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +11 -20
- data/lib/rubocop/cop/lint/block_alignment.rb +26 -23
- data/lib/rubocop/cop/lint/boolean_symbol.rb +1 -1
- data/lib/rubocop/cop/lint/def_end_alignment.rb +5 -10
- data/lib/rubocop/cop/lint/else_layout.rb +2 -2
- data/lib/rubocop/cop/lint/end_alignment.rb +13 -14
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +3 -4
- data/lib/rubocop/cop/lint/inherit_exception.rb +10 -14
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +81 -0
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +58 -0
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
- data/lib/rubocop/cop/lint/percent_string_array.rb +14 -14
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +11 -11
- data/lib/rubocop/cop/lint/redundant_with_index.rb +6 -3
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
- data/lib/rubocop/cop/lint/require_parentheses.rb +3 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +3 -3
- data/lib/rubocop/cop/lint/script_permission.rb +1 -0
- data/lib/rubocop/cop/lint/shadowed_argument.rb +146 -0
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +6 -6
- data/lib/rubocop/cop/lint/unneeded_disable.rb +29 -11
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +2 -1
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +43 -17
- data/lib/rubocop/cop/message_annotator.rb +4 -2
- data/lib/rubocop/cop/metrics/abc_size.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +3 -1
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/line_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +3 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +9 -2
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +2 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +1 -1
- data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +7 -5
- data/lib/rubocop/cop/mixin/empty_parameter.rb +23 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +7 -3
- data/lib/rubocop/cop/mixin/heredoc.rb +19 -19
- data/lib/rubocop/cop/mixin/method_complexity.rb +32 -8
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +7 -3
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +6 -4
- data/lib/rubocop/cop/mixin/negative_conditional.rb +3 -0
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +16 -12
- data/lib/rubocop/cop/mixin/parentheses.rb +12 -0
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +8 -8
- data/lib/rubocop/cop/mixin/space_before_punctuation.rb +10 -10
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -17
- data/lib/rubocop/cop/mixin/surrounding_space.rb +95 -8
- data/lib/rubocop/cop/mixin/too_many_lines.rb +2 -2
- data/lib/rubocop/cop/mixin/trailing_comma.rb +22 -14
- data/lib/rubocop/cop/mixin/unused_argument.rb +3 -40
- data/lib/rubocop/cop/naming/accessor_method_name.rb +20 -10
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +33 -0
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +5 -4
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +16 -12
- data/lib/rubocop/cop/naming/constant_name.rb +32 -3
- data/lib/rubocop/cop/naming/file_name.rb +19 -8
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +10 -16
- data/lib/rubocop/cop/naming/method_name.rb +20 -14
- data/lib/rubocop/cop/naming/predicate_name.rb +7 -3
- data/lib/rubocop/cop/naming/variable_name.rb +17 -2
- data/lib/rubocop/cop/naming/variable_number.rb +10 -27
- data/lib/rubocop/cop/offense.rb +6 -1
- data/lib/rubocop/cop/performance/case_when_splat.rb +2 -6
- data/lib/rubocop/cop/performance/casecmp.rb +5 -4
- data/lib/rubocop/cop/performance/compare_with_block.rb +13 -7
- data/lib/rubocop/cop/performance/count.rb +5 -4
- data/lib/rubocop/cop/performance/detect.rb +7 -4
- data/lib/rubocop/cop/performance/double_start_end_with.rb +2 -7
- data/lib/rubocop/cop/performance/end_with.rb +2 -2
- data/lib/rubocop/cop/performance/flat_map.rb +3 -2
- data/lib/rubocop/cop/performance/hash_each_methods.rb +41 -40
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +5 -4
- data/lib/rubocop/cop/performance/redundant_block_call.rb +22 -22
- data/lib/rubocop/cop/performance/redundant_match.rb +2 -2
- data/lib/rubocop/cop/performance/redundant_merge.rb +6 -4
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +4 -4
- data/lib/rubocop/cop/performance/regexp_match.rb +3 -2
- data/lib/rubocop/cop/performance/size.rb +2 -2
- data/lib/rubocop/cop/performance/start_with.rb +2 -2
- data/lib/rubocop/cop/performance/string_replacement.rb +4 -4
- data/lib/rubocop/cop/performance/times_map.rb +14 -15
- data/lib/rubocop/cop/performance/uri_default_parser.rb +3 -3
- data/lib/rubocop/cop/rails/action_filter.rb +22 -0
- data/lib/rubocop/cop/rails/active_support_aliases.rb +2 -2
- data/lib/rubocop/cop/rails/application_job.rb +4 -2
- data/lib/rubocop/cop/rails/application_record.rb +4 -2
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +82 -0
- data/lib/rubocop/cop/rails/delegate.rb +20 -25
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +2 -2
- data/lib/rubocop/cop/rails/environment_comparison.rb +66 -0
- data/lib/rubocop/cop/rails/exit.rb +7 -0
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +7 -0
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +6 -2
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +36 -41
- data/lib/rubocop/cop/rails/inverse_of.rb +96 -0
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +112 -0
- data/lib/rubocop/cop/rails/output.rb +9 -0
- data/lib/rubocop/cop/rails/output_safety.rb +14 -20
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +8 -8
- data/lib/rubocop/cop/rails/presence.rb +105 -0
- data/lib/rubocop/cop/rails/read_write_attribute.rb +10 -10
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +91 -0
- data/lib/rubocop/cop/rails/relative_date_constant.rb +9 -9
- data/lib/rubocop/cop/rails/reversible_migration.rb +3 -4
- data/lib/rubocop/cop/rails/safe_navigation.rb +5 -6
- data/lib/rubocop/cop/rails/save_bang.rb +2 -2
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +1 -1
- data/lib/rubocop/cop/rails/validation.rb +7 -7
- data/lib/rubocop/cop/security/json_load.rb +4 -2
- data/lib/rubocop/cop/security/marshal_load.rb +4 -2
- data/lib/rubocop/cop/style/alias.rb +24 -26
- data/lib/rubocop/cop/style/and_or.rb +34 -28
- data/lib/rubocop/cop/style/array_join.rb +9 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +24 -4
- data/lib/rubocop/cop/style/attr.rb +14 -4
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +5 -3
- data/lib/rubocop/cop/style/bare_percent_literals.rb +31 -10
- data/lib/rubocop/cop/style/block_comments.rb +14 -2
- data/lib/rubocop/cop/style/block_delimiters.rb +80 -15
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +81 -48
- data/lib/rubocop/cop/style/case_equality.rb +12 -0
- data/lib/rubocop/cop/style/character_literal.rb +10 -0
- data/lib/rubocop/cop/style/class_and_module_children.rb +6 -2
- data/lib/rubocop/cop/style/class_check.rb +28 -9
- data/lib/rubocop/cop/style/class_methods.rb +8 -8
- data/lib/rubocop/cop/style/class_vars.rb +4 -3
- data/lib/rubocop/cop/style/collection_methods.rb +4 -2
- data/lib/rubocop/cop/style/colon_method_call.rb +16 -0
- data/lib/rubocop/cop/style/colon_method_definition.rb +36 -0
- data/lib/rubocop/cop/style/command_literal.rb +70 -21
- data/lib/rubocop/cop/style/comment_annotation.rb +35 -10
- data/lib/rubocop/cop/style/commented_keyword.rb +12 -9
- data/lib/rubocop/cop/style/conditional_assignment.rb +10 -12
- data/lib/rubocop/cop/style/copyright.rb +19 -20
- data/lib/rubocop/cop/style/date_time.rb +2 -2
- data/lib/rubocop/cop/style/def_with_parentheses.rb +27 -2
- data/lib/rubocop/cop/style/dir.rb +2 -2
- data/lib/rubocop/cop/style/documentation.rb +17 -2
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +7 -7
- data/lib/rubocop/cop/style/each_with_object.rb +5 -5
- data/lib/rubocop/cop/style/empty_block_parameter.rb +47 -0
- data/lib/rubocop/cop/style/empty_case_condition.rb +2 -2
- data/lib/rubocop/cop/style/empty_else.rb +52 -22
- data/lib/rubocop/cop/style/empty_lambda_parameter.rb +43 -0
- data/lib/rubocop/cop/style/empty_literal.rb +17 -5
- data/lib/rubocop/cop/style/empty_method.rb +4 -10
- data/lib/rubocop/cop/style/encoding.rb +2 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +146 -0
- data/lib/rubocop/cop/style/even_odd.rb +4 -2
- data/lib/rubocop/cop/style/extend_self.rb +92 -0
- data/lib/rubocop/cop/style/flip_flop.rb +11 -0
- data/lib/rubocop/cop/style/format_string.rb +29 -2
- data/lib/rubocop/cop/style/format_string_token.rb +15 -14
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +4 -3
- data/lib/rubocop/cop/style/global_vars.rb +11 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +44 -43
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +8 -8
- data/lib/rubocop/cop/style/if_inside_else.rb +10 -10
- data/lib/rubocop/cop/style/if_unless_modifier.rb +7 -7
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +2 -2
- data/lib/rubocop/cop/style/if_with_semicolon.rb +9 -0
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +5 -5
- data/lib/rubocop/cop/style/infinite_loop.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +23 -31
- data/lib/rubocop/cop/style/lambda_call.rb +15 -9
- data/lib/rubocop/cop/style/line_end_concatenation.rb +4 -4
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/method_def_parentheses.rb +4 -3
- data/lib/rubocop/cop/style/method_missing.rb +8 -8
- data/lib/rubocop/cop/style/min_max.rb +12 -12
- data/lib/rubocop/cop/style/missing_else.rb +5 -4
- data/lib/rubocop/cop/style/mixin_grouping.rb +29 -19
- data/lib/rubocop/cop/style/mixin_usage.rb +8 -10
- data/lib/rubocop/cop/style/module_function.rb +17 -5
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +4 -4
- data/lib/rubocop/cop/style/multiline_if_then.rb +14 -13
- data/lib/rubocop/cop/style/multiline_memoization.rb +8 -14
- data/lib/rubocop/cop/style/mutable_constant.rb +12 -12
- data/lib/rubocop/cop/style/negated_if.rb +22 -30
- data/lib/rubocop/cop/style/negated_while.rb +1 -5
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +18 -17
- data/lib/rubocop/cop/style/next.rb +39 -11
- data/lib/rubocop/cop/style/nil_comparison.rb +6 -6
- data/lib/rubocop/cop/style/non_nil_check.rb +25 -22
- data/lib/rubocop/cop/style/not.rb +14 -4
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +6 -6
- data/lib/rubocop/cop/style/numeric_literals.rb +7 -7
- data/lib/rubocop/cop/style/numeric_predicate.rb +14 -18
- data/lib/rubocop/cop/style/one_line_conditional.rb +4 -4
- data/lib/rubocop/cop/style/option_hash.rb +11 -14
- data/lib/rubocop/cop/style/or_assignment.rb +2 -2
- data/lib/rubocop/cop/style/parallel_assignment.rb +13 -13
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +19 -3
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +24 -3
- data/lib/rubocop/cop/style/percent_q_literals.rb +27 -6
- data/lib/rubocop/cop/style/perl_backrefs.rb +7 -0
- data/lib/rubocop/cop/style/preferred_hash_methods.rb +6 -10
- data/lib/rubocop/cop/style/proc.rb +8 -0
- data/lib/rubocop/cop/style/raise_args.rb +8 -14
- data/lib/rubocop/cop/style/random_with_offset.rb +160 -0
- data/lib/rubocop/cop/style/redundant_begin.rb +14 -4
- data/lib/rubocop/cop/style/redundant_conditional.rb +9 -8
- data/lib/rubocop/cop/style/redundant_return.rb +5 -4
- data/lib/rubocop/cop/style/redundant_self.rb +25 -26
- data/lib/rubocop/cop/style/regexp_literal.rb +74 -21
- data/lib/rubocop/cop/style/rescue_modifier.rb +11 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +122 -0
- data/lib/rubocop/cop/style/return_nil.rb +4 -8
- data/lib/rubocop/cop/style/safe_navigation.rb +20 -2
- data/lib/rubocop/cop/style/self_assignment.rb +13 -13
- data/lib/rubocop/cop/style/semicolon.rb +18 -8
- data/lib/rubocop/cop/style/send.rb +9 -0
- data/lib/rubocop/cop/style/signal_exception.rb +100 -0
- data/lib/rubocop/cop/style/single_line_block_params.rb +2 -2
- data/lib/rubocop/cop/style/single_line_methods.rb +20 -8
- data/lib/rubocop/cop/style/special_global_vars.rb +16 -11
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +7 -12
- data/lib/rubocop/cop/style/stderr_puts.rb +5 -3
- data/lib/rubocop/cop/style/string_hash_keys.rb +36 -0
- data/lib/rubocop/cop/style/string_literals.rb +22 -0
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +2 -8
- data/lib/rubocop/cop/style/string_methods.rb +18 -7
- data/lib/rubocop/cop/style/symbol_array.rb +5 -9
- data/lib/rubocop/cop/style/symbol_proc.rb +5 -4
- data/lib/rubocop/cop/style/ternary_parentheses.rb +31 -40
- data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +101 -0
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +20 -6
- data/lib/rubocop/cop/style/trailing_comma_in_literal.rb +22 -7
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +95 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +8 -4
- data/lib/rubocop/cop/style/trivial_accessors.rb +32 -10
- data/lib/rubocop/cop/style/unless_else.rb +15 -0
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +17 -7
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +14 -18
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +13 -12
- data/lib/rubocop/cop/style/variable_interpolation.rb +20 -9
- data/lib/rubocop/cop/style/when_then.rb +13 -0
- data/lib/rubocop/cop/style/while_until_do.rb +26 -4
- data/lib/rubocop/cop/style/while_until_modifier.rb +25 -6
- data/lib/rubocop/cop/style/word_array.rb +4 -8
- data/lib/rubocop/cop/style/yoda_condition.rb +10 -16
- data/lib/rubocop/cop/style/zero_length_predicate.rb +23 -15
- data/lib/rubocop/cop/util.rb +42 -33
- data/lib/rubocop/cop/variable_force.rb +1 -1
- data/lib/rubocop/cop/variable_force/assignment.rb +4 -2
- data/lib/rubocop/cop/variable_force/scope.rb +1 -5
- data/lib/rubocop/cop/variable_force/variable.rb +1 -1
- data/lib/rubocop/formatter/disabled_config_formatter.rb +2 -3
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/json_formatter.rb +9 -3
- data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
- data/lib/rubocop/node_pattern.rb +2 -3
- data/lib/rubocop/options.rb +8 -8
- data/lib/rubocop/path_util.rb +15 -3
- data/lib/rubocop/processed_source.rb +5 -2
- data/lib/rubocop/rspec/shared_contexts.rb +4 -0
- data/lib/rubocop/runner.rb +1 -1
- data/lib/rubocop/token.rb +74 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +37 -10
- data/lib/rubocop/cop/internal_affairs/deprecated_positional_arguments.rb +0 -81
- data/lib/rubocop/cop/layout/space_inside_brackets.rb +0 -20
- data/lib/rubocop/cop/lint/rescue_without_error_class.rb +0 -41
- data/lib/rubocop/cop/mixin/space_inside.rb +0 -76
@@ -5,50 +5,49 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop checks for redundant uses of `self`.
|
7
7
|
#
|
8
|
-
# `self` is only needed when:
|
8
|
+
# The usage of `self` is only needed when:
|
9
9
|
#
|
10
10
|
# * Sending a message to same object with zero arguments in
|
11
11
|
# presence of a method name clash with an argument or a local
|
12
12
|
# variable.
|
13
13
|
#
|
14
|
-
#
|
15
|
-
# with public or protected scope, you cannot send private
|
16
|
-
# messages this way.
|
14
|
+
# * Calling an attribute writer to prevent an local variable assignment.
|
17
15
|
#
|
18
|
-
#
|
16
|
+
# Note, with using explicit self you can only send messages with public or
|
17
|
+
# protected scope, you cannot send private messages this way.
|
19
18
|
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
19
|
+
# Note we allow uses of `self` with operators because it would be awkward
|
20
|
+
# otherwise.
|
21
|
+
#
|
22
|
+
# @example
|
23
23
|
#
|
24
|
+
# # bad
|
24
25
|
# def foo(bar)
|
25
|
-
# self.
|
26
|
+
# self.baz
|
26
27
|
# end
|
27
28
|
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
# self.bar
|
29
|
+
# # good
|
30
|
+
# def foo(bar)
|
31
|
+
# self.bar # Resolves name clash with the argument.
|
31
32
|
# end
|
32
33
|
#
|
33
|
-
#
|
34
|
-
#
|
34
|
+
# def foo
|
35
|
+
# bar = 1
|
36
|
+
# self.bar # Resolves name clash with the local variable.
|
35
37
|
# end
|
36
38
|
#
|
37
|
-
# * Calling an attribute writer to prevent an local variable assignment
|
38
|
-
#
|
39
|
-
# attr_writer :bar
|
40
|
-
#
|
41
39
|
# def foo
|
42
|
-
#
|
40
|
+
# %w[x y z].select do |bar|
|
41
|
+
# self.bar == bar # Resolves name clash with argument of the block.
|
42
|
+
# end
|
43
43
|
# end
|
44
|
-
#
|
45
|
-
# Special cases:
|
46
|
-
#
|
47
|
-
# We allow uses of `self` with operators because it would be awkward
|
48
|
-
# otherwise.
|
49
44
|
class RedundantSelf < Cop
|
50
45
|
MSG = 'Redundant `self` detected.'.freeze
|
51
46
|
|
47
|
+
def self.autocorrect_incompatible_with
|
48
|
+
[ColonMethodCall]
|
49
|
+
end
|
50
|
+
|
52
51
|
def initialize(config = nil, options = nil)
|
53
52
|
super
|
54
53
|
@allowed_send_nodes = []
|
@@ -101,8 +100,6 @@ module RuboCop
|
|
101
100
|
add_scope(node, @local_variables_scopes[node])
|
102
101
|
end
|
103
102
|
|
104
|
-
private
|
105
|
-
|
106
103
|
def autocorrect(node)
|
107
104
|
lambda do |corrector|
|
108
105
|
corrector.remove(node.receiver.source_range)
|
@@ -110,6 +107,8 @@ module RuboCop
|
|
110
107
|
end
|
111
108
|
end
|
112
109
|
|
110
|
+
private
|
111
|
+
|
113
112
|
def add_scope(node, local_variables = [])
|
114
113
|
node.descendants.each do |child_node|
|
115
114
|
@local_variables_scopes[child_node] = local_variables
|
@@ -5,28 +5,81 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop enforces using // or %r around regular expressions.
|
7
7
|
#
|
8
|
-
# @example
|
9
|
-
# #
|
8
|
+
# @example EnforcedStyle: slashes (default)
|
9
|
+
# # bad
|
10
|
+
# snake_case = %r{^[\dA-Z_]+$}
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# regex = %r{
|
14
|
+
# foo
|
15
|
+
# (bar)
|
16
|
+
# (baz)
|
17
|
+
# }x
|
18
|
+
#
|
19
|
+
# # good
|
10
20
|
# snake_case = /^[\dA-Z_]+$/
|
11
21
|
#
|
12
|
-
# #
|
22
|
+
# # good
|
23
|
+
# regex = /
|
24
|
+
# foo
|
25
|
+
# (bar)
|
26
|
+
# (baz)
|
27
|
+
# /x
|
28
|
+
#
|
29
|
+
# @example EnforcedStyle: percent_r
|
30
|
+
# # bad
|
31
|
+
# snake_case = /^[\dA-Z_]+$/
|
32
|
+
#
|
33
|
+
# # bad
|
34
|
+
# regex = /
|
35
|
+
# foo
|
36
|
+
# (bar)
|
37
|
+
# (baz)
|
38
|
+
# /x
|
39
|
+
#
|
40
|
+
# # good
|
41
|
+
# snake_case = %r{^[\dA-Z_]+$}
|
42
|
+
#
|
43
|
+
# # good
|
44
|
+
# regex = %r{
|
45
|
+
# foo
|
46
|
+
# (bar)
|
47
|
+
# (baz)
|
48
|
+
# }x
|
49
|
+
#
|
50
|
+
# @example EnforcedStyle: mixed
|
51
|
+
# # bad
|
13
52
|
# snake_case = %r{^[\dA-Z_]+$}
|
14
53
|
#
|
15
|
-
# #
|
54
|
+
# # bad
|
16
55
|
# regex = /
|
17
56
|
# foo
|
18
57
|
# (bar)
|
19
58
|
# (baz)
|
20
59
|
# /x
|
21
60
|
#
|
22
|
-
# #
|
61
|
+
# # good
|
62
|
+
# snake_case = /^[\dA-Z_]+$/
|
63
|
+
#
|
64
|
+
# # good
|
23
65
|
# regex = %r{
|
24
66
|
# foo
|
25
67
|
# (bar)
|
26
68
|
# (baz)
|
27
69
|
# }x
|
28
70
|
#
|
29
|
-
#
|
71
|
+
# @example AllowInnerSlashes: false (default)
|
72
|
+
# # If `false`, the cop will always recommend using `%r` if one or more
|
73
|
+
# # slashes are found in the regexp string.
|
74
|
+
#
|
75
|
+
# # bad
|
76
|
+
# x =~ /home\//
|
77
|
+
#
|
78
|
+
# # good
|
79
|
+
# x =~ %r{home/}
|
80
|
+
#
|
81
|
+
# @example AllowInnerSlashes: true
|
82
|
+
# # good
|
30
83
|
# x =~ /home\//
|
31
84
|
class RegexpLiteral < Cop
|
32
85
|
include ConfigurableEnforcedStyle
|
@@ -42,6 +95,21 @@ module RuboCop
|
|
42
95
|
end
|
43
96
|
end
|
44
97
|
|
98
|
+
def autocorrect(node)
|
99
|
+
return if contains_slash?(node)
|
100
|
+
|
101
|
+
replacement = if slash_literal?(node)
|
102
|
+
['%r', ''].zip(preferred_delimiters).map(&:join)
|
103
|
+
else
|
104
|
+
%w[/ /]
|
105
|
+
end
|
106
|
+
|
107
|
+
lambda do |corrector|
|
108
|
+
corrector.replace(node.loc.begin, replacement.first)
|
109
|
+
corrector.replace(node.loc.end, replacement.last)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
45
113
|
private
|
46
114
|
|
47
115
|
def check_slash_literal(node)
|
@@ -101,21 +169,6 @@ module RuboCop
|
|
101
169
|
config.for_cop('Style/PercentLiteralDelimiters') \
|
102
170
|
['PreferredDelimiters']['%r'].split(//)
|
103
171
|
end
|
104
|
-
|
105
|
-
def autocorrect(node)
|
106
|
-
return if contains_slash?(node)
|
107
|
-
|
108
|
-
replacement = if slash_literal?(node)
|
109
|
-
['%r', ''].zip(preferred_delimiters).map(&:join)
|
110
|
-
else
|
111
|
-
%w[/ /]
|
112
|
-
end
|
113
|
-
|
114
|
-
lambda do |corrector|
|
115
|
-
corrector.replace(node.loc.begin, replacement.first)
|
116
|
-
corrector.replace(node.loc.end, replacement.last)
|
117
|
-
end
|
118
|
-
end
|
119
172
|
end
|
120
173
|
end
|
121
174
|
end
|
@@ -4,6 +4,17 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# This cop checks for uses of rescue in its modifier form.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# some_method rescue handle_error
|
11
|
+
#
|
12
|
+
# # good
|
13
|
+
# begin
|
14
|
+
# some_method
|
15
|
+
# rescue
|
16
|
+
# handle_error
|
17
|
+
# end
|
7
18
|
class RescueModifier < Cop
|
8
19
|
include AutocorrectAlignment
|
9
20
|
include RescueNode
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for rescuing `StandardError`. There are two supported
|
7
|
+
# styles `implicit` and `explicit`. This cop will not register an offense
|
8
|
+
# if any error other than `StandardError` is specified.
|
9
|
+
#
|
10
|
+
# @example EnforcedStyle: implicit
|
11
|
+
# # `implicit` will enforce using `rescue` instead of
|
12
|
+
# # `rescue StandardError`.
|
13
|
+
#
|
14
|
+
# # bad
|
15
|
+
# begin
|
16
|
+
# foo
|
17
|
+
# rescue StandardError
|
18
|
+
# bar
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# begin
|
23
|
+
# foo
|
24
|
+
# rescue
|
25
|
+
# bar
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# # good
|
29
|
+
# begin
|
30
|
+
# foo
|
31
|
+
# rescue OtherError
|
32
|
+
# bar
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# # good
|
36
|
+
# begin
|
37
|
+
# foo
|
38
|
+
# rescue StandardError, SecurityError
|
39
|
+
# bar
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# @example EnforcedStyle: explicit (default)
|
43
|
+
# # `explicit` will enforce using `rescue StandardError`
|
44
|
+
# # instead of `rescue`.
|
45
|
+
#
|
46
|
+
# # bad
|
47
|
+
# begin
|
48
|
+
# foo
|
49
|
+
# rescue
|
50
|
+
# bar
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# # good
|
54
|
+
# begin
|
55
|
+
# foo
|
56
|
+
# rescue StandardError
|
57
|
+
# bar
|
58
|
+
# end
|
59
|
+
#
|
60
|
+
# # good
|
61
|
+
# begin
|
62
|
+
# foo
|
63
|
+
# rescue OtherError
|
64
|
+
# bar
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# # good
|
68
|
+
# begin
|
69
|
+
# foo
|
70
|
+
# rescue StandardError, SecurityError
|
71
|
+
# bar
|
72
|
+
# end
|
73
|
+
class RescueStandardError < Cop
|
74
|
+
include RescueNode
|
75
|
+
include ConfigurableEnforcedStyle
|
76
|
+
|
77
|
+
MSG_IMPLICIT = 'Omit the error class when rescuing ' \
|
78
|
+
'`StandardError` by itself.'.freeze
|
79
|
+
MSG_EXPLICIT = 'Avoid rescuing without specifying ' \
|
80
|
+
'an error class.'.freeze
|
81
|
+
|
82
|
+
def_node_matcher :rescue_without_error_class?, <<-PATTERN
|
83
|
+
(resbody nil? _ _)
|
84
|
+
PATTERN
|
85
|
+
|
86
|
+
def_node_matcher :rescue_standard_error?, <<-PATTERN
|
87
|
+
(resbody $(array (const nil? :StandardError)) _ _)
|
88
|
+
PATTERN
|
89
|
+
|
90
|
+
def on_resbody(node)
|
91
|
+
return if rescue_modifier?(node)
|
92
|
+
case style
|
93
|
+
when :implicit
|
94
|
+
rescue_standard_error?(node) do |error|
|
95
|
+
add_offense(node,
|
96
|
+
location: node.loc.keyword.join(error.loc.expression),
|
97
|
+
message: MSG_IMPLICIT)
|
98
|
+
end
|
99
|
+
when :explicit
|
100
|
+
rescue_without_error_class?(node) do
|
101
|
+
add_offense(node, location: :keyword, message: MSG_EXPLICIT)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def autocorrect(node)
|
107
|
+
lambda do |corrector|
|
108
|
+
case style
|
109
|
+
when :implicit
|
110
|
+
error = rescue_standard_error?(node)
|
111
|
+
range = range_between(node.loc.keyword.end_pos,
|
112
|
+
error.loc.expression.end_pos)
|
113
|
+
corrector.remove(range)
|
114
|
+
when :explicit
|
115
|
+
corrector.insert_after(node.loc.keyword, ' StandardError')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -7,10 +7,7 @@ module RuboCop
|
|
7
7
|
#
|
8
8
|
# Supported styles are: return, return_nil.
|
9
9
|
#
|
10
|
-
# @example
|
11
|
-
#
|
12
|
-
# # EnforcedStyle: return (default)
|
13
|
-
#
|
10
|
+
# @example EnforcedStyle: return (default)
|
14
11
|
# # bad
|
15
12
|
# def foo(arg)
|
16
13
|
# return nil if arg
|
@@ -21,8 +18,7 @@ module RuboCop
|
|
21
18
|
# return if arg
|
22
19
|
# end
|
23
20
|
#
|
24
|
-
#
|
25
|
-
#
|
21
|
+
# @example EnforcedStyle: return_nil
|
26
22
|
# # bad
|
27
23
|
# def foo(arg)
|
28
24
|
# return if arg
|
@@ -61,8 +57,6 @@ module RuboCop
|
|
61
57
|
add_offense(node) unless correct_style?(node)
|
62
58
|
end
|
63
59
|
|
64
|
-
private
|
65
|
-
|
66
60
|
def autocorrect(node)
|
67
61
|
lambda do |corrector|
|
68
62
|
corrected = style == :return ? 'return' : 'return nil'
|
@@ -70,6 +64,8 @@ module RuboCop
|
|
70
64
|
end
|
71
65
|
end
|
72
66
|
|
67
|
+
private
|
68
|
+
|
73
69
|
def message(_node)
|
74
70
|
style == :return ? RETURN_MSG : RETURN_NIL_MSG
|
75
71
|
end
|
@@ -150,18 +150,36 @@ module RuboCop
|
|
150
150
|
node.receiver
|
151
151
|
end
|
152
152
|
|
153
|
-
|
153
|
+
if receiver == checked_variable
|
154
|
+
return nil if assignment_arithmetic_or_comparison?(node)
|
155
|
+
|
156
|
+
return receiver
|
157
|
+
end
|
154
158
|
|
155
159
|
find_matching_receiver_invocation(receiver, checked_variable)
|
156
160
|
end
|
157
161
|
|
162
|
+
def assignment_arithmetic_or_comparison?(node)
|
163
|
+
node.assignment? ||
|
164
|
+
node.parent.arithmetic_operation? ||
|
165
|
+
comparison_node?(node.parent)
|
166
|
+
end
|
167
|
+
|
168
|
+
def comparison_node?(parent)
|
169
|
+
parent.send_type? && parent.comparison_method?
|
170
|
+
end
|
171
|
+
|
158
172
|
def unsafe_method?(send_node)
|
159
173
|
NIL_METHODS.include?(send_node.method_name) ||
|
160
174
|
negated?(send_node) || !send_node.dot?
|
161
175
|
end
|
162
176
|
|
163
177
|
def negated?(send_node)
|
164
|
-
send_node.parent
|
178
|
+
if send_node.parent && send_node.parent.send_type?
|
179
|
+
negated?(send_node.parent)
|
180
|
+
else
|
181
|
+
send_node.send_type? && send_node.method?(:!)
|
182
|
+
end
|
165
183
|
end
|
166
184
|
|
167
185
|
def begin_range(node, method_call)
|
@@ -13,7 +13,7 @@ module RuboCop
|
|
13
13
|
# # good
|
14
14
|
# x += 1
|
15
15
|
class SelfAssignment < Cop
|
16
|
-
MSG = 'Use self-assignment shorthand
|
16
|
+
MSG = 'Use self-assignment shorthand `%<method>s=`.'.freeze
|
17
17
|
OPS = %i[+ - * ** / | &].freeze
|
18
18
|
|
19
19
|
def self.autocorrect_incompatible_with
|
@@ -32,6 +32,16 @@ module RuboCop
|
|
32
32
|
check(node, :cvar)
|
33
33
|
end
|
34
34
|
|
35
|
+
def autocorrect(node)
|
36
|
+
_var_name, rhs = *node
|
37
|
+
|
38
|
+
if rhs.send_type?
|
39
|
+
autocorrect_send_node(node, rhs)
|
40
|
+
elsif %i[and or].include?(rhs.type)
|
41
|
+
autocorrect_boolean_node(node, rhs)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
35
45
|
private
|
36
46
|
|
37
47
|
def check(node, var_type)
|
@@ -52,7 +62,7 @@ module RuboCop
|
|
52
62
|
target_node = s(var_type, var_name)
|
53
63
|
return unless receiver == target_node
|
54
64
|
|
55
|
-
add_offense(node, message: format(MSG, method_name))
|
65
|
+
add_offense(node, message: format(MSG, method: method_name))
|
56
66
|
end
|
57
67
|
|
58
68
|
def check_boolean_node(node, rhs, var_name, var_type)
|
@@ -62,17 +72,7 @@ module RuboCop
|
|
62
72
|
return unless first_operand == target_node
|
63
73
|
|
64
74
|
operator = rhs.loc.operator.source
|
65
|
-
add_offense(node, message: format(MSG, operator))
|
66
|
-
end
|
67
|
-
|
68
|
-
def autocorrect(node)
|
69
|
-
_var_name, rhs = *node
|
70
|
-
|
71
|
-
if rhs.send_type?
|
72
|
-
autocorrect_send_node(node, rhs)
|
73
|
-
elsif %i[and or].include?(rhs.type)
|
74
|
-
autocorrect_boolean_node(node, rhs)
|
75
|
-
end
|
75
|
+
add_offense(node, message: format(MSG, method: operator))
|
76
76
|
end
|
77
77
|
|
78
78
|
def autocorrect_send_node(node, rhs)
|