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
@@ -6,27 +6,42 @@ module RuboCop
|
|
6
6
|
# This cops checks if empty lines around the bodies of modules match
|
7
7
|
# the configuration.
|
8
8
|
#
|
9
|
-
# @example
|
10
|
-
#
|
11
|
-
# EnforcedStyle: empty_lines
|
12
|
-
#
|
9
|
+
# @example EnforcedStyle: empty_lines
|
13
10
|
# # good
|
14
11
|
#
|
15
12
|
# module Foo
|
16
13
|
#
|
17
14
|
# def bar
|
18
|
-
# ...
|
15
|
+
# # ...
|
19
16
|
# end
|
20
17
|
#
|
21
18
|
# end
|
22
19
|
#
|
23
|
-
#
|
20
|
+
# @example EnforcedStyle: empty_lines_except_namespace
|
21
|
+
# # good
|
22
|
+
#
|
23
|
+
# module Foo
|
24
|
+
# module Bar
|
25
|
+
#
|
26
|
+
# # ...
|
27
|
+
#
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# @example EnforcedStyle: empty_lines_special
|
32
|
+
# # good
|
33
|
+
# module Foo
|
34
|
+
#
|
35
|
+
# def bar; end
|
36
|
+
#
|
37
|
+
# end
|
24
38
|
#
|
39
|
+
# @example EnforcedStyle: no_empty_lines (default)
|
25
40
|
# # good
|
26
41
|
#
|
27
42
|
# module Foo
|
28
43
|
# def bar
|
29
|
-
# ...
|
44
|
+
# # ...
|
30
45
|
# end
|
31
46
|
# end
|
32
47
|
class EmptyLinesAroundModuleBody < Cop
|
@@ -13,7 +13,7 @@ module RuboCop
|
|
13
13
|
def investigate(processed_source)
|
14
14
|
last_token = processed_source.tokens.last
|
15
15
|
last_line =
|
16
|
-
last_token ? last_token.
|
16
|
+
last_token ? last_token.line : processed_source.lines.length
|
17
17
|
|
18
18
|
processed_source.raw_source.each_line.with_index do |line, index|
|
19
19
|
break if index >= last_line
|
@@ -23,14 +23,15 @@ module RuboCop
|
|
23
23
|
include PrecedingFollowingAlignment
|
24
24
|
|
25
25
|
MSG_UNNECESSARY = 'Unnecessary spacing detected.'.freeze
|
26
|
-
MSG_UNALIGNED_ASGN = '`=` is not aligned with the
|
26
|
+
MSG_UNALIGNED_ASGN = '`=` is not aligned with the %<location>s ' \
|
27
|
+
'assignment.'.freeze
|
27
28
|
|
28
29
|
def investigate(processed_source)
|
29
30
|
return if processed_source.ast.nil?
|
30
31
|
|
31
32
|
if force_equal_sign_alignment?
|
32
33
|
@asgn_tokens = assignment_tokens
|
33
|
-
@asgn_lines = @asgn_tokens.map
|
34
|
+
@asgn_lines = @asgn_tokens.map(&:line)
|
34
35
|
# Don't attempt to correct the same = more than once
|
35
36
|
@corrected = Set.new
|
36
37
|
end
|
@@ -53,14 +54,14 @@ module RuboCop
|
|
53
54
|
private
|
54
55
|
|
55
56
|
def assignment_tokens
|
56
|
-
tokens = processed_source.tokens.select
|
57
|
+
tokens = processed_source.tokens.select(&:equal_sign?)
|
57
58
|
# we don't want to operate on equals signs which are part of an
|
58
59
|
# optarg in a method definition
|
59
60
|
# e.g.: def method(optarg = default_val); end
|
60
61
|
tokens = remove_optarg_equals(tokens, processed_source)
|
61
62
|
|
62
63
|
# Only attempt to align the first = on each line
|
63
|
-
Set.new(tokens.uniq
|
64
|
+
Set.new(tokens.uniq(&:line))
|
64
65
|
end
|
65
66
|
|
66
67
|
def check_tokens(ast, t1, t2)
|
@@ -68,8 +69,8 @@ module RuboCop
|
|
68
69
|
|
69
70
|
if force_equal_sign_alignment? &&
|
70
71
|
@asgn_tokens.include?(t2) &&
|
71
|
-
(@asgn_lines.include?(t2.
|
72
|
-
@asgn_lines.include?(t2.
|
72
|
+
(@asgn_lines.include?(t2.line - 1) ||
|
73
|
+
@asgn_lines.include?(t2.line + 1))
|
73
74
|
check_assignment(t2)
|
74
75
|
else
|
75
76
|
check_other(t1, t2, ast)
|
@@ -81,25 +82,25 @@ module RuboCop
|
|
81
82
|
message = ''
|
82
83
|
if should_aligned_with_preceding_line?(token)
|
83
84
|
assignment_line = preceding_line(token)
|
84
|
-
message = format(MSG_UNALIGNED_ASGN, 'preceding')
|
85
|
+
message = format(MSG_UNALIGNED_ASGN, location: 'preceding')
|
85
86
|
else
|
86
87
|
assignment_line = following_line(token)
|
87
|
-
message = format(MSG_UNALIGNED_ASGN, 'following')
|
88
|
+
message = format(MSG_UNALIGNED_ASGN, location: 'following')
|
88
89
|
end
|
89
90
|
return if aligned_assignment?(token.pos, assignment_line)
|
90
91
|
add_offense(token.pos, location: token.pos, message: message)
|
91
92
|
end
|
92
93
|
|
93
94
|
def should_aligned_with_preceding_line?(token)
|
94
|
-
@asgn_lines.include?(token.
|
95
|
+
@asgn_lines.include?(token.line - 1)
|
95
96
|
end
|
96
97
|
|
97
98
|
def preceding_line(token)
|
98
|
-
processed_source.lines[token.
|
99
|
+
processed_source.lines[token.line - 2]
|
99
100
|
end
|
100
101
|
|
101
102
|
def following_line(token)
|
102
|
-
processed_source.lines[token.
|
103
|
+
processed_source.lines[token.line]
|
103
104
|
end
|
104
105
|
|
105
106
|
def check_other(t1, t2, ast)
|
@@ -113,10 +114,10 @@ module RuboCop
|
|
113
114
|
end
|
114
115
|
|
115
116
|
def extra_space_range(t1, t2)
|
116
|
-
return if t1.
|
117
|
+
return if t1.line != t2.line
|
117
118
|
|
118
|
-
start_pos = t1.
|
119
|
-
end_pos = t2.
|
119
|
+
start_pos = t1.end_pos
|
120
|
+
end_pos = t2.begin_pos - 1
|
120
121
|
return if end_pos <= start_pos
|
121
122
|
|
122
123
|
return if allow_for_alignment? && aligned_tok?(t2)
|
@@ -125,7 +126,7 @@ module RuboCop
|
|
125
126
|
end
|
126
127
|
|
127
128
|
def aligned_tok?(token)
|
128
|
-
if token.
|
129
|
+
if token.comment?
|
129
130
|
aligned_comments?(token)
|
130
131
|
else
|
131
132
|
aligned_with_something?(token.pos)
|
@@ -156,7 +157,7 @@ module RuboCop
|
|
156
157
|
|
157
158
|
def aligned_comments?(token)
|
158
159
|
ix = processed_source.comments.index do |c|
|
159
|
-
c.loc.expression.begin_pos == token.
|
160
|
+
c.loc.expression.begin_pos == token.begin_pos
|
160
161
|
end
|
161
162
|
aligned_with_previous_comment?(ix) || aligned_with_next_comment?(ix)
|
162
163
|
end
|
@@ -178,13 +179,9 @@ module RuboCop
|
|
178
179
|
cop_config['ForceEqualSignAlignment']
|
179
180
|
end
|
180
181
|
|
181
|
-
def equal_sign?(token)
|
182
|
-
token.type == :tEQL || token.type == :tOP_ASGN
|
183
|
-
end
|
184
|
-
|
185
182
|
def align_equal_signs(range, corrector)
|
186
183
|
lines = contiguous_assignment_lines(range)
|
187
|
-
tokens = @asgn_tokens.select { |t| lines.include?(t.
|
184
|
+
tokens = @asgn_tokens.select { |t| lines.include?(t.line) }
|
188
185
|
|
189
186
|
columns = tokens.map { |t| align_column(t) }
|
190
187
|
align_to = columns.max
|
@@ -220,8 +217,8 @@ module RuboCop
|
|
220
217
|
def align_column(asgn_token)
|
221
218
|
# if we removed unneeded spaces from the beginning of this =,
|
222
219
|
# what column would it end from?
|
223
|
-
line = processed_source.lines[asgn_token.
|
224
|
-
leading = line[0...asgn_token.
|
220
|
+
line = processed_source.lines[asgn_token.line - 1]
|
221
|
+
leading = line[0...asgn_token.column]
|
225
222
|
spaces = leading.size - (leading =~ / *\Z/)
|
226
223
|
asgn_token.pos.last_column - spaces + 1
|
227
224
|
end
|
@@ -229,7 +226,7 @@ module RuboCop
|
|
229
226
|
def remove_optarg_equals(asgn_tokens, processed_source)
|
230
227
|
optargs = processed_source.ast.each_node(:optarg)
|
231
228
|
optarg_eql = optargs.map { |o| o.loc.operator.begin_pos }.to_set
|
232
|
-
asgn_tokens.reject { |t| optarg_eql.include?(t.
|
229
|
+
asgn_tokens.reject { |t| optarg_eql.include?(t.begin_pos) }
|
233
230
|
end
|
234
231
|
end
|
235
232
|
end
|
@@ -22,6 +22,8 @@ module RuboCop
|
|
22
22
|
include AutocorrectAlignment
|
23
23
|
include ConfigurableEnforcedStyle
|
24
24
|
|
25
|
+
MSG = 'Indent the first parameter one step more than %<base>s.'.freeze
|
26
|
+
|
25
27
|
def on_send(node)
|
26
28
|
return if !node.arguments? || node.operator_method?
|
27
29
|
|
@@ -44,7 +46,8 @@ module RuboCop
|
|
44
46
|
else
|
45
47
|
'the start of the previous line'
|
46
48
|
end
|
47
|
-
|
49
|
+
|
50
|
+
format(MSG, base: base)
|
48
51
|
end
|
49
52
|
|
50
53
|
def base_indentation(node)
|
@@ -19,30 +19,74 @@ module RuboCop
|
|
19
19
|
# This default style is called 'special_inside_parentheses'. Alternative
|
20
20
|
# styles are 'consistent' and 'align_brackets'. Here are examples:
|
21
21
|
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
# :its_like_this
|
28
|
-
# ])
|
29
|
-
# # consistent
|
30
|
-
# array = [
|
31
|
-
# :value
|
32
|
-
# ]
|
33
|
-
# and_in_a_method_call([
|
34
|
-
# :no_difference
|
35
|
-
# ])
|
36
|
-
# # align_brackets
|
37
|
-
# and_now_for_something = [
|
38
|
-
# :completely_different
|
39
|
-
# ]
|
22
|
+
# @example EnforcedStyle: special_inside_parentheses
|
23
|
+
# # The `special_inside_parentheses` style enforces that the first
|
24
|
+
# # element in an array literal where the opening bracket and first
|
25
|
+
# # element are on seprate lines is indented one step (two spaces) more
|
26
|
+
# # than the position inside the opening parenthesis.
|
40
27
|
#
|
28
|
+
# #bad
|
29
|
+
# array = [
|
30
|
+
# :value
|
31
|
+
# ]
|
32
|
+
# and_in_a_method_call([
|
33
|
+
# :no_difference
|
34
|
+
# ])
|
35
|
+
#
|
36
|
+
# #good
|
37
|
+
# array = [
|
38
|
+
# :value
|
39
|
+
# ]
|
40
|
+
# but_in_a_method_call([
|
41
|
+
# :its_like_this
|
42
|
+
# ])
|
43
|
+
#
|
44
|
+
# @example EnforcedStyle: consistent
|
45
|
+
# # The `consistent` style enforces that the first element in an array
|
46
|
+
# # literal where the opening bracket and the first element are on
|
47
|
+
# # seprate lines is indented the same as an array literal which is not
|
48
|
+
# # defined inside a method call.
|
49
|
+
#
|
50
|
+
# #bad
|
51
|
+
# # consistent
|
52
|
+
# array = [
|
53
|
+
# :value
|
54
|
+
# ]
|
55
|
+
# but_in_a_method_call([
|
56
|
+
# :its_like_this
|
57
|
+
# ])
|
58
|
+
#
|
59
|
+
# #good
|
60
|
+
# array = [
|
61
|
+
# :value
|
62
|
+
# ]
|
63
|
+
# and_in_a_method_call([
|
64
|
+
# :no_difference
|
65
|
+
# ])
|
66
|
+
#
|
67
|
+
# @example EnforcedStyle: align_brackets
|
68
|
+
# # The `align_brackets` style enforces that the opening and closing
|
69
|
+
# # brackets are indented to the same position.
|
70
|
+
#
|
71
|
+
# #bad
|
72
|
+
# # align_brackets
|
73
|
+
# and_now_for_something = [
|
74
|
+
# :completely_different
|
75
|
+
# ]
|
76
|
+
#
|
77
|
+
# #good
|
78
|
+
# # align_brackets
|
79
|
+
# and_now_for_something = [
|
80
|
+
# :completely_different
|
81
|
+
# ]
|
41
82
|
class IndentArray < Cop
|
42
83
|
include AutocorrectAlignment
|
43
84
|
include ConfigurableEnforcedStyle
|
44
85
|
include ArrayHashIndentation
|
45
86
|
|
87
|
+
MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
|
88
|
+
'in an array, relative to %<base_description>s.'.freeze
|
89
|
+
|
46
90
|
def on_array(node)
|
47
91
|
check(node, nil) if node.loc.begin
|
48
92
|
end
|
@@ -105,8 +149,11 @@ module RuboCop
|
|
105
149
|
end
|
106
150
|
|
107
151
|
def message(base_description)
|
108
|
-
format(
|
109
|
-
|
152
|
+
format(
|
153
|
+
MSG,
|
154
|
+
configured_indentation_width: configured_indentation_width,
|
155
|
+
base_description: base_description
|
156
|
+
)
|
110
157
|
end
|
111
158
|
end
|
112
159
|
end
|
@@ -19,30 +19,72 @@ module RuboCop
|
|
19
19
|
# This default style is called 'special_inside_parentheses'. Alternative
|
20
20
|
# styles are 'consistent' and 'align_braces'. Here are examples:
|
21
21
|
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
# its_like: :this
|
28
|
-
# })
|
29
|
-
# # consistent
|
30
|
-
# hash = {
|
31
|
-
# key: :value
|
32
|
-
# }
|
33
|
-
# and_in_a_method_call({
|
34
|
-
# no: :difference
|
35
|
-
# })
|
36
|
-
# # align_braces
|
37
|
-
# and_now_for_something = {
|
38
|
-
# completely: :different
|
39
|
-
# }
|
22
|
+
# @example EnforcedStyle: special_inside_parentheses (default)
|
23
|
+
# # The `special_inside_parentheses` style enforces that the first key
|
24
|
+
# # in a hash literal where the opening brace and the first key are on
|
25
|
+
# # separate lines is indented one step (two spaces) more than the
|
26
|
+
# # position inside the opening parentheses.
|
40
27
|
#
|
28
|
+
# # bad
|
29
|
+
# hash = {
|
30
|
+
# key: :value
|
31
|
+
# }
|
32
|
+
# and_in_a_method_call({
|
33
|
+
# no: :difference
|
34
|
+
# })
|
35
|
+
#
|
36
|
+
# # good
|
37
|
+
# special_inside_parentheses
|
38
|
+
# hash = {
|
39
|
+
# key: :value
|
40
|
+
# }
|
41
|
+
# but_in_a_method_call({
|
42
|
+
# its_like: :this
|
43
|
+
# })
|
44
|
+
#
|
45
|
+
# @example EnforcedStyle: consistent
|
46
|
+
# # The `consistent` style enforces that the first key in a hash
|
47
|
+
# # literal where the opening brace and the first key are on
|
48
|
+
# # seprate lines is indented the same as a hash literal which is not
|
49
|
+
# # defined inside a method call.
|
50
|
+
#
|
51
|
+
# # bad
|
52
|
+
# hash = {
|
53
|
+
# key: :value
|
54
|
+
# }
|
55
|
+
# but_in_a_method_call({
|
56
|
+
# its_like: :this
|
57
|
+
# })
|
58
|
+
#
|
59
|
+
# # good
|
60
|
+
# hash = {
|
61
|
+
# key: :value
|
62
|
+
# }
|
63
|
+
# and_in_a_method_call({
|
64
|
+
# no: :difference
|
65
|
+
# })
|
66
|
+
#
|
67
|
+
# @example EnforcedStyle: align_braces
|
68
|
+
# # The `align_brackets` style enforces that the opening and closing
|
69
|
+
# # braces are indented to the same position.
|
70
|
+
#
|
71
|
+
# # bad
|
72
|
+
# and_now_for_something = {
|
73
|
+
# completely: :different
|
74
|
+
# }
|
75
|
+
#
|
76
|
+
# # good
|
77
|
+
# and_now_for_something = {
|
78
|
+
# completely: :different
|
79
|
+
# }
|
41
80
|
class IndentHash < Cop
|
42
81
|
include AutocorrectAlignment
|
43
82
|
include ConfigurableEnforcedStyle
|
44
83
|
include ArrayHashIndentation
|
45
84
|
|
85
|
+
MSG = 'Use %<configured_indentation_width>d spaces for indentation ' \
|
86
|
+
'in a hash, relative to %<base_description>s.'.freeze
|
87
|
+
|
46
88
|
def on_hash(node)
|
47
89
|
check(node, nil) if node.loc.begin
|
48
90
|
end
|
@@ -69,7 +111,7 @@ module RuboCop
|
|
69
111
|
return if first_pair.source_range.line == left_brace.line
|
70
112
|
|
71
113
|
if separator_style?(first_pair)
|
72
|
-
check_based_on_longest_key(hash_node
|
114
|
+
check_based_on_longest_key(hash_node, left_brace,
|
73
115
|
left_parenthesis)
|
74
116
|
else
|
75
117
|
check_first(first_pair, left_brace, left_parenthesis, 0)
|
@@ -105,11 +147,11 @@ module RuboCop
|
|
105
147
|
config.for_cop('Layout/AlignHash')[key] == 'separator'
|
106
148
|
end
|
107
149
|
|
108
|
-
def check_based_on_longest_key(
|
109
|
-
key_lengths =
|
110
|
-
|
150
|
+
def check_based_on_longest_key(hash_node, left_brace, left_parenthesis)
|
151
|
+
key_lengths = hash_node.keys.map do |key|
|
152
|
+
key.source_range.length
|
111
153
|
end
|
112
|
-
check_first(pairs.first, left_brace, left_parenthesis,
|
154
|
+
check_first(hash_node.pairs.first, left_brace, left_parenthesis,
|
113
155
|
key_lengths.max - key_lengths.first)
|
114
156
|
end
|
115
157
|
|
@@ -125,8 +167,11 @@ module RuboCop
|
|
125
167
|
end
|
126
168
|
|
127
169
|
def message(base_description)
|
128
|
-
format(
|
129
|
-
|
170
|
+
format(
|
171
|
+
MSG,
|
172
|
+
configured_indentation_width: configured_indentation_width,
|
173
|
+
base_description: base_description
|
174
|
+
)
|
130
175
|
end
|
131
176
|
end
|
132
177
|
end
|