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,37 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# Checks that braces used for hash literals have or don't have
|
7
7
|
# surrounding space depending on configuration.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: space
|
10
|
+
# # The `space` style enforces that hash literals have
|
11
|
+
# # surrounding space.
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# h = {a: 1, b: 2}
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# h = { a: 1, b: 2 }
|
18
|
+
#
|
19
|
+
# @example EnforcedStyle: no_space
|
20
|
+
# # The `no_space` style enforces that hash literals have
|
21
|
+
# # no surrounding space.
|
22
|
+
#
|
23
|
+
# # bad
|
24
|
+
# h = { a: 1, b: 2 }
|
25
|
+
#
|
26
|
+
# # good
|
27
|
+
# h = {a: 1, b: 2}
|
28
|
+
#
|
29
|
+
# @example EnforcedStyle: compact
|
30
|
+
# # The `compact` style normally requires a space inside
|
31
|
+
# # hash braces, with the exception that successive left
|
32
|
+
# # braces or right braces are collapsed together in nested hashes.
|
33
|
+
#
|
34
|
+
# # bad
|
35
|
+
# h = { a: { b: 2 } }
|
36
|
+
#
|
37
|
+
# # good
|
38
|
+
# h = { a: { b: 2 }}
|
8
39
|
class SpaceInsideHashLiteralBraces < Cop
|
9
40
|
include SurroundingSpace
|
10
41
|
include ConfigurableEnforcedStyle
|
@@ -22,36 +53,45 @@ module RuboCop
|
|
22
53
|
end
|
23
54
|
end
|
24
55
|
|
56
|
+
def autocorrect(range)
|
57
|
+
lambda do |corrector|
|
58
|
+
# It is possible that BracesAroundHashParameters will remove the
|
59
|
+
# braces while this cop inserts spaces. This can lead to unwanted
|
60
|
+
# changes to the inspected code. If we replace the brace with a
|
61
|
+
# brace plus space (rather than just inserting a space), then any
|
62
|
+
# removal of the same brace will give us a clobbering error. This
|
63
|
+
# in turn will make RuboCop fall back on cop-by-cop
|
64
|
+
# auto-correction. Problem solved.
|
65
|
+
case range.source
|
66
|
+
when /\s/ then corrector.remove(range)
|
67
|
+
when '{' then corrector.replace(range, '{ ')
|
68
|
+
else corrector.replace(range, ' }')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
25
73
|
private
|
26
74
|
|
27
75
|
def hash_literal_with_braces(node)
|
28
76
|
tokens = processed_source.tokens
|
29
77
|
begin_index = index_of_first_token(node)
|
30
|
-
return unless
|
78
|
+
return unless tokens[begin_index].left_brace?
|
31
79
|
|
32
80
|
end_index = index_of_last_token(node)
|
33
|
-
return unless
|
81
|
+
return unless tokens[end_index].right_curly_brace?
|
34
82
|
|
35
83
|
yield begin_index, end_index
|
36
84
|
end
|
37
85
|
|
38
|
-
def left_brace?(token)
|
39
|
-
token.type == :tLBRACE
|
40
|
-
end
|
41
|
-
|
42
|
-
def right_brace?(token)
|
43
|
-
token.type == :tRCURLY
|
44
|
-
end
|
45
|
-
|
46
86
|
def check(t1, t2)
|
47
87
|
# No offense if line break inside.
|
48
|
-
return if t1.
|
49
|
-
return if t2.
|
88
|
+
return if t1.line < t2.line
|
89
|
+
return if t2.comment? # Also indicates there's a line break.
|
50
90
|
|
51
|
-
is_empty_braces = left_brace?
|
91
|
+
is_empty_braces = t1.left_brace? && t2.right_curly_brace?
|
52
92
|
expect_space = expect_space?(t1, t2)
|
53
93
|
|
54
|
-
if offense?(t1,
|
94
|
+
if offense?(t1, expect_space)
|
55
95
|
incorrect_style_detected(t1, t2, expect_space, is_empty_braces)
|
56
96
|
else
|
57
97
|
correct_style_detected
|
@@ -60,7 +100,7 @@ module RuboCop
|
|
60
100
|
|
61
101
|
def expect_space?(t1, t2)
|
62
102
|
is_same_braces = t1.type == t2.type
|
63
|
-
is_empty_braces = left_brace?
|
103
|
+
is_empty_braces = t1.left_brace? && t2.right_curly_brace?
|
64
104
|
|
65
105
|
if is_same_braces && style == :compact
|
66
106
|
false
|
@@ -92,8 +132,8 @@ module RuboCop
|
|
92
132
|
end
|
93
133
|
end
|
94
134
|
|
95
|
-
def offense?(t1,
|
96
|
-
has_space =
|
135
|
+
def offense?(t1, expect_space)
|
136
|
+
has_space = t1.space_after?
|
97
137
|
expect_space ? !has_space : has_space
|
98
138
|
end
|
99
139
|
|
@@ -107,23 +147,6 @@ module RuboCop
|
|
107
147
|
format(MSG, "#{inside_what} #{problem}")
|
108
148
|
end
|
109
149
|
|
110
|
-
def autocorrect(range)
|
111
|
-
lambda do |corrector|
|
112
|
-
# It is possible that BracesAroundHashParameters will remove the
|
113
|
-
# braces while this cop inserts spaces. This can lead to unwanted
|
114
|
-
# changes to the inspected code. If we replace the brace with a
|
115
|
-
# brace plus space (rather than just inserting a space), then any
|
116
|
-
# removal of the same brace will give us a clobbering error. This
|
117
|
-
# in turn will make RuboCop fall back on cop-by-cop
|
118
|
-
# auto-correction. Problem solved.
|
119
|
-
case range.source
|
120
|
-
when /\s/ then corrector.remove(range)
|
121
|
-
when '{' then corrector.replace(range, '{ ')
|
122
|
-
else corrector.replace(range, ' }')
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
150
|
def space_range(token_range)
|
128
151
|
if token_range.source == '{'
|
129
152
|
range_of_space_to_the_right(token_range)
|
@@ -14,10 +14,38 @@ module RuboCop
|
|
14
14
|
# f(3)
|
15
15
|
# g = (a + 3)
|
16
16
|
class SpaceInsideParens < Cop
|
17
|
-
include
|
17
|
+
include SurroundingSpace
|
18
18
|
|
19
|
-
|
20
|
-
|
19
|
+
MSG = 'Space inside parentheses detected.'.freeze
|
20
|
+
|
21
|
+
def investigate(processed_source)
|
22
|
+
@processed_source = processed_source
|
23
|
+
each_extraneous_space(processed_source.tokens) do |range|
|
24
|
+
add_offense(range, location: range)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def autocorrect(range)
|
29
|
+
->(corrector) { corrector.remove(range) }
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def each_extraneous_space(tokens)
|
35
|
+
tokens.each_cons(2) do |t1, t2|
|
36
|
+
next unless parens?(t1, t2)
|
37
|
+
|
38
|
+
# If the second token is a comment, that means that a line break
|
39
|
+
# follows, and that the rules for space inside don't apply.
|
40
|
+
next if t2.comment?
|
41
|
+
next unless t2.line == t1.line && t1.space_after?
|
42
|
+
|
43
|
+
yield range_between(t1.end_pos, t2.begin_pos)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def parens?(t1, t2)
|
48
|
+
t1.left_parens? || t2.right_parens?
|
21
49
|
end
|
22
50
|
end
|
23
51
|
end
|
@@ -28,21 +28,6 @@ module RuboCop
|
|
28
28
|
check(node)
|
29
29
|
end
|
30
30
|
|
31
|
-
private
|
32
|
-
|
33
|
-
def check(node)
|
34
|
-
expression = node.source
|
35
|
-
op = node.loc.operator.source
|
36
|
-
escaped_op = op.gsub(/\./, '\.')
|
37
|
-
|
38
|
-
# account for multiline range literals
|
39
|
-
expression.sub!(/#{escaped_op}\n\s*/, op)
|
40
|
-
|
41
|
-
return unless expression =~ /(\s#{escaped_op})|(#{escaped_op}\s)/
|
42
|
-
|
43
|
-
add_offense(node)
|
44
|
-
end
|
45
|
-
|
46
31
|
def autocorrect(node)
|
47
32
|
expression = node.source
|
48
33
|
operator = node.loc.operator.source
|
@@ -57,6 +42,21 @@ module RuboCop
|
|
57
42
|
)
|
58
43
|
end
|
59
44
|
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def check(node)
|
49
|
+
expression = node.source
|
50
|
+
op = node.loc.operator.source
|
51
|
+
escaped_op = op.gsub(/\./, '\.')
|
52
|
+
|
53
|
+
# account for multiline range literals
|
54
|
+
expression.sub!(/#{escaped_op}\n\s*/, op)
|
55
|
+
|
56
|
+
return unless expression =~ /(\s#{escaped_op})|(#{escaped_op}\s)/
|
57
|
+
|
58
|
+
add_offense(node)
|
59
|
+
end
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# Checks that reference brackets have or don't have
|
7
|
+
# surrounding space depending on configuration.
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: no_space (default)
|
10
|
+
# # The `no_space` style enforces that reference brackets have
|
11
|
+
# # no surrounding space.
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# hash[ :key ]
|
15
|
+
# array[ index ]
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# hash[:key]
|
19
|
+
# array[index]
|
20
|
+
#
|
21
|
+
# @example EnforcedStyle: space
|
22
|
+
# # The `space` style enforces that reference brackets have
|
23
|
+
# # surrounding space.
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# hash[:key]
|
27
|
+
# array[index]
|
28
|
+
#
|
29
|
+
# # good
|
30
|
+
# hash[ :key ]
|
31
|
+
# array[ index ]
|
32
|
+
class SpaceInsideReferenceBrackets < Cop
|
33
|
+
include SurroundingSpace
|
34
|
+
include ConfigurableEnforcedStyle
|
35
|
+
|
36
|
+
MSG = '%<command>s space inside reference brackets.'.freeze
|
37
|
+
|
38
|
+
def on_send(node)
|
39
|
+
return if node.multiline?
|
40
|
+
return unless left_ref_bracket(node)
|
41
|
+
left_token = left_ref_bracket(node)
|
42
|
+
right_token = right_ref_bracket(node, left_token)
|
43
|
+
|
44
|
+
if style == :no_space
|
45
|
+
no_space_offenses(node, left_token, right_token, MSG)
|
46
|
+
else
|
47
|
+
space_offenses(node, left_token, right_token, MSG)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def autocorrect(node)
|
52
|
+
lambda do |corrector|
|
53
|
+
left, right = reference_brackets(node)
|
54
|
+
|
55
|
+
if style == :no_space
|
56
|
+
no_space_corrector(corrector, left, right)
|
57
|
+
else
|
58
|
+
space_corrector(corrector, left, right)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def reference_brackets(node)
|
66
|
+
left = left_ref_bracket(node)
|
67
|
+
[left, right_ref_bracket(node, left)]
|
68
|
+
end
|
69
|
+
|
70
|
+
def left_ref_bracket(node)
|
71
|
+
tokens(node).reverse.find(&:left_ref_bracket?)
|
72
|
+
end
|
73
|
+
|
74
|
+
def right_ref_bracket(node, token)
|
75
|
+
i = tokens(node).index(token)
|
76
|
+
tokens(node).slice(i..-1).find(&:right_bracket?)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -5,11 +5,18 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# This cop checks for whitespace within string interpolations.
|
7
7
|
#
|
8
|
-
# @example
|
9
|
-
# #
|
8
|
+
# @example EnforcedStyle: no_space (default)
|
9
|
+
# # bad
|
10
|
+
# var = "This is the #{ space } example"
|
11
|
+
#
|
12
|
+
# # good
|
13
|
+
# var = "This is the #{no_space} example"
|
14
|
+
#
|
15
|
+
# @example EnforcedStyle: space
|
16
|
+
# # bad
|
10
17
|
# var = "This is the #{no_space} example"
|
11
18
|
#
|
12
|
-
# #
|
19
|
+
# # good
|
13
20
|
# var = "This is the #{ space } example"
|
14
21
|
class SpaceInsideStringInterpolation < Cop
|
15
22
|
include ConfigurableEnforcedStyle
|
@@ -23,6 +30,16 @@ module RuboCop
|
|
23
30
|
end
|
24
31
|
end
|
25
32
|
|
33
|
+
def autocorrect(node)
|
34
|
+
new_source = style == :no_space ? node.source : " #{node.source} "
|
35
|
+
lambda do |corrector|
|
36
|
+
corrector.replace(
|
37
|
+
range_with_surrounding_space(range: node.source_range),
|
38
|
+
new_source
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
26
43
|
private
|
27
44
|
|
28
45
|
def each_style_violation(node)
|
@@ -44,25 +61,19 @@ module RuboCop
|
|
44
61
|
|
45
62
|
def space_on_any_side?(node)
|
46
63
|
interp = node.source_range
|
47
|
-
interp_with_surrounding_space =
|
64
|
+
interp_with_surrounding_space =
|
65
|
+
range_with_surrounding_space(range: interp)
|
48
66
|
|
49
67
|
interp_with_surrounding_space != interp
|
50
68
|
end
|
51
69
|
|
52
70
|
def space_on_each_side?(node)
|
53
71
|
interp = node.source_range
|
54
|
-
interp_with_surrounding_space =
|
72
|
+
interp_with_surrounding_space =
|
73
|
+
range_with_surrounding_space(range: interp)
|
55
74
|
|
56
75
|
interp_with_surrounding_space.source == " #{interp.source} "
|
57
76
|
end
|
58
|
-
|
59
|
-
def autocorrect(node)
|
60
|
-
new_source = style == :no_space ? node.source : " #{node.source} "
|
61
|
-
lambda do |corrector|
|
62
|
-
corrector.replace(range_with_surrounding_space(node.source_range),
|
63
|
-
new_source)
|
64
|
-
end
|
65
|
-
end
|
66
77
|
end
|
67
78
|
end
|
68
79
|
end
|
@@ -28,8 +28,6 @@ module RuboCop
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
private
|
32
|
-
|
33
31
|
def autocorrect(range)
|
34
32
|
lambda do |corrector|
|
35
33
|
spaces = ' ' * configured_indentation_width
|
@@ -37,6 +35,8 @@ module RuboCop
|
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
38
|
+
private
|
39
|
+
|
40
40
|
def string_literal_lines(ast)
|
41
41
|
# which lines start inside a string literal?
|
42
42
|
return [] if ast.nil?
|
@@ -28,6 +28,12 @@ module RuboCop
|
|
28
28
|
whitespace_at_end)
|
29
29
|
end
|
30
30
|
|
31
|
+
def autocorrect(range)
|
32
|
+
lambda do |corrector|
|
33
|
+
corrector.replace(range, style == :final_newline ? "\n" : "\n\n")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
31
37
|
private
|
32
38
|
|
33
39
|
def offense_detected(sb, wanted_blank_lines, blank_lines,
|
@@ -48,7 +54,7 @@ module RuboCop
|
|
48
54
|
return true if sb.source.strip.start_with?('__END__')
|
49
55
|
return false if processed_source.tokens.empty?
|
50
56
|
|
51
|
-
extra = sb.source[processed_source.tokens.last.
|
57
|
+
extra = sb.source[processed_source.tokens.last.end_pos..-1]
|
52
58
|
extra && extra.strip.start_with?('__END__')
|
53
59
|
end
|
54
60
|
|
@@ -68,12 +74,6 @@ module RuboCop
|
|
68
74
|
instead_of)
|
69
75
|
end
|
70
76
|
end
|
71
|
-
|
72
|
-
def autocorrect(range)
|
73
|
-
lambda do |corrector|
|
74
|
-
corrector.replace(range, style == :final_newline ? "\n" : "\n\n")
|
75
|
-
end
|
76
|
-
end
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -29,39 +29,30 @@ module RuboCop
|
|
29
29
|
' associated with the `%s` method call.'.freeze
|
30
30
|
|
31
31
|
def on_send(node)
|
32
|
-
return if node.
|
33
|
-
|
32
|
+
return if !node.arguments? || node.parenthesized? ||
|
33
|
+
node.last_argument.lambda? || allowed_method?(node)
|
34
34
|
|
35
|
-
return unless
|
36
|
-
last_param = node.last_argument.children.first
|
37
|
-
return unless method_as_param?(last_param)
|
35
|
+
return unless ambiguous_block_association?(node)
|
38
36
|
|
39
37
|
add_offense(node)
|
40
38
|
end
|
41
39
|
|
42
40
|
private
|
43
41
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
def method_with_block?(param)
|
49
|
-
param && param.block_type?
|
42
|
+
def ambiguous_block_association?(send_node)
|
43
|
+
send_node.last_argument.block_type? &&
|
44
|
+
!send_node.last_argument.send_node.arguments?
|
50
45
|
end
|
51
46
|
|
52
|
-
def
|
53
|
-
|
47
|
+
def allowed_method?(node)
|
48
|
+
node.assignment? || node.operator_method? || node.method?(:[])
|
54
49
|
end
|
55
50
|
|
56
|
-
def message(
|
57
|
-
|
51
|
+
def message(send_node)
|
52
|
+
block_param = send_node.last_argument
|
58
53
|
|
59
|
-
format(MSG,
|
54
|
+
format(MSG, block_param.source, block_param.send_node.source)
|
60
55
|
end
|
61
|
-
|
62
|
-
def_node_matcher :lambda_argument?, <<-PATTERN
|
63
|
-
(block (send _ :lambda) ...)
|
64
|
-
PATTERN
|
65
56
|
end
|
66
57
|
end
|
67
58
|
end
|