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
@@ -39,14 +39,14 @@ module RuboCop
|
|
39
39
|
return if FROZEN_STRING_LITERAL_TYPES.include?(value.type) &&
|
40
40
|
frozen_string_literals_enabled?
|
41
41
|
|
42
|
-
add_offense(value
|
42
|
+
add_offense(value)
|
43
43
|
end
|
44
44
|
|
45
45
|
def autocorrect(node)
|
46
46
|
expr = node.source_range
|
47
47
|
|
48
48
|
lambda do |corrector|
|
49
|
-
if
|
49
|
+
if node.array_type? && !node.bracketed?
|
50
50
|
corrector.insert_before(expr, '[')
|
51
51
|
corrector.insert_after(expr, '].freeze')
|
52
52
|
else
|
@@ -55,10 +55,6 @@ module RuboCop
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
def unbracketed_array?(node)
|
59
|
-
node.array_type? && !node.square_brackets? && !node.percent_literal?
|
60
|
-
end
|
61
|
-
|
62
58
|
def_node_matcher :splat_value, <<-PATTERN
|
63
59
|
(array (splat $_))
|
64
60
|
PATTERN
|
@@ -82,21 +82,25 @@ module RuboCop
|
|
82
82
|
|
83
83
|
def on_if(node)
|
84
84
|
return if node.elsif? || node.ternary?
|
85
|
-
return if
|
86
|
-
return if style == :postfix && !node.modifier_form?
|
85
|
+
return if correct_style?(node)
|
87
86
|
|
88
87
|
check_negative_conditional(node)
|
89
88
|
end
|
90
89
|
|
90
|
+
private
|
91
|
+
|
91
92
|
def message(node)
|
92
93
|
format(MSG, node.inverse_keyword, node.keyword)
|
93
94
|
end
|
94
95
|
|
95
|
-
private
|
96
|
-
|
97
96
|
def autocorrect(node)
|
98
97
|
negative_conditional_corrector(node)
|
99
98
|
end
|
99
|
+
|
100
|
+
def correct_style?(node)
|
101
|
+
style == :prefix && node.modifier_form? ||
|
102
|
+
style == :postfix && !node.modifier_form?
|
103
|
+
end
|
100
104
|
end
|
101
105
|
end
|
102
106
|
end
|
@@ -14,9 +14,6 @@ module RuboCop
|
|
14
14
|
# method1(method2 arg, method3, arg)
|
15
15
|
class NestedParenthesizedCalls < Cop
|
16
16
|
MSG = 'Add parentheses to nested method call `%s`.'.freeze
|
17
|
-
RSPEC_MATCHERS = %i[be eq eql equal be_kind_of be_instance_of
|
18
|
-
respond_to be_between match be_within
|
19
|
-
start_with end_with include raise_error].freeze
|
20
17
|
|
21
18
|
def on_send(node)
|
22
19
|
return unless node.parenthesized?
|
@@ -33,13 +30,12 @@ module RuboCop
|
|
33
30
|
def allowed_omission?(send_node)
|
34
31
|
!send_node.arguments? || send_node.parenthesized? ||
|
35
32
|
send_node.setter_method? || send_node.operator_method? ||
|
36
|
-
|
33
|
+
whitelisted?(send_node)
|
37
34
|
end
|
38
35
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
RSPEC_MATCHERS.include?(send_node.method_name) &&
|
36
|
+
def whitelisted?(send_node)
|
37
|
+
send_node.parent.arguments.one? &&
|
38
|
+
whitelisted_methods.include?(send_node.method_name.to_s) &&
|
43
39
|
send_node.arguments.one?
|
44
40
|
end
|
45
41
|
|
@@ -55,6 +51,10 @@ module RuboCop
|
|
55
51
|
corrector.insert_after(last_arg, ')')
|
56
52
|
end
|
57
53
|
end
|
54
|
+
|
55
|
+
def whitelisted_methods
|
56
|
+
cop_config['Whitelist'] || []
|
57
|
+
end
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -24,8 +24,6 @@ module RuboCop
|
|
24
24
|
# !current_user.nil?
|
25
25
|
# end
|
26
26
|
class NonNilCheck < Cop
|
27
|
-
include OnMethodDef
|
28
|
-
|
29
27
|
def_node_matcher :not_equal_to_nil?, '(send _ :!= (:nil))'
|
30
28
|
def_node_matcher :unless_check?, '(if (send _ :nil?) ...)'
|
31
29
|
def_node_matcher :nil_check?, '(send _ :nil?)'
|
@@ -38,9 +36,22 @@ module RuboCop
|
|
38
36
|
add_offense(node, :selector)
|
39
37
|
elsif include_semantic_changes? &&
|
40
38
|
(not_and_nil_check?(node) || unless_and_nil_check?(node))
|
41
|
-
add_offense(node
|
39
|
+
add_offense(node)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def on_def(node)
|
44
|
+
body = node.body
|
45
|
+
|
46
|
+
return unless node.predicate_method? && body
|
47
|
+
|
48
|
+
if body.begin_type?
|
49
|
+
ignore_node(body.children.last)
|
50
|
+
else
|
51
|
+
ignore_node(body)
|
42
52
|
end
|
43
53
|
end
|
54
|
+
alias on_defs on_def
|
44
55
|
|
45
56
|
private
|
46
57
|
|
@@ -63,17 +74,6 @@ module RuboCop
|
|
63
74
|
cop_config['IncludeSemanticChanges']
|
64
75
|
end
|
65
76
|
|
66
|
-
def on_method_def(_node, name, _args, body)
|
67
|
-
# only predicate methods are handled differently
|
68
|
-
return unless name.to_s.end_with?('?') && body
|
69
|
-
|
70
|
-
if body.begin_type?
|
71
|
-
ignore_node(body.children.last)
|
72
|
-
else
|
73
|
-
ignore_node(body)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
77
|
def autocorrect(node)
|
78
78
|
case node.method_name
|
79
79
|
when :!=
|
@@ -27,14 +27,18 @@ module RuboCop
|
|
27
27
|
|
28
28
|
def on_int(node)
|
29
29
|
type = literal_type(node)
|
30
|
+
|
30
31
|
return unless type
|
31
32
|
|
32
|
-
|
33
|
-
add_offense(node, :expression, msg)
|
33
|
+
add_offense(node)
|
34
34
|
end
|
35
35
|
|
36
36
|
private
|
37
37
|
|
38
|
+
def message(node)
|
39
|
+
self.class.const_get("#{literal_type(node).upcase}_MSG")
|
40
|
+
end
|
41
|
+
|
38
42
|
def autocorrect(node)
|
39
43
|
lambda do |corrector|
|
40
44
|
type = literal_type(node)
|
@@ -56,9 +56,9 @@ module RuboCop
|
|
56
56
|
|
57
57
|
case int
|
58
58
|
when /^\d+$/
|
59
|
-
add_offense(node
|
59
|
+
add_offense(node) { self.max = int.size + 1 }
|
60
60
|
when /\d{4}/, short_group_regex
|
61
|
-
add_offense(node
|
61
|
+
add_offense(node) do
|
62
62
|
self.config_to_allow_offenses = { 'Enabled' => false }
|
63
63
|
end
|
64
64
|
end
|
@@ -8,10 +8,14 @@ module RuboCop
|
|
8
8
|
# These can be replaced by their respective predicate methods.
|
9
9
|
# The cop can also be configured to do the reverse.
|
10
10
|
#
|
11
|
-
# The cop disregards
|
11
|
+
# The cop disregards `#nonzero?` as it its value is truthy or falsey,
|
12
12
|
# but not `true` and `false`, and thus not always interchangeable with
|
13
13
|
# `!= 0`.
|
14
14
|
#
|
15
|
+
# The cop ignores comparisons to global variables, since they are often
|
16
|
+
# populated with objects which can be compared with integers, but are
|
17
|
+
# not themselves `Interger` polymorphic.
|
18
|
+
#
|
15
19
|
# @example
|
16
20
|
#
|
17
21
|
# # EnforcedStyle: predicate (default)
|
@@ -59,7 +63,7 @@ module RuboCop
|
|
59
63
|
|
60
64
|
return unless numeric
|
61
65
|
|
62
|
-
add_offense(node,
|
66
|
+
add_offense(node, :expression,
|
63
67
|
format(MSG, replacement, node.source))
|
64
68
|
end
|
65
69
|
|
@@ -128,11 +132,11 @@ module RuboCop
|
|
128
132
|
PATTERN
|
129
133
|
|
130
134
|
def_node_matcher :comparison, <<-PATTERN
|
131
|
-
(send $(...) ${:== :> :<} (int 0))
|
135
|
+
(send [$(...) !gvar_type?] ${:== :> :<} (int 0))
|
132
136
|
PATTERN
|
133
137
|
|
134
138
|
def_node_matcher :inverted_comparison, <<-PATTERN
|
135
|
-
(send (int 0) ${:== :> :<} $(...))
|
139
|
+
(send (int 0) ${:== :> :<} [$(...) !gvar_type?])
|
136
140
|
PATTERN
|
137
141
|
end
|
138
142
|
end
|
@@ -14,15 +14,21 @@ module RuboCop
|
|
14
14
|
def on_normal_if_unless(node)
|
15
15
|
return unless node.single_line? && node.else_branch
|
16
16
|
|
17
|
-
add_offense(node
|
17
|
+
add_offense(node)
|
18
18
|
end
|
19
19
|
|
20
|
+
private
|
21
|
+
|
20
22
|
def autocorrect(node)
|
21
23
|
lambda do |corrector|
|
22
24
|
corrector.replace(node.source_range, replacement(node))
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
28
|
+
def message(node)
|
29
|
+
format(MSG, node.keyword)
|
30
|
+
end
|
31
|
+
|
26
32
|
def replacement(node)
|
27
33
|
return to_ternary(node) unless node.parent
|
28
34
|
|
@@ -56,8 +62,7 @@ module RuboCop
|
|
56
62
|
end
|
57
63
|
|
58
64
|
def method_call_with_changed_precedence?(node)
|
59
|
-
return false unless node.send_type?
|
60
|
-
return false if node.method_args.empty?
|
65
|
+
return false unless node.send_type? && node.arguments?
|
61
66
|
return false if parenthesized_call?(node)
|
62
67
|
|
63
68
|
!operator?(node.method_name)
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop checks for potential usage of the `||=` operator.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# # bad
|
10
|
+
# name = name ? name : 'Bozhidar'
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# name = if name
|
14
|
+
# name
|
15
|
+
# else
|
16
|
+
# 'Bozhidar'
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # bad
|
20
|
+
# unless name
|
21
|
+
# name = 'Bozhidar'
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
# # bad
|
25
|
+
# name = 'Bozhidar' unless name
|
26
|
+
#
|
27
|
+
# # good - set name to 'Bozhidar', only if it's nil or false
|
28
|
+
# name ||= 'Bozhidar'
|
29
|
+
class OrAssignment < Cop
|
30
|
+
MSG = 'Use the double pipe equals operator `||=` instead.'.freeze
|
31
|
+
|
32
|
+
def_node_matcher :ternary_assignment?, <<-PATTERN
|
33
|
+
({lvasgn ivasgn cvasgn gvasgn} _var
|
34
|
+
(if
|
35
|
+
({lvar ivar cvar gvar} _var)
|
36
|
+
({lvar ivar cvar gvar} _var)
|
37
|
+
_))
|
38
|
+
PATTERN
|
39
|
+
|
40
|
+
def_node_matcher :unless_assignment?, <<-PATTERN
|
41
|
+
(if
|
42
|
+
({lvar ivar cvar gvar} _var) nil
|
43
|
+
({lvasgn ivasgn cvasgn gvasgn} _var
|
44
|
+
_))
|
45
|
+
PATTERN
|
46
|
+
|
47
|
+
def on_if(node)
|
48
|
+
return unless unless_assignment?(node)
|
49
|
+
add_offense(node)
|
50
|
+
end
|
51
|
+
|
52
|
+
def on_lvasgn(node)
|
53
|
+
return unless ternary_assignment?(node)
|
54
|
+
add_offense(node)
|
55
|
+
end
|
56
|
+
|
57
|
+
alias on_ivasgn on_lvasgn
|
58
|
+
alias on_cvasgn on_lvasgn
|
59
|
+
alias on_gvasgn on_lvasgn
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def autocorrect(node)
|
64
|
+
if ternary_assignment?(node)
|
65
|
+
variable, default = take_variable_and_default_from_ternary(node)
|
66
|
+
else
|
67
|
+
variable, default = take_variable_and_default_from_unless(node)
|
68
|
+
end
|
69
|
+
|
70
|
+
lambda do |corrector|
|
71
|
+
corrector.replace(node.source_range,
|
72
|
+
"#{variable} ||= #{default.source}")
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def take_variable_and_default_from_ternary(node)
|
77
|
+
variable, if_statement = *node
|
78
|
+
[variable, if_statement.else_branch]
|
79
|
+
end
|
80
|
+
|
81
|
+
def take_variable_and_default_from_unless(node)
|
82
|
+
variable, default = *node.if_branch
|
83
|
+
[variable, default]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -35,7 +35,7 @@ module RuboCop
|
|
35
35
|
return if allowed_lhs?(lhs) || allowed_rhs?(rhs) ||
|
36
36
|
allowed_masign?(lhs_elements, rhs_elements)
|
37
37
|
|
38
|
-
add_offense(node
|
38
|
+
add_offense(node)
|
39
39
|
end
|
40
40
|
|
41
41
|
private
|
@@ -159,7 +159,7 @@ module RuboCop
|
|
159
159
|
def accesses?(rhs, lhs)
|
160
160
|
if lhs.method?(:[]=)
|
161
161
|
matching_calls(rhs, lhs.receiver, :[]).any? do |args|
|
162
|
-
args == lhs.
|
162
|
+
args == lhs.arguments
|
163
163
|
end
|
164
164
|
else
|
165
165
|
access_method = lhs.method_name.to_s.chop.to_sym
|
@@ -18,23 +18,24 @@ module RuboCop
|
|
18
18
|
def on_while(node)
|
19
19
|
process_control_op(node)
|
20
20
|
end
|
21
|
-
|
22
|
-
def on_until(node)
|
23
|
-
process_control_op(node)
|
24
|
-
end
|
21
|
+
alias on_until on_while
|
25
22
|
|
26
23
|
private
|
27
24
|
|
25
|
+
def_node_matcher :control_op_condition, <<-PATTERN
|
26
|
+
(begin $_ ...)
|
27
|
+
PATTERN
|
28
|
+
|
28
29
|
def process_control_op(node)
|
29
30
|
cond = node.condition
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
return if safe_assignment?(cond) && safe_assignment_allowed?
|
32
|
+
control_op_condition(cond) do |first_child|
|
33
|
+
return if modifier_op?(first_child)
|
34
|
+
return if parens_required?(node.children.first)
|
35
|
+
return if safe_assignment?(cond) && safe_assignment_allowed?
|
36
36
|
|
37
|
-
|
37
|
+
add_offense(cond)
|
38
|
+
end
|
38
39
|
end
|
39
40
|
|
40
41
|
def modifier_op?(node)
|
@@ -46,7 +47,7 @@ module RuboCop
|
|
46
47
|
end
|
47
48
|
|
48
49
|
def message(node)
|
49
|
-
kw = node.keyword
|
50
|
+
kw = node.parent.keyword
|
50
51
|
article = kw == 'while' ? 'a' : 'an'
|
51
52
|
"Don't use parentheses around the condition of #{article} `#{kw}`."
|
52
53
|
end
|
@@ -25,7 +25,7 @@ module RuboCop
|
|
25
25
|
# i.e., if the string would become dynamic or has special characters.
|
26
26
|
return if node.children != parse(corrected(node.source)).ast.children
|
27
27
|
|
28
|
-
add_offense(node, :begin
|
28
|
+
add_offense(node, :begin)
|
29
29
|
end
|
30
30
|
|
31
31
|
def correct_literal_style?(node)
|
@@ -33,7 +33,7 @@ module RuboCop
|
|
33
33
|
style == :upper_case_q && type(node) == '%Q'
|
34
34
|
end
|
35
35
|
|
36
|
-
def message
|
36
|
+
def message(_node)
|
37
37
|
style == :lower_case_q ? LOWER_CASE_Q_MSG : UPPER_CASE_Q_MSG
|
38
38
|
end
|
39
39
|
|