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
@@ -7,31 +7,41 @@ module RuboCop
|
|
7
7
|
#
|
8
8
|
# @example
|
9
9
|
# # bad
|
10
|
-
# def set_attribute(value)
|
10
|
+
# def set_attribute(value)
|
11
|
+
# end
|
11
12
|
#
|
12
13
|
# # good
|
13
14
|
# def attribute=(value)
|
15
|
+
# end
|
14
16
|
#
|
15
17
|
# # bad
|
16
|
-
# def get_attribute
|
18
|
+
# def get_attribute
|
19
|
+
# end
|
17
20
|
#
|
18
21
|
# # good
|
19
|
-
# def attribute
|
22
|
+
# def attribute
|
23
|
+
# end
|
20
24
|
class AccessorMethodName < Cop
|
25
|
+
MSG_READER = 'Do not prefix reader method names with `get_`.'.freeze
|
26
|
+
MSG_WRITER = 'Do not prefix writer method names with `set_`.'.freeze
|
27
|
+
|
21
28
|
def on_def(node)
|
22
|
-
|
23
|
-
if bad_reader_name?(node)
|
24
|
-
'Do not prefix reader method names with `get_`.'
|
25
|
-
elsif bad_writer_name?(node)
|
26
|
-
'Do not prefix writer method names with `set_`.'
|
27
|
-
end
|
29
|
+
return unless bad_reader_name?(node) || bad_writer_name?(node)
|
28
30
|
|
29
|
-
add_offense(node, location: :name
|
31
|
+
add_offense(node, location: :name)
|
30
32
|
end
|
31
33
|
alias on_defs on_def
|
32
34
|
|
33
35
|
private
|
34
36
|
|
37
|
+
def message(node)
|
38
|
+
if bad_reader_name?(node)
|
39
|
+
MSG_READER
|
40
|
+
elsif bad_writer_name?(node)
|
41
|
+
MSG_WRITER
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
35
45
|
def bad_reader_name?(node)
|
36
46
|
node.method_name.to_s.start_with?('get_') && !node.arguments?
|
37
47
|
end
|
@@ -1,9 +1,41 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# rubocop:disable Style/AsciiComments
|
4
|
+
|
3
5
|
module RuboCop
|
4
6
|
module Cop
|
5
7
|
module Naming
|
6
8
|
# This cop checks for non-ascii characters in identifier names.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# # bad
|
12
|
+
# def καλημερα # Greek alphabet (non-ascii)
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# # bad
|
16
|
+
# def こんにちはと言う # Japanese character (non-ascii)
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # bad
|
20
|
+
# def hello_🍣 # Emoji (non-ascii)
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# # good
|
24
|
+
# def say_hello
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# # bad
|
28
|
+
# 신장 = 10 # Hangul character (non-ascii)
|
29
|
+
#
|
30
|
+
# # good
|
31
|
+
# height = 10
|
32
|
+
#
|
33
|
+
# # bad
|
34
|
+
# params[:عرض_gteq] # Arabic character (non-ascii)
|
35
|
+
#
|
36
|
+
# # good
|
37
|
+
# params[:width_gteq]
|
38
|
+
#
|
7
39
|
class AsciiIdentifiers < Cop
|
8
40
|
MSG = 'Use only ascii symbols in identifiers.'.freeze
|
9
41
|
|
@@ -34,3 +66,4 @@ module RuboCop
|
|
34
66
|
end
|
35
67
|
end
|
36
68
|
end
|
69
|
+
# rubocop:enable Style/AsciiComments
|
@@ -14,23 +14,24 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# def +(other); end
|
16
16
|
class BinaryOperatorParameterName < Cop
|
17
|
-
MSG = 'When defining the
|
17
|
+
MSG = 'When defining the `%<opr>s` operator, ' \
|
18
18
|
'name its argument `other`.'.freeze
|
19
19
|
|
20
20
|
OP_LIKE_METHODS = %i[eql? equal?].freeze
|
21
21
|
BLACKLISTED = %i[+@ -@ [] []= << `].freeze
|
22
22
|
|
23
23
|
def_node_matcher :op_method_candidate?, <<-PATTERN
|
24
|
-
(def $_ (args $(arg [!:other !:_other])) _)
|
24
|
+
(def [#op_method? $_] (args $(arg [!:other !:_other])) _)
|
25
25
|
PATTERN
|
26
26
|
|
27
27
|
def on_def(node)
|
28
28
|
op_method_candidate?(node) do |name, arg|
|
29
|
-
|
30
|
-
add_offense(arg, message: format(MSG, name))
|
29
|
+
add_offense(arg, message: format(MSG, opr: name))
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
33
|
+
private
|
34
|
+
|
34
35
|
def op_method?(name)
|
35
36
|
return false if BLACKLISTED.include?(name)
|
36
37
|
name !~ /\A\w/ || OP_LIKE_METHODS.include?(name)
|
@@ -5,24 +5,28 @@ module RuboCop
|
|
5
5
|
module Naming
|
6
6
|
# This cops checks for class and module names with
|
7
7
|
# an underscore in them.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# class My_Class
|
12
|
+
# end
|
13
|
+
# module My_Module
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# class MyClass
|
18
|
+
# end
|
19
|
+
# module MyModule
|
20
|
+
# end
|
8
21
|
class ClassAndModuleCamelCase < Cop
|
9
22
|
MSG = 'Use CamelCase for classes and modules.'.freeze
|
10
23
|
|
11
24
|
def on_class(node)
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def on_module(node)
|
16
|
-
check_name(node)
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def check_name(node)
|
22
|
-
name = node.loc.name.source
|
25
|
+
return unless node.loc.name.source =~ /_/
|
23
26
|
|
24
|
-
add_offense(node, location: :name)
|
27
|
+
add_offense(node, location: :name)
|
25
28
|
end
|
29
|
+
alias on_module on_class
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
@@ -8,21 +8,50 @@ module RuboCop
|
|
8
8
|
#
|
9
9
|
# To avoid false positives, it ignores cases in which we cannot know
|
10
10
|
# for certain the type of value that would be assigned to a constant.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# # bad
|
14
|
+
# InchInCm = 2.54
|
15
|
+
# INCHinCM = 2.54
|
16
|
+
# Inch_In_Cm = 2.54
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# INCH_IN_CM = 2.54
|
11
20
|
class ConstantName < Cop
|
12
21
|
MSG = 'Use SCREAMING_SNAKE_CASE for constants.'.freeze
|
13
|
-
|
22
|
+
# Use POSIX character classes, so we allow accented characters rather
|
23
|
+
# than just standard ASCII characters
|
24
|
+
SNAKE_CASE = /^[[:digit:][:upper:]_]+$/
|
25
|
+
|
26
|
+
def_node_matcher :class_or_struct_return_method?, <<-PATTERN
|
27
|
+
(send
|
28
|
+
(const _ {:Class :Struct}) :new
|
29
|
+
...)
|
30
|
+
PATTERN
|
14
31
|
|
15
32
|
def on_casgn(node)
|
16
33
|
_scope, const_name, value = *node
|
17
34
|
|
18
35
|
# We cannot know the result of method calls like
|
19
36
|
# NewClass = something_that_returns_a_class
|
20
|
-
# It's also ok to assign a class constant another class constant
|
37
|
+
# It's also ok to assign a class constant another class constant,
|
38
|
+
# `Class.new(...)` or `Struct.new(...)`
|
21
39
|
# SomeClass = SomeOtherClass
|
22
|
-
|
40
|
+
# SomeClass = Class.new(...)
|
41
|
+
# SomeClass = Struct.new(...)
|
42
|
+
return if value && %i[block const casgn].include?(value.type) ||
|
43
|
+
allowed_method_call_on_rhs?(value) ||
|
44
|
+
class_or_struct_return_method?(value)
|
23
45
|
|
24
46
|
add_offense(node, location: :name) if const_name !~ SNAKE_CASE
|
25
47
|
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def allowed_method_call_on_rhs?(node)
|
52
|
+
node && node.send_type? &&
|
53
|
+
(node.receiver.nil? || !node.receiver.literal?)
|
54
|
+
end
|
26
55
|
end
|
27
56
|
end
|
28
57
|
end
|
@@ -8,12 +8,23 @@ module RuboCop
|
|
8
8
|
# This cop makes sure that Ruby source files have snake_case
|
9
9
|
# names. Ruby scripts (i.e. source files with a shebang in the
|
10
10
|
# first line) are ignored.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# # bad
|
14
|
+
# lib/layoutManager.rb
|
15
|
+
#
|
16
|
+
# anything/usingCamelCase
|
17
|
+
#
|
18
|
+
# # good
|
19
|
+
# lib/layout_manager.rb
|
20
|
+
#
|
21
|
+
# anything/using_snake_case.rake
|
11
22
|
class FileName < Cop
|
12
|
-
MSG_SNAKE_CASE = 'The name of this source file (
|
23
|
+
MSG_SNAKE_CASE = 'The name of this source file (`%<basename>s`) ' \
|
13
24
|
'should use snake_case.'.freeze
|
14
|
-
MSG_NO_DEFINITION = '
|
15
|
-
'called
|
16
|
-
MSG_REGEX = '
|
25
|
+
MSG_NO_DEFINITION = '%<basename>s should define a class or module ' \
|
26
|
+
'called `%<namespace>s`.'.freeze
|
27
|
+
MSG_REGEX = '`%<basename>s` should match `%<regex>s`.'.freeze
|
17
28
|
|
18
29
|
SNAKE_CASE = /^[\da-z_.?!]+$/
|
19
30
|
|
@@ -50,15 +61,15 @@ module RuboCop
|
|
50
61
|
|
51
62
|
def no_definition_message(basename, file_path)
|
52
63
|
format(MSG_NO_DEFINITION,
|
53
|
-
basename,
|
54
|
-
to_namespace(file_path).join('::'))
|
64
|
+
basename: basename,
|
65
|
+
namespace: to_namespace(file_path).join('::'))
|
55
66
|
end
|
56
67
|
|
57
68
|
def other_message(basename)
|
58
69
|
if regex
|
59
|
-
format(MSG_REGEX, basename, regex)
|
70
|
+
format(MSG_REGEX, basename: basename, regex: regex)
|
60
71
|
else
|
61
|
-
format(MSG_SNAKE_CASE, basename)
|
72
|
+
format(MSG_SNAKE_CASE, basename: basename)
|
62
73
|
end
|
63
74
|
end
|
64
75
|
|
@@ -6,38 +6,32 @@ module RuboCop
|
|
6
6
|
# This cop checks that your heredocs are using the configured case.
|
7
7
|
# By default it is configured to enforce uppercase heredocs.
|
8
8
|
#
|
9
|
-
# @example
|
10
|
-
#
|
11
|
-
#
|
9
|
+
# @example EnforcedStyle: uppercase (default)
|
10
|
+
# # bad
|
11
|
+
# <<-sql
|
12
|
+
# SELECT * FROM foo
|
13
|
+
# sql
|
12
14
|
#
|
13
15
|
# # good
|
14
16
|
# <<-SQL
|
15
17
|
# SELECT * FROM foo
|
16
18
|
# SQL
|
17
19
|
#
|
20
|
+
# @example EnforcedStyle: lowercase
|
18
21
|
# # bad
|
19
|
-
# <<-
|
22
|
+
# <<-SQL
|
20
23
|
# SELECT * FROM foo
|
21
|
-
#
|
22
|
-
#
|
23
|
-
# @example
|
24
|
-
#
|
25
|
-
# # EnforcedStyle: lowercase
|
24
|
+
# SQL
|
26
25
|
#
|
27
26
|
# # good
|
28
27
|
# <<-sql
|
29
28
|
# SELECT * FROM foo
|
30
29
|
# sql
|
31
|
-
#
|
32
|
-
# # bad
|
33
|
-
# <<-SQL
|
34
|
-
# SELECT * FROM foo
|
35
|
-
# SQL
|
36
30
|
class HeredocDelimiterCase < Cop
|
37
31
|
include Heredoc
|
38
32
|
include ConfigurableEnforcedStyle
|
39
33
|
|
40
|
-
MSG = 'Use
|
34
|
+
MSG = 'Use %<style>s heredoc delimiters.'.freeze
|
41
35
|
|
42
36
|
def on_heredoc(node)
|
43
37
|
return if correct_case_delimiters?(node)
|
@@ -48,7 +42,7 @@ module RuboCop
|
|
48
42
|
private
|
49
43
|
|
50
44
|
def message(_node)
|
51
|
-
format(MSG, style)
|
45
|
+
format(MSG, style: style)
|
52
46
|
end
|
53
47
|
|
54
48
|
def correct_case_delimiters?(node)
|
@@ -4,29 +4,35 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Naming
|
6
6
|
# This cop makes sure that all methods use the configured style,
|
7
|
-
# snake_case or camelCase, for their names.
|
8
|
-
#
|
7
|
+
# snake_case or camelCase, for their names.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: snake_case (default)
|
10
|
+
# # bad
|
11
|
+
# def fooBar; end
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# def foo_bar; end
|
15
|
+
#
|
16
|
+
# @example EnforcedStyle: camelCase
|
17
|
+
# # bad
|
18
|
+
# def foo_bar; end
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# def fooBar; end
|
9
22
|
class MethodName < Cop
|
10
23
|
include ConfigurableNaming
|
11
24
|
|
12
|
-
|
13
|
-
name, = *node
|
14
|
-
check_name(node, sanitize_name(name), node.loc.name)
|
15
|
-
end
|
25
|
+
MSG = 'Use %<style>s for method names.'.freeze
|
16
26
|
|
17
|
-
def
|
18
|
-
|
19
|
-
check_name(node, sanitize_name(name), node.loc.name)
|
27
|
+
def on_def(node)
|
28
|
+
check_name(node, node.method_name, node.loc.name)
|
20
29
|
end
|
30
|
+
alias on_defs on_def
|
21
31
|
|
22
32
|
private
|
23
33
|
|
24
34
|
def message(style)
|
25
|
-
format(
|
26
|
-
end
|
27
|
-
|
28
|
-
def sanitize_name(name)
|
29
|
-
name.to_s.delete('@').to_sym
|
35
|
+
format(MSG, style: style)
|
30
36
|
end
|
31
37
|
end
|
32
38
|
end
|
@@ -7,16 +7,20 @@ module RuboCop
|
|
7
7
|
#
|
8
8
|
# @example
|
9
9
|
# # bad
|
10
|
-
# def is_even?(value)
|
10
|
+
# def is_even?(value)
|
11
|
+
# end
|
11
12
|
#
|
12
13
|
# # good
|
13
14
|
# def even?(value)
|
15
|
+
# end
|
14
16
|
#
|
15
17
|
# # bad
|
16
|
-
# def has_value?
|
18
|
+
# def has_value?
|
19
|
+
# end
|
17
20
|
#
|
18
21
|
# # good
|
19
|
-
# def value?
|
22
|
+
# def value?
|
23
|
+
# end
|
20
24
|
class PredicateName < Cop
|
21
25
|
def_node_matcher :dynamic_method_define, <<-PATTERN
|
22
26
|
(send nil? #method_definition_macros
|
@@ -5,15 +5,30 @@ module RuboCop
|
|
5
5
|
module Naming
|
6
6
|
# This cop makes sure that all variables use the configured style,
|
7
7
|
# snake_case or camelCase, for their names.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: snake_case (default)
|
10
|
+
# # bad
|
11
|
+
# fooBar = 1
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# foo_bar = 1
|
15
|
+
#
|
16
|
+
# @example EnforcedStyle: camelCase
|
17
|
+
# # bad
|
18
|
+
# foo_bar = 1
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# fooBar = 1
|
8
22
|
class VariableName < Cop
|
9
23
|
include ConfigurableNaming
|
10
24
|
|
25
|
+
MSG = 'Use %<style>s for variable names.'.freeze
|
26
|
+
|
11
27
|
def on_lvasgn(node)
|
12
28
|
name, = *node
|
13
29
|
return unless name
|
14
30
|
check_name(node, name, node.loc.name)
|
15
31
|
end
|
16
|
-
|
17
32
|
alias on_ivasgn on_lvasgn
|
18
33
|
alias on_cvasgn on_lvasgn
|
19
34
|
alias on_arg on_lvasgn
|
@@ -27,7 +42,7 @@ module RuboCop
|
|
27
42
|
private
|
28
43
|
|
29
44
|
def message(style)
|
30
|
-
format(
|
45
|
+
format(MSG, style: style)
|
31
46
|
end
|
32
47
|
end
|
33
48
|
end
|
@@ -7,9 +7,7 @@ module RuboCop
|
|
7
7
|
# configured style, snake_case, normalcase or non_integer,
|
8
8
|
# for their numbering.
|
9
9
|
#
|
10
|
-
# @example
|
11
|
-
# "EnforcedStyle => 'snake_case'"
|
12
|
-
#
|
10
|
+
# @example EnforcedStyle: snake_case
|
13
11
|
# # bad
|
14
12
|
#
|
15
13
|
# variable1 = 1
|
@@ -18,9 +16,7 @@ module RuboCop
|
|
18
16
|
#
|
19
17
|
# variable_1 = 1
|
20
18
|
#
|
21
|
-
# @example
|
22
|
-
# "EnforcedStyle => 'normalcase'"
|
23
|
-
#
|
19
|
+
# @example EnforcedStyle: normalcase (default)
|
24
20
|
# # bad
|
25
21
|
#
|
26
22
|
# variable_1 = 1
|
@@ -29,48 +25,35 @@ module RuboCop
|
|
29
25
|
#
|
30
26
|
# variable1 = 1
|
31
27
|
#
|
32
|
-
# @example
|
33
|
-
#
|
34
|
-
#
|
35
|
-
# #bad
|
28
|
+
# @example EnforcedStyle: non_integer
|
29
|
+
# # bad
|
36
30
|
#
|
37
31
|
# variable1 = 1
|
38
32
|
#
|
39
33
|
# variable_1 = 1
|
40
34
|
#
|
41
|
-
# #good
|
35
|
+
# # good
|
42
36
|
#
|
43
37
|
# variableone = 1
|
44
38
|
#
|
45
39
|
# variable_one = 1
|
46
|
-
#
|
47
40
|
class VariableNumber < Cop
|
48
41
|
include ConfigurableNumbering
|
49
42
|
|
50
|
-
|
51
|
-
name, = *node
|
52
|
-
check_name(node, name, node.loc.name)
|
53
|
-
end
|
54
|
-
|
55
|
-
def on_ivasgn(node)
|
56
|
-
name, = *node
|
57
|
-
check_name(node, name, node.loc.name)
|
58
|
-
end
|
59
|
-
|
60
|
-
def on_cvasgn(node)
|
61
|
-
name, = *node
|
62
|
-
check_name(node, name, node.loc.name)
|
63
|
-
end
|
43
|
+
MSG = 'Use %<style>s for variable numbers.'.freeze
|
64
44
|
|
65
45
|
def on_arg(node)
|
66
46
|
name, = *node
|
67
47
|
check_name(node, name, node.loc.name)
|
68
48
|
end
|
49
|
+
alias on_lvasgn on_arg
|
50
|
+
alias on_ivasgn on_arg
|
51
|
+
alias on_cvasgn on_arg
|
69
52
|
|
70
53
|
private
|
71
54
|
|
72
55
|
def message(style)
|
73
|
-
format(
|
56
|
+
format(MSG, style: style)
|
74
57
|
end
|
75
58
|
end
|
76
59
|
end
|