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,31 +5,32 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# Use a consistent style for named format string tokens.
|
7
7
|
#
|
8
|
-
# @example
|
9
|
-
#
|
10
|
-
# EnforcedStyle: annotated
|
8
|
+
# @example EnforcedStyle: annotated (default)
|
11
9
|
#
|
12
10
|
# # bad
|
13
|
-
#
|
14
11
|
# format('%{greeting}', greeting: 'Hello')
|
15
12
|
# format('%s', 'Hello')
|
16
13
|
#
|
17
14
|
# # good
|
18
|
-
#
|
19
15
|
# format('%<greeting>s', greeting: 'Hello')
|
20
16
|
#
|
21
|
-
# @example
|
22
|
-
#
|
23
|
-
# EnforcedStyle: template
|
17
|
+
# @example EnforcedStyle: template
|
24
18
|
#
|
25
19
|
# # bad
|
26
|
-
#
|
27
20
|
# format('%<greeting>s', greeting: 'Hello')
|
28
21
|
# format('%s', 'Hello')
|
29
22
|
#
|
30
23
|
# # good
|
31
|
-
#
|
32
24
|
# format('%{greeting}', greeting: 'Hello')
|
25
|
+
#
|
26
|
+
# @example EnforcedStyle: unannotated
|
27
|
+
#
|
28
|
+
# # bad
|
29
|
+
# format('%<greeting>s', greeting: 'Hello')
|
30
|
+
# format('%{greeting}', 'Hello')
|
31
|
+
#
|
32
|
+
# # good
|
33
|
+
# format('%s', 'Hello')
|
33
34
|
class FormatStringToken < Cop
|
34
35
|
include ConfigurableEnforcedStyle
|
35
36
|
|
@@ -37,7 +38,8 @@ module RuboCop
|
|
37
38
|
|
38
39
|
STYLE_PATTERNS = {
|
39
40
|
annotated: /(?<token>%<[^>]+>#{FIELD_CHARACTERS})/,
|
40
|
-
template:
|
41
|
+
template: /(?<token>%\{[^\}]+\})/,
|
42
|
+
unannotated: /(?<token>%#{FIELD_CHARACTERS})/
|
41
43
|
}.freeze
|
42
44
|
|
43
45
|
TOKEN_PATTERN = Regexp.union(STYLE_PATTERNS.values)
|
@@ -62,14 +64,13 @@ module RuboCop
|
|
62
64
|
"Prefer #{message_text(style)} over #{message_text(detected_style)}."
|
63
65
|
end
|
64
66
|
|
65
|
-
# rubocop:disable FormatStringToken
|
66
67
|
def message_text(style)
|
67
68
|
case style
|
68
69
|
when :annotated then 'annotated tokens (like `%<foo>s`)'
|
69
|
-
when :template
|
70
|
+
when :template then 'template tokens (like `%{foo}`)'
|
71
|
+
when :unannotated then 'unannotated tokens (like `%s`)'
|
70
72
|
end
|
71
73
|
end
|
72
|
-
# rubocop:enable FormatStringToken
|
73
74
|
|
74
75
|
def tokens(str_node, &block)
|
75
76
|
return if str_node.source == '__FILE__'
|
@@ -5,7 +5,7 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop is designed to help upgrade to Ruby 3.0. It will add the
|
7
7
|
# comment `# frozen_string_literal: true` to the top of files to
|
8
|
-
# enable frozen string literals. Frozen string literals
|
8
|
+
# enable frozen string literals. Frozen string literals may be default
|
9
9
|
# in Ruby 3.0. The comment will be added below a shebang and encoding
|
10
10
|
# comment. The frozen string literal comment is only valid in Ruby 2.3+.
|
11
11
|
class FrozenStringLiteralComment < Cop
|
@@ -27,10 +27,11 @@ module RuboCop
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
def autocorrect(node)
|
30
|
+
def autocorrect(node) # rubocop:disable Metrics/MethodLength
|
31
31
|
lambda do |corrector|
|
32
32
|
if style == :never
|
33
|
-
corrector.remove(range_with_surrounding_space(node.pos,
|
33
|
+
corrector.remove(range_with_surrounding_space(range: node.pos,
|
34
|
+
side: :right))
|
34
35
|
else
|
35
36
|
last_special_comment = last_special_comment(processed_source)
|
36
37
|
if last_special_comment.nil?
|
@@ -9,10 +9,20 @@ module RuboCop
|
|
9
9
|
# users can allow additional variables via the AllowedVariables option.
|
10
10
|
#
|
11
11
|
# Note that backreferences like $1, $2, etc are not global variables.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# # bad
|
15
|
+
# $foo = 2
|
16
|
+
# bar = $foo + 5
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# FOO = 2
|
20
|
+
# foo = 2
|
21
|
+
# $stdin.read
|
12
22
|
class GlobalVars < Cop
|
13
23
|
MSG = 'Do not introduce global variables.'.freeze
|
14
24
|
|
15
|
-
#
|
25
|
+
# built-in global variables and their English aliases
|
16
26
|
# http://www.zenspider.com/Languages/Ruby/QuickRef.html
|
17
27
|
BUILT_IN_VARS = %w[
|
18
28
|
$: $LOAD_PATH
|
@@ -19,49 +19,41 @@ module RuboCop
|
|
19
19
|
# * ruby19_no_mixed_keys - forces use of ruby 1.9 syntax and forbids mixed
|
20
20
|
# syntax hashes
|
21
21
|
#
|
22
|
-
# @example
|
23
|
-
#
|
22
|
+
# @example EnforcedStyle: ruby19 (default)
|
23
|
+
# # bad
|
24
|
+
# {:a => 2}
|
25
|
+
# {b: 1, :c => 2}
|
24
26
|
#
|
25
|
-
#
|
27
|
+
# # good
|
26
28
|
# {a: 2, b: 1}
|
27
29
|
# {:c => 2, 'd' => 2} # acceptable since 'd' isn't a symbol
|
28
30
|
# {d: 1, 'e' => 2} # technically not forbidden
|
29
31
|
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
# {b: 1, :c => 2}
|
33
|
-
#
|
34
|
-
# @example
|
35
|
-
# "EnforcedStyle => 'hash_rockets'"
|
36
|
-
#
|
37
|
-
# @good
|
38
|
-
# {:a => 1, :b => 2}
|
39
|
-
#
|
40
|
-
# @bad
|
32
|
+
# @example EnforcedStyle: hash_rockets
|
33
|
+
# # bad
|
41
34
|
# {a: 1, b: 2}
|
42
35
|
# {c: 1, 'd' => 5}
|
43
36
|
#
|
44
|
-
#
|
45
|
-
# "EnforcedStyle => 'no_mixed_keys'"
|
46
|
-
#
|
47
|
-
# @good
|
37
|
+
# # good
|
48
38
|
# {:a => 1, :b => 2}
|
49
|
-
# {c: 1, d: 2}
|
50
39
|
#
|
51
|
-
#
|
40
|
+
# @example EnforcedStyle: no_mixed_keys
|
41
|
+
# # bad
|
52
42
|
# {:a => 1, b: 2}
|
53
43
|
# {c: 1, 'd' => 2}
|
54
44
|
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
# @good
|
59
|
-
# {a: 1, b: 2}
|
60
|
-
# {:c => 3, 'd' => 4}
|
45
|
+
# # good
|
46
|
+
# {:a => 1, :b => 2}
|
47
|
+
# {c: 1, d: 2}
|
61
48
|
#
|
62
|
-
#
|
49
|
+
# @example EnforcedStyle: ruby19_no_mixed_keys
|
50
|
+
# # bad
|
63
51
|
# {:a => 1, :b => 2}
|
64
52
|
# {c: 2, 'd' => 3} # should just use hash rockets
|
53
|
+
#
|
54
|
+
# # good
|
55
|
+
# {a: 1, b: 2}
|
56
|
+
# {:c => 3, 'd' => 4}
|
65
57
|
class HashSyntax < Cop
|
66
58
|
include ConfigurableEnforcedStyle
|
67
59
|
|
@@ -174,30 +166,39 @@ module RuboCop
|
|
174
166
|
end
|
175
167
|
end
|
176
168
|
|
177
|
-
def autocorrect_ruby19(corrector,
|
178
|
-
key =
|
179
|
-
op =
|
169
|
+
def autocorrect_ruby19(corrector, pair_node)
|
170
|
+
key = pair_node.key
|
171
|
+
op = pair_node.loc.operator
|
172
|
+
|
173
|
+
range = range_between(key.source_range.begin_pos, op.end_pos)
|
174
|
+
range = range_with_surrounding_space(range: range, side: :right)
|
175
|
+
|
176
|
+
new_key = key.sym_type? ? key.value : key.source
|
177
|
+
|
178
|
+
space = argument_without_space?(pair_node.parent) ? ' ' : ''
|
179
|
+
|
180
|
+
corrector.replace(range, "#{space}#{new_key}: ")
|
181
|
+
end
|
180
182
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
range.source.sub(/^:(.*\S)\s*=>\s*$/, '\1: '))
|
183
|
+
def argument_without_space?(node)
|
184
|
+
node.argument? &&
|
185
|
+
node.loc.expression.begin_pos == node.parent.loc.selector.end_pos
|
185
186
|
end
|
186
187
|
|
187
|
-
def autocorrect_hash_rockets(corrector,
|
188
|
-
key =
|
189
|
-
op =
|
188
|
+
def autocorrect_hash_rockets(corrector, pair_node)
|
189
|
+
key = pair_node.key.source_range
|
190
|
+
op = pair_node.loc.operator
|
190
191
|
|
191
|
-
corrector.insert_after(key,
|
192
|
+
corrector.insert_after(key, pair_node.inverse_delimiter(true))
|
192
193
|
corrector.insert_before(key, ':')
|
193
|
-
corrector.remove(range_with_surrounding_space(op))
|
194
|
+
corrector.remove(range_with_surrounding_space(range: op))
|
194
195
|
end
|
195
196
|
|
196
|
-
def autocorrect_no_mixed_keys(corrector,
|
197
|
-
if
|
198
|
-
autocorrect_hash_rockets(corrector,
|
197
|
+
def autocorrect_no_mixed_keys(corrector, pair_node)
|
198
|
+
if pair_node.colon?
|
199
|
+
autocorrect_hash_rockets(corrector, pair_node)
|
199
200
|
else
|
200
|
-
autocorrect_ruby19(corrector,
|
201
|
+
autocorrect_ruby19(corrector, pair_node)
|
201
202
|
end
|
202
203
|
end
|
203
204
|
|
@@ -7,7 +7,7 @@ module RuboCop
|
|
7
7
|
# each branch of a conditional statement.
|
8
8
|
#
|
9
9
|
# @example
|
10
|
-
#
|
10
|
+
# # bad
|
11
11
|
# if condition
|
12
12
|
# do_x
|
13
13
|
# do_z
|
@@ -16,7 +16,7 @@ module RuboCop
|
|
16
16
|
# do_z
|
17
17
|
# end
|
18
18
|
#
|
19
|
-
#
|
19
|
+
# # good
|
20
20
|
# if condition
|
21
21
|
# do_x
|
22
22
|
# else
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
24
24
|
# end
|
25
25
|
# do_z
|
26
26
|
#
|
27
|
-
#
|
27
|
+
# # bad
|
28
28
|
# if condition
|
29
29
|
# do_z
|
30
30
|
# do_x
|
@@ -33,7 +33,7 @@ module RuboCop
|
|
33
33
|
# do_y
|
34
34
|
# end
|
35
35
|
#
|
36
|
-
#
|
36
|
+
# # good
|
37
37
|
# do_z
|
38
38
|
# if condition
|
39
39
|
# do_x
|
@@ -41,7 +41,7 @@ module RuboCop
|
|
41
41
|
# do_y
|
42
42
|
# end
|
43
43
|
#
|
44
|
-
#
|
44
|
+
# # bad
|
45
45
|
# case foo
|
46
46
|
# when 1
|
47
47
|
# do_x
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
# do_x
|
52
52
|
# end
|
53
53
|
#
|
54
|
-
#
|
54
|
+
# # good
|
55
55
|
# case foo
|
56
56
|
# when 1
|
57
57
|
# do_x
|
@@ -63,7 +63,7 @@ module RuboCop
|
|
63
63
|
# do_z
|
64
64
|
# end
|
65
65
|
class IdenticalConditionalBranches < Cop
|
66
|
-
MSG = 'Move
|
66
|
+
MSG = 'Move `%<source>s` out of the conditional.'.freeze
|
67
67
|
|
68
68
|
def on_if(node)
|
69
69
|
return if node.elsif?
|
@@ -105,7 +105,7 @@ module RuboCop
|
|
105
105
|
end
|
106
106
|
|
107
107
|
def message(node)
|
108
|
-
format(MSG, node.source)
|
108
|
+
format(MSG, source: node.source)
|
109
109
|
end
|
110
110
|
|
111
111
|
# `elsif` branches show up in the if node as nested `else` branches. We
|
@@ -8,16 +8,7 @@ module RuboCop
|
|
8
8
|
# This helps to keep the nesting level from getting too deep.
|
9
9
|
#
|
10
10
|
# @example
|
11
|
-
#
|
12
|
-
# if condition_a
|
13
|
-
# action_a
|
14
|
-
# elsif condition_b
|
15
|
-
# action_b
|
16
|
-
# else
|
17
|
-
# action_c
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# @bad
|
11
|
+
# # bad
|
21
12
|
# if condition_a
|
22
13
|
# action_a
|
23
14
|
# else
|
@@ -27,6 +18,15 @@ module RuboCop
|
|
27
18
|
# action_c
|
28
19
|
# end
|
29
20
|
# end
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# if condition_a
|
24
|
+
# action_a
|
25
|
+
# elsif condition_b
|
26
|
+
# action_b
|
27
|
+
# else
|
28
|
+
# action_c
|
29
|
+
# end
|
30
30
|
class IfInsideElse < Cop
|
31
31
|
MSG = 'Convert `if` nested inside `else` to `elsif`.'.freeze
|
32
32
|
|
@@ -4,13 +4,13 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# Checks for if and unless statements that would fit on one line
|
7
|
-
# if written as a modifier if/unless.
|
8
|
-
#
|
7
|
+
# if written as a modifier if/unless. The maximum line length is
|
8
|
+
# configured in the `Metrics/LineLength` cop.
|
9
9
|
class IfUnlessModifier < Cop
|
10
10
|
include StatementModifier
|
11
11
|
|
12
|
-
MSG = 'Favor modifier
|
13
|
-
'Another good alternative is the usage of control flow ' \
|
12
|
+
MSG = 'Favor modifier `%<keyword>s` usage when having a single-line ' \
|
13
|
+
'body. Another good alternative is the usage of control flow ' \
|
14
14
|
'`&&`/`||`.'.freeze
|
15
15
|
|
16
16
|
ASSIGNMENT_TYPES = %i[lvasgn casgn cvasgn
|
@@ -20,17 +20,17 @@ module RuboCop
|
|
20
20
|
return unless eligible_node?(node)
|
21
21
|
|
22
22
|
add_offense(node, location: :keyword,
|
23
|
-
message: format(MSG, node.keyword))
|
23
|
+
message: format(MSG, keyword: node.keyword))
|
24
24
|
end
|
25
25
|
|
26
|
-
private
|
27
|
-
|
28
26
|
def autocorrect(node)
|
29
27
|
lambda do |corrector|
|
30
28
|
corrector.replace(node.source_range, to_modifier_form(node))
|
31
29
|
end
|
32
30
|
end
|
33
31
|
|
32
|
+
private
|
33
|
+
|
34
34
|
def eligible_node?(node)
|
35
35
|
!non_eligible_if?(node) && !node.chained? &&
|
36
36
|
!node.nested_conditional? && single_line_as_modifier?(node)
|
@@ -25,13 +25,13 @@ module RuboCop
|
|
25
25
|
class IfUnlessModifierOfIfUnless < Cop
|
26
26
|
include StatementModifier
|
27
27
|
|
28
|
-
MSG = 'Avoid modifier
|
28
|
+
MSG = 'Avoid modifier `%<keyword>s` after another conditional.'.freeze
|
29
29
|
|
30
30
|
def on_if(node)
|
31
31
|
return unless node.modifier_form? && node.body.if_type?
|
32
32
|
|
33
33
|
add_offense(node, location: :keyword,
|
34
|
-
message: format(MSG, node.keyword))
|
34
|
+
message: format(MSG, keyword: node.keyword))
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -4,6 +4,15 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# Checks for uses of semicolon in if statements.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
#
|
10
|
+
# # bad
|
11
|
+
# result = if some_condition; something else another_thing end
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# result = some_condition ? something : another_thing
|
15
|
+
#
|
7
16
|
class IfWithSemicolon < Cop
|
8
17
|
include OnNormalIfUnless
|
9
18
|
|
@@ -9,21 +9,21 @@ module RuboCop
|
|
9
9
|
# nature of the error.)
|
10
10
|
#
|
11
11
|
# @example
|
12
|
-
#
|
12
|
+
# # bad
|
13
13
|
# raise 'Error message here'
|
14
14
|
#
|
15
|
-
#
|
15
|
+
# # good
|
16
16
|
# raise ArgumentError, 'Error message here'
|
17
17
|
class ImplicitRuntimeError < Cop
|
18
|
-
MSG = 'Use
|
19
|
-
'rather than just a message.'.freeze
|
18
|
+
MSG = 'Use `%<method>s` with an explicit exception class and message,' \
|
19
|
+
' rather than just a message.'.freeze
|
20
20
|
|
21
21
|
def_node_matcher :implicit_runtime_error_raise_or_fail,
|
22
22
|
'(send nil? ${:raise :fail} {str dstr})'
|
23
23
|
|
24
24
|
def on_send(node)
|
25
25
|
implicit_runtime_error_raise_or_fail(node) do |method|
|
26
|
-
add_offense(node, message: format(MSG, method))
|
26
|
+
add_offense(node, message: format(MSG, method: method))
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -35,8 +35,6 @@ module RuboCop
|
|
35
35
|
alias on_while_post on_while
|
36
36
|
alias on_until_post on_until
|
37
37
|
|
38
|
-
private
|
39
|
-
|
40
38
|
def autocorrect(node)
|
41
39
|
if node.while_post_type? || node.until_post_type?
|
42
40
|
replace_begin_end_with_modifier(node)
|
@@ -47,6 +45,8 @@ module RuboCop
|
|
47
45
|
end
|
48
46
|
end
|
49
47
|
|
48
|
+
private
|
49
|
+
|
50
50
|
def replace_begin_end_with_modifier(node)
|
51
51
|
lambda do |corrector|
|
52
52
|
corrector.replace(node.body.loc.begin, 'loop do')
|