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
@@ -4,6 +4,18 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# This cop looks for uses of block comments (=begin...=end).
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# =begin
|
11
|
+
# Multiple lines
|
12
|
+
# of comments...
|
13
|
+
# =end
|
14
|
+
#
|
15
|
+
# # good
|
16
|
+
# # Multiple lines
|
17
|
+
# # of comments...
|
18
|
+
#
|
7
19
|
class BlockComments < Cop
|
8
20
|
MSG = 'Do not use block comments.'.freeze
|
9
21
|
BEGIN_LENGTH = "=begin\n".length
|
@@ -17,8 +29,6 @@ module RuboCop
|
|
17
29
|
end
|
18
30
|
end
|
19
31
|
|
20
|
-
private
|
21
|
-
|
22
32
|
def autocorrect(comment)
|
23
33
|
eq_begin, eq_end, contents = parts(comment)
|
24
34
|
|
@@ -35,6 +45,8 @@ module RuboCop
|
|
35
45
|
end
|
36
46
|
end
|
37
47
|
|
48
|
+
private
|
49
|
+
|
38
50
|
def parts(comment)
|
39
51
|
expr = comment.loc.expression
|
40
52
|
eq_begin = expr.resize(BEGIN_LENGTH)
|
@@ -5,6 +5,72 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# Check for uses of braces or do/end around single line or
|
7
7
|
# multi-line blocks.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: line_count_based (default)
|
10
|
+
# # bad - single line block
|
11
|
+
# items.each do |item| item / 5 end
|
12
|
+
#
|
13
|
+
# # good - single line block
|
14
|
+
# items.each { |item| item / 5 }
|
15
|
+
#
|
16
|
+
# # bad - multi-line block
|
17
|
+
# things.map { |thing|
|
18
|
+
# something = thing.some_method
|
19
|
+
# process(something)
|
20
|
+
# }
|
21
|
+
#
|
22
|
+
# # good - multi-line block
|
23
|
+
# things.map do |thing|
|
24
|
+
# something = thing.some_method
|
25
|
+
# process(something)
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# @example EnforcedStyle: semantic
|
29
|
+
# # Prefer `do...end` over `{...}` for procedural blocks.
|
30
|
+
#
|
31
|
+
# # return value is used/assigned
|
32
|
+
# # bad
|
33
|
+
# foo = map do |x|
|
34
|
+
# x
|
35
|
+
# end
|
36
|
+
# puts (map do |x|
|
37
|
+
# x
|
38
|
+
# end)
|
39
|
+
#
|
40
|
+
# # return value is not used out of scope
|
41
|
+
# # good
|
42
|
+
# map do |x|
|
43
|
+
# x
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# # Prefer `{...}` over `do...end` for functional blocks.
|
47
|
+
#
|
48
|
+
# # return value is not used out of scope
|
49
|
+
# # bad
|
50
|
+
# each { |x|
|
51
|
+
# x
|
52
|
+
# }
|
53
|
+
#
|
54
|
+
# # return value is used/assigned
|
55
|
+
# # good
|
56
|
+
# foo = map { |x|
|
57
|
+
# x
|
58
|
+
# }
|
59
|
+
# map { |x|
|
60
|
+
# x
|
61
|
+
# }.inspect
|
62
|
+
#
|
63
|
+
# @example EnforcedStyle: braces_for_chaining
|
64
|
+
# # bad
|
65
|
+
# words.each do |word|
|
66
|
+
# word.flip.flop
|
67
|
+
# end.join("-")
|
68
|
+
#
|
69
|
+
# # good
|
70
|
+
# words.each { |word|
|
71
|
+
# word.flip.flop
|
72
|
+
# }.join("-")
|
73
|
+
#
|
8
74
|
class BlockDelimiters < Cop
|
9
75
|
include ConfigurableEnforcedStyle
|
10
76
|
|
@@ -28,10 +94,20 @@ module RuboCop
|
|
28
94
|
add_offense(node, location: :begin) unless proper_block_style?(node)
|
29
95
|
end
|
30
96
|
|
97
|
+
def autocorrect(node)
|
98
|
+
return if correction_would_break_code?(node)
|
99
|
+
|
100
|
+
if node.braces?
|
101
|
+
replace_braces_with_do_end(node.loc)
|
102
|
+
else
|
103
|
+
replace_do_end_with_braces(node.loc)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
31
107
|
private
|
32
108
|
|
33
109
|
def line_count_based_message(node)
|
34
|
-
if
|
110
|
+
if node.multiline?
|
35
111
|
'Avoid using `{...}` for multi-line blocks.'
|
36
112
|
else
|
37
113
|
'Prefer `{...}` over `do...end` for single-line blocks.'
|
@@ -49,7 +125,7 @@ module RuboCop
|
|
49
125
|
end
|
50
126
|
|
51
127
|
def braces_for_chaining_message(node)
|
52
|
-
if
|
128
|
+
if node.multiline?
|
53
129
|
if return_value_chaining?(node)
|
54
130
|
'Prefer `{...}` over `do...end` for multi-line chained blocks.'
|
55
131
|
else
|
@@ -68,16 +144,6 @@ module RuboCop
|
|
68
144
|
end
|
69
145
|
end
|
70
146
|
|
71
|
-
def autocorrect(node)
|
72
|
-
return if correction_would_break_code?(node)
|
73
|
-
|
74
|
-
if node.braces?
|
75
|
-
replace_braces_with_do_end(node.loc)
|
76
|
-
else
|
77
|
-
replace_do_end_with_braces(node.loc)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
147
|
def replace_braces_with_do_end(loc)
|
82
148
|
b = loc.begin
|
83
149
|
e = loc.end
|
@@ -128,7 +194,7 @@ module RuboCop
|
|
128
194
|
node.each_child_node { |child| get_blocks(child, &block) }
|
129
195
|
end
|
130
196
|
end
|
131
|
-
# rubocop:enable Metrics/
|
197
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
132
198
|
|
133
199
|
def proper_block_style?(node)
|
134
200
|
return true if ignored_method?(node.method_name)
|
@@ -155,10 +221,9 @@ module RuboCop
|
|
155
221
|
end
|
156
222
|
|
157
223
|
def braces_for_chaining_style?(node)
|
158
|
-
block_length = block_length(node)
|
159
224
|
block_begin = node.loc.begin.source
|
160
225
|
|
161
|
-
block_begin == if
|
226
|
+
block_begin == if node.multiline?
|
162
227
|
(return_value_chaining?(node) ? '{' : 'do')
|
163
228
|
else
|
164
229
|
'{'
|
@@ -5,47 +5,44 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop checks for braces around the last parameter in a method call
|
7
7
|
# if the last parameter is a hash.
|
8
|
-
# It supports
|
8
|
+
# It supports `braces`, `no_braces` and `context_dependent` styles.
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
10
|
+
# @example EnforcedStyle: braces
|
11
|
+
# # The `braces` style enforces braces around all method
|
12
|
+
# # parameters that are hashes.
|
12
13
|
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# some_method(x, y, a: 1, b: 2)
|
14
|
+
# # bad
|
15
|
+
# some_method(x, y, a: 1, b: 2)
|
16
16
|
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
# ```
|
17
|
+
# # good
|
18
|
+
# some_method(x, y, {a: 1, b: 2})
|
20
19
|
#
|
21
|
-
#
|
22
|
-
#
|
20
|
+
# @example EnforcedStyle: no_braces (default)
|
21
|
+
# # The `no_braces` style checks that the last parameter doesn't
|
22
|
+
# # have braces around it.
|
23
23
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# some_method(x, y, {a: 1, b: 2})
|
24
|
+
# # bad
|
25
|
+
# some_method(x, y, {a: 1, b: 2})
|
27
26
|
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
# ```
|
27
|
+
# # good
|
28
|
+
# some_method(x, y, a: 1, b: 2)
|
31
29
|
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
30
|
+
# @example EnforcedStyle: context_dependent
|
31
|
+
# # The `context_dependent` style checks that the last parameter
|
32
|
+
# # doesn't have braces around it, but requires braces if the
|
33
|
+
# # second to last parameter is also a hash literal.
|
35
34
|
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
# some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
|
35
|
+
# # bad
|
36
|
+
# some_method(x, y, {a: 1, b: 2})
|
37
|
+
# some_method(x, y, {a: 1, b: 2}, a: 1, b: 2)
|
40
38
|
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
# ```
|
39
|
+
# # good
|
40
|
+
# some_method(x, y, a: 1, b: 2)
|
41
|
+
# some_method(x, y, {a: 1, b: 2}, {a: 1, b: 2})
|
45
42
|
class BracesAroundHashParameters < Cop
|
46
43
|
include ConfigurableEnforcedStyle
|
47
44
|
|
48
|
-
MSG = '
|
45
|
+
MSG = '%<type>s curly braces around a hash parameter.'.freeze
|
49
46
|
|
50
47
|
def on_send(node)
|
51
48
|
return if node.assignment_method? || node.operator_method?
|
@@ -56,6 +53,24 @@ module RuboCop
|
|
56
53
|
check(node.last_argument, node.arguments)
|
57
54
|
end
|
58
55
|
|
56
|
+
# We let AutocorrectUnlessChangingAST#autocorrect work with the send
|
57
|
+
# node, because that context is needed. When parsing the code to see if
|
58
|
+
# the AST has changed, a braceless hash would not be parsed as a hash
|
59
|
+
# otherwise.
|
60
|
+
def autocorrect(send_node)
|
61
|
+
hash_node = send_node.last_argument
|
62
|
+
|
63
|
+
lambda do |corrector|
|
64
|
+
if hash_node.braces?
|
65
|
+
remove_braces_with_whitespace(corrector,
|
66
|
+
hash_node,
|
67
|
+
extra_space(hash_node))
|
68
|
+
else
|
69
|
+
add_braces(corrector, hash_node)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
59
74
|
private
|
60
75
|
|
61
76
|
def check(arg, args)
|
@@ -82,27 +97,36 @@ module RuboCop
|
|
82
97
|
|
83
98
|
def add_arg_offense(arg, type)
|
84
99
|
add_offense(arg.parent, location: arg.source_range,
|
85
|
-
message: format(MSG,
|
100
|
+
message: format(MSG,
|
101
|
+
type: type.to_s.capitalize))
|
86
102
|
end
|
87
103
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
104
|
+
def extra_space(hash_node)
|
105
|
+
{
|
106
|
+
newlines: extra_left_space?(hash_node) &&
|
107
|
+
extra_right_space?(hash_node),
|
108
|
+
left: extra_left_space?(hash_node),
|
109
|
+
right: extra_right_space?(hash_node)
|
110
|
+
}
|
111
|
+
end
|
94
112
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
113
|
+
def extra_left_space?(hash_node)
|
114
|
+
@extra_left_space ||= begin
|
115
|
+
top_line = hash_node.source_range.source_line
|
116
|
+
top_line.delete(' ') == '{'
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def extra_right_space?(hash_node)
|
121
|
+
@extra_right_space ||= begin
|
122
|
+
bottom_line_number = hash_node.source_range.last_line
|
123
|
+
bottom_line = processed_source.lines[bottom_line_number - 1]
|
124
|
+
bottom_line.delete(' ') == '}'
|
101
125
|
end
|
102
126
|
end
|
103
127
|
|
104
|
-
def remove_braces_with_whitespace(corrector, node)
|
105
|
-
right_brace_and_space = right_brace_and_space(node.loc.end)
|
128
|
+
def remove_braces_with_whitespace(corrector, node, space)
|
129
|
+
right_brace_and_space = right_brace_and_space(node.loc.end, space)
|
106
130
|
|
107
131
|
if comment_on_line?(right_brace_and_space.line)
|
108
132
|
# Removing a line break between a comment and the closing
|
@@ -110,15 +134,24 @@ module RuboCop
|
|
110
134
|
# braces in that case.
|
111
135
|
remove_braces(corrector, node)
|
112
136
|
else
|
113
|
-
left_brace_and_space =
|
114
|
-
|
137
|
+
left_brace_and_space =
|
138
|
+
range_with_surrounding_space(range: node.loc.begin,
|
139
|
+
side: :right,
|
140
|
+
newlines: space[:newlines],
|
141
|
+
whitespace: space[:left])
|
115
142
|
corrector.remove(left_brace_and_space)
|
116
143
|
corrector.remove(right_brace_and_space)
|
117
144
|
end
|
118
145
|
end
|
119
146
|
|
120
|
-
def right_brace_and_space(loc_end)
|
121
|
-
brace_and_space =
|
147
|
+
def right_brace_and_space(loc_end, space)
|
148
|
+
brace_and_space =
|
149
|
+
range_with_surrounding_space(
|
150
|
+
range: loc_end,
|
151
|
+
side: :left,
|
152
|
+
newlines: space[:newlines],
|
153
|
+
whitespace: space[:right]
|
154
|
+
)
|
122
155
|
range_with_surrounding_comma(brace_and_space, :left)
|
123
156
|
end
|
124
157
|
|
@@ -4,6 +4,18 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# This cop checks for uses of the case equality operator(===).
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# Array === something
|
11
|
+
# (1..100) === 7
|
12
|
+
# /something/ === some_string
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# something.is_a?(Array)
|
16
|
+
# (1..100).include?(7)
|
17
|
+
# some_string =~ /something/
|
18
|
+
#
|
7
19
|
class CaseEquality < Cop
|
8
20
|
MSG = 'Avoid the use of the case equality operator `===`.'.freeze
|
9
21
|
|
@@ -6,13 +6,17 @@ module RuboCop
|
|
6
6
|
# This cop checks the style of children definitions at classes and
|
7
7
|
# modules. Basically there are two different styles:
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# @example EnforcedStyle: nested (default)
|
10
|
+
# # good
|
11
|
+
# # have each child on its own line
|
10
12
|
# class Foo
|
11
13
|
# class Bar
|
12
14
|
# end
|
13
15
|
# end
|
14
16
|
#
|
15
|
-
#
|
17
|
+
# @example EnforcedStyle: compact
|
18
|
+
# # good
|
19
|
+
# # combine definitions as much as possible
|
16
20
|
# class Foo::Bar
|
17
21
|
# end
|
18
22
|
#
|
@@ -4,10 +4,29 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
6
|
# This cop enforces consistent use of `Object#is_a?` or `Object#kind_of?`.
|
7
|
+
#
|
8
|
+
# @example EnforcedStyle: is_a? (default)
|
9
|
+
# # bad
|
10
|
+
# var.kind_of?(Date)
|
11
|
+
# var.kind_of?(Integer)
|
12
|
+
#
|
13
|
+
# # good
|
14
|
+
# var.is_a?(Date)
|
15
|
+
# var.is_a?(Integer)
|
16
|
+
#
|
17
|
+
# @example EnforcedStyle: kind_of?
|
18
|
+
# # bad
|
19
|
+
# var.is_a?(Time)
|
20
|
+
# var.is_a?(String)
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# var.kind_of?(Time)
|
24
|
+
# var.kind_of?(String)
|
25
|
+
#
|
7
26
|
class ClassCheck < Cop
|
8
27
|
include ConfigurableEnforcedStyle
|
9
28
|
|
10
|
-
MSG = 'Prefer `Object
|
29
|
+
MSG = 'Prefer `Object#%<prefer>s` over `Object#%<current>s`.'.freeze
|
11
30
|
|
12
31
|
def_node_matcher :class_check?, '(send _ ${:is_a? :kind_of?} _)'
|
13
32
|
|
@@ -19,14 +38,6 @@ module RuboCop
|
|
19
38
|
end
|
20
39
|
end
|
21
40
|
|
22
|
-
def message(node)
|
23
|
-
if node.method?(:is_a?)
|
24
|
-
format(MSG, 'kind_of?', 'is_a?')
|
25
|
-
else
|
26
|
-
format(MSG, 'is_a?', 'kind_of?')
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
41
|
def autocorrect(node)
|
31
42
|
lambda do |corrector|
|
32
43
|
replacement = node.method?(:is_a?) ? 'kind_of?' : 'is_a?'
|
@@ -34,6 +45,14 @@ module RuboCop
|
|
34
45
|
corrector.replace(node.loc.selector, replacement)
|
35
46
|
end
|
36
47
|
end
|
48
|
+
|
49
|
+
def message(node)
|
50
|
+
if node.method?(:is_a?)
|
51
|
+
format(MSG, prefer: 'kind_of?', current: 'is_a?')
|
52
|
+
else
|
53
|
+
format(MSG, prefer: 'is_a?', current: 'kind_of?')
|
54
|
+
end
|
55
|
+
end
|
37
56
|
end
|
38
57
|
end
|
39
58
|
end
|