rubocop 0.49.1 → 0.50.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 +5 -3
- data/bin/rubocop +1 -1
- data/config/default.yml +160 -99
- data/config/disabled.yml +4 -5
- data/config/enabled.yml +149 -47
- data/lib/rubocop.rb +41 -14
- data/lib/rubocop/ast/builder.rb +4 -1
- data/lib/rubocop/ast/node.rb +36 -42
- data/lib/rubocop/ast/node/args_node.rb +1 -13
- data/lib/rubocop/ast/node/array_node.rb +9 -0
- data/lib/rubocop/ast/node/block_node.rb +9 -0
- data/lib/rubocop/ast/node/def_node.rb +71 -0
- data/lib/rubocop/ast/node/for_node.rb +8 -0
- data/lib/rubocop/ast/node/if_node.rb +10 -2
- data/lib/rubocop/ast/node/mixin/collection_node.rb +15 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +174 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +89 -0
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +18 -31
- data/lib/rubocop/ast/node/regexp_node.rb +35 -0
- data/lib/rubocop/ast/node/send_node.rb +1 -154
- data/lib/rubocop/ast/node/super_node.rb +3 -24
- data/lib/rubocop/ast/node/yield_node.rb +21 -0
- data/lib/rubocop/ast/traversal.rb +6 -6
- data/lib/rubocop/cli.rb +7 -3
- data/lib/rubocop/config.rb +45 -8
- data/lib/rubocop/config_loader.rb +7 -5
- data/lib/rubocop/cop/bundler/duplicated_gem.rb +3 -3
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +64 -0
- data/lib/rubocop/cop/bundler/ordered_gems.rb +12 -12
- data/lib/rubocop/cop/commissioner.rb +8 -2
- data/lib/rubocop/cop/cop.rb +3 -1
- data/lib/rubocop/cop/generator.rb +94 -21
- data/lib/rubocop/cop/internal_affairs.rb +3 -0
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +14 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +43 -0
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +46 -0
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +49 -0
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +1 -1
- data/lib/rubocop/cop/layout/access_modifier_indentation.rb +2 -3
- data/lib/rubocop/cop/layout/align_array.rb +2 -2
- data/lib/rubocop/cop/layout/align_hash.rb +2 -2
- data/lib/rubocop/cop/layout/align_parameters.rb +5 -11
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +5 -5
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +9 -0
- data/lib/rubocop/cop/layout/else_alignment.rb +30 -13
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +4 -0
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +20 -4
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +3 -3
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +3 -3
- data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +3 -3
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +5 -2
- data/lib/rubocop/cop/layout/indent_heredoc.rb +19 -24
- data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -2
- data/lib/rubocop/cop/layout/indentation_width.rb +12 -8
- data/lib/rubocop/cop/layout/leading_comment_space.rb +33 -18
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +20 -17
- data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +3 -3
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +6 -0
- data/lib/rubocop/cop/layout/space_after_colon.rb +7 -0
- data/lib/rubocop/cop/layout/space_after_comma.rb +10 -0
- data/lib/rubocop/cop/layout/space_after_method_name.rb +5 -3
- data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +13 -4
- data/lib/rubocop/cop/layout/space_around_keyword.rb +9 -5
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +54 -5
- data/lib/rubocop/cop/layout/space_before_comment.rb +7 -0
- data/lib/rubocop/cop/layout/space_before_semicolon.rb +7 -0
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +8 -4
- data/lib/rubocop/cop/layout/tab.rb +1 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +4 -2
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +15 -1
- data/lib/rubocop/cop/lint/block_alignment.rb +15 -6
- data/lib/rubocop/cop/lint/boolean_symbol.rb +38 -0
- data/lib/rubocop/cop/lint/condition_position.rb +5 -1
- data/lib/rubocop/cop/lint/debugger.rb +16 -9
- data/lib/rubocop/cop/lint/def_end_alignment.rb +4 -4
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +3 -3
- data/lib/rubocop/cop/lint/duplicate_methods.rb +73 -5
- data/lib/rubocop/cop/lint/duplicated_key.rb +1 -1
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_expression.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +1 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/float_out_of_range.rb +5 -5
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +35 -40
- data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +18 -13
- data/lib/rubocop/cop/lint/inherit_exception.rb +8 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +36 -0
- data/lib/rubocop/cop/lint/literal_in_condition.rb +3 -3
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +5 -7
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/percent_string_array.rb +3 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
- data/lib/rubocop/cop/lint/rand_one.rb +7 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +77 -0
- data/lib/rubocop/cop/lint/require_parentheses.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +13 -6
- data/lib/rubocop/cop/lint/rescue_without_error_class.rb +38 -0
- data/lib/rubocop/cop/lint/return_in_void_context.rb +63 -0
- data/lib/rubocop/cop/lint/script_permission.rb +6 -0
- data/lib/rubocop/cop/lint/syntax.rb +17 -20
- data/lib/rubocop/cop/lint/unified_integer.rb +3 -2
- data/lib/rubocop/cop/lint/unneeded_disable.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_code.rb +53 -8
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +74 -0
- data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +4 -8
- data/lib/rubocop/cop/lint/useless_setter_call.rb +10 -11
- data/lib/rubocop/cop/lint/void.rb +29 -23
- data/lib/rubocop/cop/metrics/line_length.rb +2 -2
- data/lib/rubocop/cop/metrics/method_length.rb +8 -3
- data/lib/rubocop/cop/metrics/parameter_lists.rb +5 -2
- data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -2
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +12 -3
- data/lib/rubocop/cop/mixin/heredoc.rb +28 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +9 -6
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +68 -31
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +18 -0
- data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -1
- data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
- data/lib/rubocop/cop/mixin/string_help.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/accessor_method_name.rb +11 -12
- data/lib/rubocop/cop/{style → naming}/ascii_identifiers.rb +1 -1
- data/lib/rubocop/cop/{style/op_method.rb → naming/binary_operator_parameter_name.rb} +2 -2
- data/lib/rubocop/cop/{style → naming}/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/constant_name.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/file_name.rb +8 -4
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +68 -0
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +58 -0
- data/lib/rubocop/cop/{style → naming}/method_name.rb +1 -1
- data/lib/rubocop/cop/{style → naming}/predicate_name.rb +6 -7
- data/lib/rubocop/cop/{style → naming}/variable_name.rb +11 -15
- data/lib/rubocop/cop/{style → naming}/variable_number.rb +1 -1
- data/lib/rubocop/cop/performance/caller.rb +39 -11
- data/lib/rubocop/cop/performance/casecmp.rb +4 -4
- data/lib/rubocop/cop/performance/compare_with_block.rb +4 -4
- data/lib/rubocop/cop/performance/double_start_end_with.rb +4 -4
- data/lib/rubocop/cop/performance/end_with.rb +3 -3
- data/lib/rubocop/cop/performance/fixed_size.rb +1 -1
- data/lib/rubocop/cop/performance/hash_each_methods.rb +66 -25
- data/lib/rubocop/cop/performance/lstrip_rstrip.rb +2 -2
- data/lib/rubocop/cop/performance/range_include.rb +2 -2
- data/lib/rubocop/cop/performance/redundant_block_call.rb +6 -6
- data/lib/rubocop/cop/performance/redundant_match.rb +5 -5
- data/lib/rubocop/cop/performance/redundant_merge.rb +39 -23
- data/lib/rubocop/cop/performance/redundant_sort_by.rb +2 -2
- data/lib/rubocop/cop/performance/regexp_match.rb +13 -5
- data/lib/rubocop/cop/performance/size.rb +1 -1
- data/lib/rubocop/cop/performance/start_with.rb +3 -3
- data/lib/rubocop/cop/performance/times_map.rb +23 -12
- data/lib/rubocop/cop/performance/unfreeze_string.rb +50 -0
- data/lib/rubocop/cop/performance/uri_default_parser.rb +47 -0
- data/lib/rubocop/cop/rails/active_support_aliases.rb +1 -1
- data/lib/rubocop/cop/rails/delegate.rb +36 -7
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +1 -1
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +2 -2
- data/lib/rubocop/cop/rails/file_path.rb +3 -4
- data/lib/rubocop/cop/rails/find_each.rb +1 -1
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +48 -0
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +5 -5
- data/lib/rubocop/cop/rails/not_null_column.rb +1 -1
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +2 -2
- data/lib/rubocop/cop/rails/relative_date_constant.rb +1 -1
- data/lib/rubocop/cop/rails/request_referer.rb +2 -2
- data/lib/rubocop/cop/rails/reversible_migration.rb +12 -12
- data/lib/rubocop/cop/rails/save_bang.rb +8 -6
- data/lib/rubocop/cop/rails/scope_args.rb +1 -1
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +2 -2
- data/lib/rubocop/cop/security/marshal_load.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +2 -2
- data/lib/rubocop/cop/style/alias.rb +44 -20
- data/lib/rubocop/cop/style/and_or.rb +48 -34
- data/lib/rubocop/cop/style/auto_resource_cleanup.rb +1 -1
- data/lib/rubocop/cop/style/block_comments.rb +3 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
- data/lib/rubocop/cop/style/command_literal.rb +20 -9
- data/lib/rubocop/cop/style/conditional_assignment.rb +30 -28
- data/lib/rubocop/cop/style/copyright.rb +10 -10
- data/lib/rubocop/cop/style/def_with_parentheses.rb +6 -5
- data/lib/rubocop/cop/style/dir.rb +52 -0
- data/lib/rubocop/cop/style/documentation_method.rb +2 -6
- data/lib/rubocop/cop/style/empty_case_condition.rb +1 -1
- data/lib/rubocop/cop/style/empty_else.rb +3 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -2
- data/lib/rubocop/cop/style/empty_method.rb +27 -17
- data/lib/rubocop/cop/style/flip_flop.rb +2 -2
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +1 -1
- data/lib/rubocop/cop/style/guard_clause.rb +4 -2
- data/lib/rubocop/cop/style/hash_syntax.rb +10 -10
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +5 -1
- data/lib/rubocop/cop/style/if_with_semicolon.rb +1 -1
- data/lib/rubocop/cop/style/implicit_runtime_error.rb +4 -3
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +20 -8
- data/lib/rubocop/cop/style/lambda.rb +19 -9
- data/lib/rubocop/cop/style/lambda_call.rb +22 -1
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +4 -20
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +6 -4
- data/lib/rubocop/cop/style/method_def_parentheses.rb +18 -26
- data/lib/rubocop/cop/style/method_missing.rb +5 -18
- data/lib/rubocop/cop/style/min_max.rb +67 -0
- data/lib/rubocop/cop/style/missing_else.rb +16 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +2 -2
- data/lib/rubocop/cop/style/module_function.rb +8 -4
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +5 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +25 -3
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +2 -6
- data/lib/rubocop/cop/style/negated_if.rb +8 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +8 -8
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +14 -14
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +6 -2
- data/lib/rubocop/cop/style/numeric_literals.rb +2 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +8 -4
- data/lib/rubocop/cop/style/one_line_conditional.rb +8 -3
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -2
- data/lib/rubocop/cop/style/or_assignment.rb +88 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +12 -11
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/percent_q_literals.rb +2 -2
- data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +16 -17
- data/lib/rubocop/cop/style/redundant_begin.rb +6 -5
- data/lib/rubocop/cop/style/redundant_conditional.rb +95 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +13 -11
- data/lib/rubocop/cop/style/redundant_return.rb +23 -11
- data/lib/rubocop/cop/style/redundant_self.rb +18 -9
- data/lib/rubocop/cop/style/regexp_literal.rb +12 -4
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/return_nil.rb +98 -0
- data/lib/rubocop/cop/style/safe_navigation.rb +80 -43
- data/lib/rubocop/cop/style/single_line_block_params.rb +14 -13
- data/lib/rubocop/cop/style/single_line_methods.rb +9 -13
- data/lib/rubocop/cop/style/special_global_vars.rb +3 -3
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +17 -39
- data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +22 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +5 -25
- data/lib/rubocop/cop/style/symbol_literal.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +3 -18
- data/lib/rubocop/cop/style/ternary_parentheses.rb +14 -10
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +28 -9
- data/lib/rubocop/cop/style/trivial_accessors.rb +39 -56
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_capital_w.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +1 -1
- data/lib/rubocop/cop/style/variable_interpolation.rb +8 -3
- data/lib/rubocop/cop/style/word_array.rb +7 -24
- data/lib/rubocop/cop/style/yoda_condition.rb +49 -14
- data/lib/rubocop/cop/style/zero_length_predicate.rb +25 -18
- data/lib/rubocop/cop/team.rb +16 -8
- data/lib/rubocop/cop/util.rb +11 -0
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/offense_count_formatter.rb +2 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +1 -1
- data/lib/rubocop/formatter/tap_formatter.rb +71 -0
- data/lib/rubocop/formatter/worst_offenders_formatter.rb +2 -0
- data/lib/rubocop/node_pattern.rb +44 -26
- data/lib/rubocop/options.rb +1 -0
- data/lib/rubocop/processed_source.rb +3 -1
- data/lib/rubocop/remote_config.rb +5 -1
- data/lib/rubocop/result_cache.rb +1 -0
- data/lib/rubocop/rspec/cop_helper.rb +10 -10
- data/lib/rubocop/rspec/expect_offense.rb +6 -8
- data/lib/rubocop/rspec/shared_examples.rb +8 -8
- data/lib/rubocop/string_util.rb +2 -0
- data/lib/rubocop/version.rb +1 -1
- metadata +51 -18
- data/lib/rubocop/cop/mixin/access_modifier_node.rb +0 -41
- data/lib/rubocop/cop/mixin/on_method_def.rb +0 -44
@@ -49,7 +49,6 @@ module RuboCop
|
|
49
49
|
# end
|
50
50
|
class DocumentationMethod < Cop
|
51
51
|
include DocumentationComment
|
52
|
-
include OnMethodDef
|
53
52
|
include DefNode
|
54
53
|
|
55
54
|
MSG = 'Missing method documentation comment.'.freeze
|
@@ -57,10 +56,7 @@ module RuboCop
|
|
57
56
|
def on_def(node)
|
58
57
|
check(node)
|
59
58
|
end
|
60
|
-
|
61
|
-
def on_method_def(node, *)
|
62
|
-
check(node)
|
63
|
-
end
|
59
|
+
alias on_defs on_def
|
64
60
|
|
65
61
|
private
|
66
62
|
|
@@ -68,7 +64,7 @@ module RuboCop
|
|
68
64
|
return if non_public?(node) && !require_for_non_public_methods?
|
69
65
|
return if documentation_comment?(node)
|
70
66
|
|
71
|
-
add_offense(node
|
67
|
+
add_offense(node)
|
72
68
|
end
|
73
69
|
|
74
70
|
def require_for_non_public_methods?
|
@@ -101,13 +101,13 @@ module RuboCop
|
|
101
101
|
def empty_check(node)
|
102
102
|
return unless node.else? && !node.else_branch
|
103
103
|
|
104
|
-
add_offense(node, :else
|
104
|
+
add_offense(node, :else)
|
105
105
|
end
|
106
106
|
|
107
107
|
def nil_check(node)
|
108
108
|
return unless node.else_branch && node.else_branch.nil_type?
|
109
109
|
|
110
|
-
add_offense(node, :else
|
110
|
+
add_offense(node, :else)
|
111
111
|
end
|
112
112
|
|
113
113
|
def autocorrect(node)
|
@@ -121,6 +121,7 @@ module RuboCop
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def base_if_node(node)
|
124
|
+
return node unless node.case_type? || node.elsif?
|
124
125
|
node.each_ancestor(:if).find { |parent| parent.loc.end } || node
|
125
126
|
end
|
126
127
|
|
@@ -21,8 +21,7 @@ module RuboCop
|
|
21
21
|
'(block (send (const nil :Hash) :new) args _)'
|
22
22
|
|
23
23
|
def on_send(node)
|
24
|
-
add_offense(node, :expression, ARR_MSG)
|
25
|
-
|
24
|
+
add_offense(node, :expression, ARR_MSG) if offense_array_node?(node)
|
26
25
|
add_offense(node, :expression, HASH_MSG) if offense_hash_node?(node)
|
27
26
|
|
28
27
|
str_node(node) do
|
@@ -15,14 +15,14 @@ module RuboCop
|
|
15
15
|
#
|
16
16
|
# # EnforcedStyle: compact (default)
|
17
17
|
#
|
18
|
-
#
|
18
|
+
# # bad
|
19
19
|
# def foo(bar)
|
20
20
|
# end
|
21
21
|
#
|
22
22
|
# def self.foo(bar)
|
23
23
|
# end
|
24
24
|
#
|
25
|
-
#
|
25
|
+
# # good
|
26
26
|
# def foo(bar); end
|
27
27
|
#
|
28
28
|
# def foo(bar)
|
@@ -31,34 +31,35 @@ module RuboCop
|
|
31
31
|
#
|
32
32
|
# def self.foo(bar); end
|
33
33
|
#
|
34
|
+
# @example
|
35
|
+
#
|
34
36
|
# # EnforcedStyle: expanded
|
35
37
|
#
|
36
|
-
#
|
38
|
+
# # bad
|
37
39
|
# def foo(bar); end
|
38
40
|
#
|
39
41
|
# def self.foo(bar); end
|
40
42
|
#
|
41
|
-
#
|
43
|
+
# # good
|
42
44
|
# def foo(bar)
|
43
45
|
# end
|
44
46
|
#
|
45
47
|
# def self.foo(bar)
|
46
48
|
# end
|
47
49
|
class EmptyMethod < Cop
|
48
|
-
include OnMethodDef
|
49
50
|
include ConfigurableEnforcedStyle
|
50
51
|
|
51
52
|
MSG_COMPACT = 'Put empty method definitions on a single line.'.freeze
|
52
53
|
MSG_EXPANDED = 'Put the `end` of empty method definitions on the ' \
|
53
54
|
'next line.'.freeze
|
54
55
|
|
55
|
-
def
|
56
|
-
return if body || comment_lines?(node)
|
57
|
-
return if
|
58
|
-
return if expanded_style? && expanded?(node)
|
56
|
+
def on_def(node)
|
57
|
+
return if node.body || comment_lines?(node)
|
58
|
+
return if correct_style?(node)
|
59
59
|
|
60
|
-
add_offense(node
|
60
|
+
add_offense(node)
|
61
61
|
end
|
62
|
+
alias on_defs on_def
|
62
63
|
|
63
64
|
private
|
64
65
|
|
@@ -68,19 +69,28 @@ module RuboCop
|
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
71
|
-
def message
|
72
|
+
def message(_node)
|
72
73
|
compact_style? ? MSG_COMPACT : MSG_EXPANDED
|
73
74
|
end
|
74
75
|
|
76
|
+
def correct_style?(node)
|
77
|
+
compact_style? && compact?(node) ||
|
78
|
+
expanded_style? && expanded?(node)
|
79
|
+
end
|
80
|
+
|
75
81
|
def corrected(node)
|
76
|
-
|
82
|
+
arguments = node.arguments? ? node.arguments.source : ''
|
83
|
+
scope = node.receiver ? "#{node.receiver.source}." : ''
|
84
|
+
|
85
|
+
signature = [scope, node.method_name, arguments].join
|
86
|
+
|
87
|
+
["def #{signature}", 'end'].join(joint(node))
|
88
|
+
end
|
77
89
|
|
78
|
-
|
79
|
-
indent
|
80
|
-
joint = compact_style? ? '; ' : "\n#{indent}"
|
81
|
-
scope = scope ? 'self.' : ''
|
90
|
+
def joint(node)
|
91
|
+
indent = ' ' * node.loc.column
|
82
92
|
|
83
|
-
|
93
|
+
compact_style? ? '; ' : "\n#{indent}"
|
84
94
|
end
|
85
95
|
|
86
96
|
def comment_lines?(node)
|
@@ -8,11 +8,11 @@ module RuboCop
|
|
8
8
|
MSG = 'Avoid the use of flip flop operators.'.freeze
|
9
9
|
|
10
10
|
def on_iflipflop(node)
|
11
|
-
add_offense(node
|
11
|
+
add_offense(node)
|
12
12
|
end
|
13
13
|
|
14
14
|
def on_eflipflop(node)
|
15
|
-
add_offense(node
|
15
|
+
add_offense(node)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -79,7 +79,7 @@ module RuboCop
|
|
79
79
|
last_special_comment = last_special_comment(processed_source)
|
80
80
|
range = source_range(processed_source.buffer, 0, 0)
|
81
81
|
|
82
|
-
add_offense(last_special_comment, range
|
82
|
+
add_offense(last_special_comment, range)
|
83
83
|
end
|
84
84
|
|
85
85
|
def unnecessary_comment_offense(processed_source)
|
@@ -37,12 +37,13 @@ module RuboCop
|
|
37
37
|
# ok
|
38
38
|
class GuardClause < Cop
|
39
39
|
include MinBodyLength
|
40
|
-
include OnMethodDef
|
41
40
|
|
42
41
|
MSG = 'Use a guard clause instead of wrapping the code inside a ' \
|
43
42
|
'conditional expression.'.freeze
|
44
43
|
|
45
|
-
def
|
44
|
+
def on_def(node)
|
45
|
+
body = node.body
|
46
|
+
|
46
47
|
return unless body
|
47
48
|
|
48
49
|
if body.if_type?
|
@@ -51,6 +52,7 @@ module RuboCop
|
|
51
52
|
check_ending_if(body.children.last)
|
52
53
|
end
|
53
54
|
end
|
55
|
+
alias on_defs on_def
|
54
56
|
|
55
57
|
def on_if(node)
|
56
58
|
return if accepted_form?(node) || !contains_guard_clause?(node)
|
@@ -70,18 +70,18 @@ module RuboCop
|
|
70
70
|
MSG_HASH_ROCKETS = 'Use hash rockets syntax.'.freeze
|
71
71
|
|
72
72
|
def on_hash(node)
|
73
|
-
|
73
|
+
pairs = node.pairs
|
74
74
|
|
75
|
-
|
75
|
+
return if pairs.empty?
|
76
76
|
|
77
|
-
if style == :hash_rockets ||
|
78
|
-
hash_rockets_check(
|
77
|
+
if style == :hash_rockets || force_hash_rockets?(pairs)
|
78
|
+
hash_rockets_check(pairs)
|
79
79
|
elsif style == :ruby19_no_mixed_keys
|
80
|
-
ruby19_no_mixed_keys_check(
|
80
|
+
ruby19_no_mixed_keys_check(pairs)
|
81
81
|
elsif style == :no_mixed_keys
|
82
|
-
no_mixed_keys_check(
|
82
|
+
no_mixed_keys_check(pairs)
|
83
83
|
else
|
84
|
-
ruby19_check(
|
84
|
+
ruby19_check(pairs)
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -94,7 +94,7 @@ module RuboCop
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def ruby19_no_mixed_keys_check(pairs)
|
97
|
-
if
|
97
|
+
if force_hash_rockets?
|
98
98
|
check(pairs, ':', MSG_HASH_ROCKETS)
|
99
99
|
elsif sym_indices?(pairs)
|
100
100
|
check(pairs, '=>', MSG_19)
|
@@ -113,7 +113,7 @@ module RuboCop
|
|
113
113
|
|
114
114
|
def autocorrect(node)
|
115
115
|
lambda do |corrector|
|
116
|
-
if style == :hash_rockets ||
|
116
|
+
if style == :hash_rockets || force_hash_rockets?
|
117
117
|
autocorrect_hash_rockets(corrector, node)
|
118
118
|
elsif style == :ruby19_no_mixed_keys || style == :no_mixed_keys
|
119
119
|
autocorrect_no_mixed_keys(corrector, node)
|
@@ -202,7 +202,7 @@ module RuboCop
|
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
205
|
-
def force_hash_rockets?(pairs)
|
205
|
+
def force_hash_rockets?(pairs = [])
|
206
206
|
@force_hash_rockets ||= begin
|
207
207
|
cop_config['UseHashRocketsWithSymbolValues'] &&
|
208
208
|
pairs.map(&:value).any?(&:sym_type?)
|
@@ -100,10 +100,14 @@ module RuboCop
|
|
100
100
|
return unless expressions.size > 1 && expressions.uniq.one?
|
101
101
|
|
102
102
|
expressions.each do |expression|
|
103
|
-
add_offense(expression
|
103
|
+
add_offense(expression)
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
+
def message(node)
|
108
|
+
format(MSG, node.source)
|
109
|
+
end
|
110
|
+
|
107
111
|
# `elsif` branches show up in the if node as nested `else` branches. We
|
108
112
|
# need to recursively iterate over all `else` branches.
|
109
113
|
def expand_elses(branch)
|
@@ -15,14 +15,15 @@ module RuboCop
|
|
15
15
|
# @good
|
16
16
|
# raise ArgumentError, 'Error message here'
|
17
17
|
class ImplicitRuntimeError < Cop
|
18
|
+
MSG = 'Use `%s` with an explicit exception class and message, ' \
|
19
|
+
'rather than just a message.'.freeze
|
20
|
+
|
18
21
|
def_node_matcher :implicit_runtime_error_raise_or_fail,
|
19
22
|
'(send nil ${:raise :fail} {str dstr})'
|
20
23
|
|
21
24
|
def on_send(node)
|
22
25
|
implicit_runtime_error_raise_or_fail(node) do |method|
|
23
|
-
add_offense(node, :expression,
|
24
|
-
'exception class and message, ' \
|
25
|
-
'rather than just a message.')
|
26
|
+
add_offense(node, :expression, format(MSG, method))
|
26
27
|
end
|
27
28
|
end
|
28
29
|
end
|
@@ -28,8 +28,11 @@ module RuboCop
|
|
28
28
|
# foo == bar
|
29
29
|
# !!('foo' =~ /^\w+$/)
|
30
30
|
class InverseMethods < Cop
|
31
|
+
include IgnoredNode
|
32
|
+
|
31
33
|
MSG = 'Use `%<inverse>s` instead of inverting `%<method>s`.'.freeze
|
32
34
|
EQUALITY_METHODS = %i[== != =~ !~ <= >= < >].freeze
|
35
|
+
NEGATED_EQUALITY_METHODS = %i[!= !~].freeze
|
33
36
|
|
34
37
|
def_node_matcher :inverse_candidate?, <<-PATTERN
|
35
38
|
{
|
@@ -48,6 +51,7 @@ module RuboCop
|
|
48
51
|
PATTERN
|
49
52
|
|
50
53
|
def on_send(node)
|
54
|
+
return if part_of_ignored_node?(node)
|
51
55
|
inverse_candidate?(node) do |_method_call, method|
|
52
56
|
return unless inverse_methods.key?(method)
|
53
57
|
return if negated?(node)
|
@@ -60,10 +64,14 @@ module RuboCop
|
|
60
64
|
end
|
61
65
|
|
62
66
|
def on_block(node)
|
63
|
-
inverse_block?(node) do |_method_call, method,
|
67
|
+
inverse_block?(node) do |_method_call, method, block|
|
64
68
|
return unless inverse_blocks.key?(method)
|
65
69
|
return if negated?(node) && negated?(node.parent)
|
66
70
|
|
71
|
+
# Inverse method offenses inside of the block of an inverse method
|
72
|
+
# offense, such as `y.reject { |key, _value| !(key =~ /c\d/) }`,
|
73
|
+
# can cause auto-correction to apply improper corrections.
|
74
|
+
ignore_node(block)
|
67
75
|
add_offense(node,
|
68
76
|
:expression,
|
69
77
|
format(MSG, method: method,
|
@@ -91,18 +99,22 @@ module RuboCop
|
|
91
99
|
|
92
100
|
def correct_inverse_block(node)
|
93
101
|
method_call, method, block = inverse_block?(node)
|
94
|
-
selector = block.loc.selector.source
|
95
102
|
|
96
103
|
lambda do |corrector|
|
97
104
|
corrector.replace(method_call.loc.selector,
|
98
105
|
inverse_blocks[method].to_s)
|
106
|
+
correct_inverse_selector(block, corrector)
|
107
|
+
end
|
108
|
+
end
|
99
109
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
110
|
+
def correct_inverse_selector(block, corrector)
|
111
|
+
selector = block.loc.selector.source
|
112
|
+
|
113
|
+
if NEGATED_EQUALITY_METHODS.include?(selector.to_sym)
|
114
|
+
selector[0] = '='
|
115
|
+
corrector.replace(block.loc.selector, selector)
|
116
|
+
else
|
117
|
+
corrector.remove(block.loc.selector)
|
106
118
|
end
|
107
119
|
end
|
108
120
|
|
@@ -127,7 +127,7 @@ module RuboCop
|
|
127
127
|
block_method, args = *node
|
128
128
|
|
129
129
|
# Check for unparenthesized args' preceding and trailing whitespaces.
|
130
|
-
|
130
|
+
remove_unparenthesized_whitespace(corrector, node)
|
131
131
|
|
132
132
|
# Avoid correcting to `lambdado` by inserting whitespace
|
133
133
|
# if none exists before or after the lambda arguments.
|
@@ -186,18 +186,28 @@ module RuboCop
|
|
186
186
|
arg_node.sibling_index > 1
|
187
187
|
end
|
188
188
|
|
189
|
-
def
|
190
|
-
|
189
|
+
def remove_unparenthesized_whitespace(corrector, node)
|
190
|
+
args = node.arguments
|
191
|
+
|
191
192
|
return unless unparenthesized_literal_args?(args)
|
192
|
-
|
193
|
+
|
194
|
+
remove_leading_whitespace(node, corrector)
|
195
|
+
remove_trailing_whitespace(node, corrector)
|
196
|
+
end
|
197
|
+
|
198
|
+
def remove_leading_whitespace(node, corrector)
|
193
199
|
corrector.remove_preceding(
|
194
|
-
|
195
|
-
|
200
|
+
node.arguments.source_range,
|
201
|
+
node.arguments.source_range.begin_pos -
|
202
|
+
node.send_node.source_range.end_pos
|
196
203
|
)
|
204
|
+
end
|
197
205
|
|
198
|
-
|
199
|
-
|
200
|
-
|
206
|
+
def remove_trailing_whitespace(node, corrector)
|
207
|
+
corrector.remove_preceding(
|
208
|
+
node.loc.begin,
|
209
|
+
node.loc.begin.begin_pos - node.arguments.source_range.end_pos - 1
|
210
|
+
)
|
201
211
|
end
|
202
212
|
|
203
213
|
def unparenthesized_literal_args?(args)
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
return unless node.receiver && node.method?(:call)
|
20
20
|
|
21
21
|
if offense?(node)
|
22
|
-
add_offense(node
|
22
|
+
add_offense(node) { opposite_style_detected }
|
23
23
|
else
|
24
24
|
correct_style_detected
|
25
25
|
end
|
@@ -40,11 +40,32 @@ module RuboCop
|
|
40
40
|
|
41
41
|
corrector.replace(node.source_range, replacement)
|
42
42
|
else
|
43
|
+
add_parentheses(node, corrector) unless node.parenthesized?
|
43
44
|
corrector.remove(node.loc.selector)
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
49
|
+
def add_parentheses(node, corrector)
|
50
|
+
if node.arguments.empty?
|
51
|
+
corrector.insert_after(node.source_range, '()')
|
52
|
+
else
|
53
|
+
corrector.replace(args_begin(node), '(')
|
54
|
+
corrector.insert_after(args_end(node), ')')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def args_begin(node)
|
59
|
+
loc = node.loc
|
60
|
+
selector =
|
61
|
+
node.super_type? || node.yield_type? ? loc.keyword : loc.selector
|
62
|
+
selector.end.resize(1)
|
63
|
+
end
|
64
|
+
|
65
|
+
def args_end(node)
|
66
|
+
node.loc.expression.end
|
67
|
+
end
|
68
|
+
|
48
69
|
def message(_node)
|
49
70
|
if explicit_style?
|
50
71
|
'Prefer the use of `lambda.call(...)` over `lambda.(...)`.'
|