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,6 +5,16 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop checks for multiple expressions placed on the same line.
|
7
7
|
# It also checks for lines terminated with a semicolon.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# foo = 1; bar = 2;
|
12
|
+
# baz = 3;
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# foo = 1
|
16
|
+
# bar = 2
|
17
|
+
# baz = 3
|
8
18
|
class Semicolon < Cop
|
9
19
|
MSG = 'Do not use semicolons to terminate expressions.'.freeze
|
10
20
|
|
@@ -36,6 +46,11 @@ module RuboCop
|
|
36
46
|
end
|
37
47
|
end
|
38
48
|
|
49
|
+
def autocorrect(range)
|
50
|
+
return unless range
|
51
|
+
->(corrector) { corrector.remove(range) }
|
52
|
+
end
|
53
|
+
|
39
54
|
private
|
40
55
|
|
41
56
|
def check_for_line_terminator_or_opener
|
@@ -44,13 +59,13 @@ module RuboCop
|
|
44
59
|
|
45
60
|
def each_semicolon
|
46
61
|
tokens_for_lines.each do |line, tokens|
|
47
|
-
yield line, tokens.last.
|
48
|
-
yield line, tokens.first.
|
62
|
+
yield line, tokens.last.column if tokens.last.semicolon?
|
63
|
+
yield line, tokens.first.column if tokens.first.semicolon?
|
49
64
|
end
|
50
65
|
end
|
51
66
|
|
52
67
|
def tokens_for_lines
|
53
|
-
@processed_source.tokens.group_by
|
68
|
+
@processed_source.tokens.group_by(&:line)
|
54
69
|
end
|
55
70
|
|
56
71
|
def convention_on(line, column, autocorrect)
|
@@ -59,11 +74,6 @@ module RuboCop
|
|
59
74
|
# on the same line
|
60
75
|
add_offense(autocorrect ? range : nil, location: range)
|
61
76
|
end
|
62
|
-
|
63
|
-
def autocorrect(range)
|
64
|
-
return unless range
|
65
|
-
->(corrector) { corrector.remove(range) }
|
66
|
-
end
|
67
77
|
end
|
68
78
|
end
|
69
79
|
end
|
@@ -4,6 +4,15 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# This cop checks for the use of the send method.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# Foo.send(:bar)
|
11
|
+
# quuz.send(:fred)
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# Foo.__send__(:bar)
|
15
|
+
# quuz.public_send(:fred)
|
7
16
|
class Send < Cop
|
8
17
|
MSG = 'Prefer `Object#__send__` or `Object#public_send` to ' \
|
9
18
|
'`send`.'.freeze
|
@@ -4,6 +4,106 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# This cop checks for uses of `fail` and `raise`.
|
7
|
+
#
|
8
|
+
# @example EnforcedStyle: only_raise (default)
|
9
|
+
# # The `only_raise` style enforces the sole use of `raise`.
|
10
|
+
# # bad
|
11
|
+
# begin
|
12
|
+
# fail
|
13
|
+
# rescue Exception
|
14
|
+
# # handle it
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# def watch_out
|
18
|
+
# fail
|
19
|
+
# rescue Exception
|
20
|
+
# # handle it
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# Kernel.fail
|
24
|
+
#
|
25
|
+
# # good
|
26
|
+
# begin
|
27
|
+
# raise
|
28
|
+
# rescue Exception
|
29
|
+
# # handle it
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# def watch_out
|
33
|
+
# raise
|
34
|
+
# rescue Exception
|
35
|
+
# # handle it
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# Kernel.raise
|
39
|
+
#
|
40
|
+
# @example EnforcedStyle: only_fail
|
41
|
+
# # The `only_fail` style enforces the sole use of `fail`.
|
42
|
+
# # bad
|
43
|
+
# begin
|
44
|
+
# raise
|
45
|
+
# rescue Exception
|
46
|
+
# # handle it
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# def watch_out
|
50
|
+
# raise
|
51
|
+
# rescue Exception
|
52
|
+
# # handle it
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# Kernel.raise
|
56
|
+
#
|
57
|
+
# # good
|
58
|
+
# begin
|
59
|
+
# fail
|
60
|
+
# rescue Exception
|
61
|
+
# # handle it
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# def watch_out
|
65
|
+
# fail
|
66
|
+
# rescue Exception
|
67
|
+
# # handle it
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# Kernel.fail
|
71
|
+
#
|
72
|
+
# @example EnforcedStyle: semantic
|
73
|
+
# # The `semantic` style enforces the use of `fail` to signal an
|
74
|
+
# # exception, then will use `raise` to trigger an offense after
|
75
|
+
# # it has been rescued.
|
76
|
+
# # bad
|
77
|
+
# begin
|
78
|
+
# raise
|
79
|
+
# rescue Exception
|
80
|
+
# # handle it
|
81
|
+
# end
|
82
|
+
#
|
83
|
+
# def watch_out
|
84
|
+
# # Error thrown
|
85
|
+
# rescue Exception
|
86
|
+
# fail
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# Kernel.fail
|
90
|
+
# Kernel.raise
|
91
|
+
#
|
92
|
+
# # good
|
93
|
+
# begin
|
94
|
+
# fail
|
95
|
+
# rescue Exception
|
96
|
+
# # handle it
|
97
|
+
# end
|
98
|
+
#
|
99
|
+
# def watch_out
|
100
|
+
# fail
|
101
|
+
# rescue Exception
|
102
|
+
# raise 'Preferably with descriptive message'
|
103
|
+
# end
|
104
|
+
#
|
105
|
+
# explicit_receiver.fail
|
106
|
+
# explicit_receiver.raise
|
7
107
|
class SignalException < Cop
|
8
108
|
include ConfigurableEnforcedStyle
|
9
109
|
|
@@ -9,7 +9,7 @@ module RuboCop
|
|
9
9
|
# For instance one can configure `reduce`(`inject`) to use |a, e| as
|
10
10
|
# parameters.
|
11
11
|
class SingleLineBlockParams < Cop
|
12
|
-
MSG = 'Name
|
12
|
+
MSG = 'Name `%<method>s` block params `|%<params>s|`.'.freeze
|
13
13
|
|
14
14
|
def on_block(node)
|
15
15
|
return unless node.single_line?
|
@@ -28,7 +28,7 @@ module RuboCop
|
|
28
28
|
method_name = node.parent.send_node.method_name
|
29
29
|
arguments = target_args(method_name).join(', ')
|
30
30
|
|
31
|
-
format(MSG, method_name, arguments)
|
31
|
+
format(MSG, method: method_name, params: arguments)
|
32
32
|
end
|
33
33
|
|
34
34
|
def eligible_arguments?(node)
|
@@ -3,8 +3,20 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
# This cop checks for single-line method definitions.
|
7
|
-
# It
|
6
|
+
# This cop checks for single-line method definitions that contain a body.
|
7
|
+
# It will accept single-line methods with no body.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# def some_method; body end
|
12
|
+
# def link_to(url); {:name => url}; end
|
13
|
+
# def @table.columns; super; end
|
14
|
+
#
|
15
|
+
# # good
|
16
|
+
# def no_op; end
|
17
|
+
# def self.resource_class=(klass); end
|
18
|
+
# def @table.columns; end
|
19
|
+
#
|
8
20
|
class SingleLineMethods < Cop
|
9
21
|
include AutocorrectAlignment
|
10
22
|
|
@@ -18,12 +30,6 @@ module RuboCop
|
|
18
30
|
end
|
19
31
|
alias on_defs on_def
|
20
32
|
|
21
|
-
private
|
22
|
-
|
23
|
-
def allow_empty?
|
24
|
-
cop_config['AllowIfMethodIsEmpty']
|
25
|
-
end
|
26
|
-
|
27
33
|
def autocorrect(node)
|
28
34
|
body = node.body
|
29
35
|
|
@@ -39,6 +45,12 @@ module RuboCop
|
|
39
45
|
end
|
40
46
|
end
|
41
47
|
|
48
|
+
private
|
49
|
+
|
50
|
+
def allow_empty?
|
51
|
+
cop_config['AllowIfMethodIsEmpty']
|
52
|
+
end
|
53
|
+
|
42
54
|
def end_of_line_comment(line)
|
43
55
|
processed_source.comments.find { |c| c.loc.line == line }
|
44
56
|
end
|
@@ -7,11 +7,12 @@ module RuboCop
|
|
7
7
|
class SpecialGlobalVars < Cop
|
8
8
|
include ConfigurableEnforcedStyle
|
9
9
|
|
10
|
-
MSG_BOTH = 'Prefer
|
11
|
-
'(don\'t forget to require it), or
|
12
|
-
|
13
|
-
'
|
14
|
-
|
10
|
+
MSG_BOTH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
|
11
|
+
'module (don\'t forget to require it), or `%<regular>s` over ' \
|
12
|
+
'`%<global>s`.'.freeze
|
13
|
+
MSG_ENGLISH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
|
14
|
+
'module (don\'t forget to require it) over `%<global>s`.'.freeze
|
15
|
+
MSG_REGULAR = 'Prefer `%<prefer>s` over `%<global>s`.'.freeze
|
15
16
|
|
16
17
|
ENGLISH_VARS = { # rubocop:disable Style/MutableConstant
|
17
18
|
:$: => [:$LOAD_PATH],
|
@@ -77,7 +78,9 @@ module RuboCop
|
|
77
78
|
if style == :use_english_names
|
78
79
|
format_english_message(global_var)
|
79
80
|
else
|
80
|
-
format(MSG_REGULAR,
|
81
|
+
format(MSG_REGULAR,
|
82
|
+
prefer: preferred_names(global_var).first,
|
83
|
+
global: global_var)
|
81
84
|
end
|
82
85
|
end
|
83
86
|
|
@@ -104,14 +107,16 @@ module RuboCop
|
|
104
107
|
format_message(english, regular, global_var)
|
105
108
|
end
|
106
109
|
|
107
|
-
def format_message(english, regular,
|
110
|
+
def format_message(english, regular, global)
|
108
111
|
if !regular.empty? && !english.empty?
|
109
|
-
format(MSG_BOTH,
|
110
|
-
|
112
|
+
format(MSG_BOTH,
|
113
|
+
prefer: format_list(english),
|
114
|
+
regular: format_list(regular),
|
115
|
+
global: global)
|
111
116
|
elsif !regular.empty?
|
112
|
-
format(MSG_REGULAR, format_list(regular),
|
117
|
+
format(MSG_REGULAR, prefer: format_list(regular), global: global)
|
113
118
|
elsif !english.empty?
|
114
|
-
format(MSG_ENGLISH, format_list(english),
|
119
|
+
format(MSG_ENGLISH, prefer: format_list(english), global: global)
|
115
120
|
else
|
116
121
|
raise 'Bug in SpecialGlobalVars - global var w/o preferred vars!'
|
117
122
|
end
|
@@ -6,17 +6,18 @@ module RuboCop
|
|
6
6
|
# Check for parentheses around stabby lambda arguments.
|
7
7
|
# There are two different styles. Defaults to `require_parentheses`.
|
8
8
|
#
|
9
|
-
# @example
|
10
|
-
# #
|
9
|
+
# @example EnforcedStyle: require_parentheses (default)
|
10
|
+
# # bad
|
11
11
|
# ->a,b,c { a + b + c }
|
12
12
|
#
|
13
|
-
# #
|
13
|
+
# # good
|
14
14
|
# ->(a,b,c) { a + b + c}
|
15
15
|
#
|
16
|
-
#
|
16
|
+
# @example EnforcedStyle: require_no_parentheses
|
17
|
+
# # bad
|
17
18
|
# ->(a,b,c) { a + b + c }
|
18
19
|
#
|
19
|
-
# #
|
20
|
+
# # good
|
20
21
|
# ->a,b,c { a + b + c}
|
21
22
|
class StabbyLambdaParentheses < Cop
|
22
23
|
include ConfigurableEnforcedStyle
|
@@ -24,8 +25,6 @@ module RuboCop
|
|
24
25
|
MSG_REQUIRE = 'Wrap stabby lambda arguments with parentheses.'.freeze
|
25
26
|
MSG_NO_REQUIRE = 'Do not wrap stabby lambda arguments ' \
|
26
27
|
'with parentheses.'.freeze
|
27
|
-
ARROW = '->'.freeze
|
28
|
-
|
29
28
|
def on_send(node)
|
30
29
|
return unless stabby_lambda_with_args?(node)
|
31
30
|
return unless redundant_parentheses?(node) ||
|
@@ -75,11 +74,7 @@ module RuboCop
|
|
75
74
|
end
|
76
75
|
|
77
76
|
def stabby_lambda_with_args?(node)
|
78
|
-
node.
|
79
|
-
end
|
80
|
-
|
81
|
-
def arrow_form?(node)
|
82
|
-
node.loc.selector.source == ARROW
|
77
|
+
node.stabby_lambda? && node.parent.arguments?
|
83
78
|
end
|
84
79
|
|
85
80
|
def parentheses?(node)
|
@@ -3,8 +3,9 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
# This cop identifies places where `$stderr.puts`
|
7
|
-
#
|
6
|
+
# This cop identifies places where `$stderr.puts` can be replaced by
|
7
|
+
# `warn`. The latter has the advantage of easily being disabled by,
|
8
|
+
# e.g. the -W0 interpreter flag, or setting $VERBOSE to nil.
|
8
9
|
#
|
9
10
|
# @example
|
10
11
|
# # bad
|
@@ -14,7 +15,8 @@ module RuboCop
|
|
14
15
|
# warn('hello')
|
15
16
|
#
|
16
17
|
class StderrPuts < Cop
|
17
|
-
MSG = 'Use `warn` instead of `$stderr.puts
|
18
|
+
MSG = 'Use `warn` instead of `$stderr.puts` to allow such output ' \
|
19
|
+
'to be disabled.'.freeze
|
18
20
|
|
19
21
|
def_node_matcher :stderr_puts?, <<-PATTERN
|
20
22
|
(send
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for the use of strings as keys in hashes. The use of
|
7
|
+
# symbols is preferred instead.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# # bad
|
11
|
+
# { 'one' => 1, 'two' => 2, 'three' => 3 }
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# { one: 1, two: 2, three: 3 }
|
15
|
+
class StringHashKeys < Cop
|
16
|
+
MSG = 'Prefer symbols instead of strings as hash keys.'.freeze
|
17
|
+
|
18
|
+
def_node_matcher :string_hash_key?, <<-PATTERN
|
19
|
+
(pair (str _) _)
|
20
|
+
PATTERN
|
21
|
+
|
22
|
+
def on_pair(node)
|
23
|
+
return unless string_hash_key?(node)
|
24
|
+
add_offense(node.key)
|
25
|
+
end
|
26
|
+
|
27
|
+
def autocorrect(node)
|
28
|
+
lambda do |corrector|
|
29
|
+
symbol_content = node.str_content.to_sym.inspect
|
30
|
+
corrector.replace(node.source_range, symbol_content)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -4,6 +4,28 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# Checks if uses of quotes match the configured preference.
|
7
|
+
#
|
8
|
+
# @example EnforcedStyle: single_quotes (default)
|
9
|
+
# # bad
|
10
|
+
# "No special symbols"
|
11
|
+
# "No string interpolation"
|
12
|
+
# "Just text"
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# 'No special symbols'
|
16
|
+
# 'No string interpolation'
|
17
|
+
# 'Just text'
|
18
|
+
# "Wait! What's #{this}!"
|
19
|
+
#
|
20
|
+
# @example EnforcedStyle: double_quotes
|
21
|
+
# # bad
|
22
|
+
# 'Just some text'
|
23
|
+
# 'No special chars or interpolation'
|
24
|
+
#
|
25
|
+
# # good
|
26
|
+
# "Just some text"
|
27
|
+
# "No special chars or interpolation"
|
28
|
+
# "Every string in #{project} uses double_quotes"
|
7
29
|
class StringLiterals < Cop
|
8
30
|
include ConfigurableEnforcedStyle
|
9
31
|
include StringLiteralsHelp
|
@@ -6,20 +6,14 @@ module RuboCop
|
|
6
6
|
# This cop checks that quotes inside the string interpolation
|
7
7
|
# match the configured preference.
|
8
8
|
#
|
9
|
-
# @example
|
10
|
-
#
|
11
|
-
# # EnforcedStyle: single_quotes
|
12
|
-
#
|
9
|
+
# @example EnforcedStyle: single_quotes (default)
|
13
10
|
# # bad
|
14
11
|
# result = "Tests #{success ? "PASS" : "FAIL"}"
|
15
12
|
#
|
16
13
|
# # good
|
17
14
|
# result = "Tests #{success ? 'PASS' : 'FAIL'}"
|
18
15
|
#
|
19
|
-
# @example
|
20
|
-
#
|
21
|
-
# # EnforcedStyle: double_quotes
|
22
|
-
#
|
16
|
+
# @example EnforcedStyle: double_quotes
|
23
17
|
# # bad
|
24
18
|
# result = "Tests #{success ? 'PASS' : 'FAIL'}"
|
25
19
|
#
|