rubocop 0.93.0 → 0.93.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/config/default.yml +7 -9
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +6 -3
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +44 -11
- data/lib/rubocop/cop/metrics/class_length.rb +9 -3
- data/lib/rubocop/cop/style/class_equality_comparison.rb +19 -4
- data/lib/rubocop/cop/style/redundant_begin.rb +14 -4
- data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8ce11205d6a6bb518654cbe498544aa799fbb8d9c9057afd2f551edfc35bbb8
|
4
|
+
data.tar.gz: a1f79001991b28508ca7c9a79d75ed58f39ae0dcf2bad419d6a75919b3a3d539
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a32001a91575c41b5ca71b6a148af79f45b2a7b8cbc3909a0dcbb7a652f5e62b6a79a84c14189eda64fd3d2a9e8c40d207c37c0f5a78a156e1f636c5191b995e
|
7
|
+
data.tar.gz: 9ac5df57938099031807a96bd87a7fb9c5f7f40c314528b4c3254edb45b1386ce199fa9c394c9e7531655d117df9d3d5215bd66e4a927b9b2b0878e0eac2a1f6
|
data/README.md
CHANGED
@@ -49,7 +49,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
|
|
49
49
|
might want to use a conservative version lock in your `Gemfile`:
|
50
50
|
|
51
51
|
```rb
|
52
|
-
gem 'rubocop', '~> 0.93.
|
52
|
+
gem 'rubocop', '~> 0.93.1', require: false
|
53
53
|
```
|
54
54
|
|
55
55
|
## Quickstart
|
data/config/default.yml
CHANGED
@@ -1757,16 +1757,14 @@ Lint/RedundantSafeNavigation:
|
|
1757
1757
|
Description: 'Checks for redundant safe navigation calls.'
|
1758
1758
|
Enabled: pending
|
1759
1759
|
VersionAdded: '0.93'
|
1760
|
+
AllowedMethods:
|
1761
|
+
- instance_of?
|
1762
|
+
- kind_of?
|
1763
|
+
- is_a?
|
1764
|
+
- eql?
|
1765
|
+
- respond_to?
|
1766
|
+
- equal?
|
1760
1767
|
Safe: false
|
1761
|
-
IgnoredMethods:
|
1762
|
-
- to_c
|
1763
|
-
- to_f
|
1764
|
-
- to_i
|
1765
|
-
- to_r
|
1766
|
-
- rationalize
|
1767
|
-
- public_send
|
1768
|
-
- send
|
1769
|
-
- __send__
|
1770
1768
|
|
1771
1769
|
Lint/RedundantSplatExpansion:
|
1772
1770
|
Description: 'Checks for splat unnecessarily being called on literals.'
|
@@ -53,15 +53,18 @@ module RuboCop
|
|
53
53
|
def find_offense_node(node, regexp_receiver)
|
54
54
|
return node unless node.parent
|
55
55
|
|
56
|
-
if node.parent.send_type? || method_chain_to_regexp_receiver?(node)
|
56
|
+
if node.parent.send_type? || method_chain_to_regexp_receiver?(node, regexp_receiver)
|
57
57
|
node = find_offense_node(node.parent, regexp_receiver)
|
58
58
|
end
|
59
59
|
|
60
60
|
node
|
61
61
|
end
|
62
62
|
|
63
|
-
def method_chain_to_regexp_receiver?(node)
|
64
|
-
|
63
|
+
def method_chain_to_regexp_receiver?(node, regexp_receiver)
|
64
|
+
return false unless (parent = node.parent)
|
65
|
+
return false unless (parent_receiver = parent.receiver)
|
66
|
+
|
67
|
+
parent.parent && parent_receiver.receiver == regexp_receiver
|
65
68
|
end
|
66
69
|
end
|
67
70
|
end
|
@@ -4,29 +4,52 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
module Lint
|
6
6
|
# This cop checks for redundant safe navigation calls.
|
7
|
-
#
|
8
|
-
#
|
7
|
+
# `instance_of?`, `kind_of?`, `is_a?`, `eql?`, `respond_to?`, and `equal?` methods
|
8
|
+
# are checked by default. These are customizable with `AllowedMethods` option.
|
9
|
+
#
|
10
|
+
# This cop is marked as unsafe, because auto-correction can change the
|
11
|
+
# return type of the expression. An offending expression that previously
|
12
|
+
# could return `nil` will be auto-corrected to never return `nil`.
|
13
|
+
#
|
14
|
+
# In the example below, the safe navigation operator (`&.`) is unnecessary
|
15
|
+
# because `NilClass` has methods like `respond_to?` and `is_a?`.
|
9
16
|
#
|
10
17
|
# @example
|
11
18
|
# # bad
|
12
|
-
# attrs&.respond_to?(:[])
|
13
|
-
#
|
19
|
+
# do_something if attrs&.respond_to?(:[])
|
20
|
+
#
|
21
|
+
# # good
|
22
|
+
# do_something if attrs.respond_to?(:[])
|
23
|
+
#
|
24
|
+
# # bad
|
25
|
+
# while node&.is_a?(BeginNode)
|
26
|
+
# node = node.parent
|
27
|
+
# end
|
14
28
|
#
|
15
29
|
# # good
|
16
|
-
#
|
17
|
-
#
|
30
|
+
# while node.is_a?(BeginNode)
|
31
|
+
# node = node.parent
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# # good - without `&.` this will always return `true`
|
35
|
+
# foo&.respond_to?(:to_a)
|
18
36
|
#
|
19
37
|
class RedundantSafeNavigation < Base
|
20
|
-
include
|
38
|
+
include AllowedMethods
|
21
39
|
include RangeHelp
|
22
40
|
extend AutoCorrector
|
23
41
|
|
24
42
|
MSG = 'Redundant safe navigation detected.'
|
25
43
|
|
26
|
-
|
44
|
+
NIL_SPECIFIC_METHODS = (nil.methods - Object.new.methods).to_set.freeze
|
45
|
+
|
46
|
+
def_node_matcher :respond_to_nil_specific_method?, <<~PATTERN
|
47
|
+
(csend _ :respond_to? (sym %NIL_SPECIFIC_METHODS))
|
48
|
+
PATTERN
|
27
49
|
|
28
50
|
def on_csend(node)
|
29
|
-
return unless
|
51
|
+
return unless check?(node) && allowed_method?(node.method_name)
|
52
|
+
return if respond_to_nil_specific_method?(node)
|
30
53
|
|
31
54
|
range = range_between(node.loc.dot.begin_pos, node.source_range.end_pos)
|
32
55
|
add_offense(range) do |corrector|
|
@@ -36,8 +59,18 @@ module RuboCop
|
|
36
59
|
|
37
60
|
private
|
38
61
|
|
39
|
-
def
|
40
|
-
|
62
|
+
def check?(node)
|
63
|
+
parent = node.parent
|
64
|
+
return false unless parent
|
65
|
+
|
66
|
+
condition?(parent, node) ||
|
67
|
+
parent.and_type? ||
|
68
|
+
parent.or_type? ||
|
69
|
+
(parent.send_type? && parent.negation_method?)
|
70
|
+
end
|
71
|
+
|
72
|
+
def condition?(parent, node)
|
73
|
+
(parent.conditional? || parent.post_condition_loop?) && parent.condition == node
|
41
74
|
end
|
42
75
|
end
|
43
76
|
end
|
@@ -39,13 +39,19 @@ module RuboCop
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def on_casgn(node)
|
42
|
-
|
43
|
-
|
42
|
+
parent = node.parent
|
43
|
+
|
44
|
+
if parent&.assignment?
|
45
|
+
block_node = parent.children[1]
|
46
|
+
elsif parent&.parent&.masgn_type?
|
47
|
+
block_node = parent.parent.children[1]
|
44
48
|
else
|
45
49
|
_scope, _name, block_node = *node
|
46
50
|
end
|
47
51
|
|
48
|
-
|
52
|
+
return unless block_node.respond_to?(:class_definition?) && block_node.class_definition?
|
53
|
+
|
54
|
+
check_code_length(block_node)
|
49
55
|
end
|
50
56
|
|
51
57
|
private
|
@@ -21,7 +21,7 @@ module RuboCop
|
|
21
21
|
include IgnoredMethods
|
22
22
|
extend AutoCorrector
|
23
23
|
|
24
|
-
MSG = 'Use `
|
24
|
+
MSG = 'Use `instance_of?(%<class_name>s)` instead of comparing classes.'
|
25
25
|
|
26
26
|
RESTRICT_ON_SEND = %i[== equal? eql?].freeze
|
27
27
|
|
@@ -36,13 +36,28 @@ module RuboCop
|
|
36
36
|
return if def_node && ignored_method?(def_node.method_name)
|
37
37
|
|
38
38
|
class_comparison_candidate?(node) do |receiver_node, class_node|
|
39
|
-
range =
|
39
|
+
range = offense_range(receiver_node, node)
|
40
|
+
class_name = class_name(class_node, node)
|
40
41
|
|
41
|
-
add_offense(range) do |corrector|
|
42
|
-
corrector.replace(range, "instance_of?(#{
|
42
|
+
add_offense(range, message: format(MSG, class_name: class_name)) do |corrector|
|
43
|
+
corrector.replace(range, "instance_of?(#{class_name})")
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def class_name(class_node, node)
|
51
|
+
if node.children.first.method?(:name)
|
52
|
+
class_node.source.delete('"').delete("'")
|
53
|
+
else
|
54
|
+
class_node.source
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def offense_range(receiver_node, node)
|
59
|
+
range_between(receiver_node.loc.selector.begin_pos, node.source_range.end_pos)
|
60
|
+
end
|
46
61
|
end
|
47
62
|
end
|
48
63
|
end
|
@@ -85,10 +85,7 @@ module RuboCop
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def on_kwbegin(node)
|
88
|
-
return if node
|
89
|
-
|
90
|
-
first_child = node.children.first
|
91
|
-
return if first_child.rescue_type? || first_child.ensure_type?
|
88
|
+
return if contain_rescue_or_ensure?(node) || valid_context_using_only_begin?(node)
|
92
89
|
|
93
90
|
register_offense(node)
|
94
91
|
end
|
@@ -101,6 +98,19 @@ module RuboCop
|
|
101
98
|
corrector.remove(node.loc.end)
|
102
99
|
end
|
103
100
|
end
|
101
|
+
|
102
|
+
def contain_rescue_or_ensure?(node)
|
103
|
+
first_child = node.children.first
|
104
|
+
|
105
|
+
first_child.rescue_type? || first_child.ensure_type?
|
106
|
+
end
|
107
|
+
|
108
|
+
def valid_context_using_only_begin?(node)
|
109
|
+
parent = node.parent
|
110
|
+
|
111
|
+
node.each_ancestor.any?(&:assignment?) || parent&.post_condition_loop? ||
|
112
|
+
parent&.send_type? || parent&.operator_keyword?
|
113
|
+
end
|
104
114
|
end
|
105
115
|
end
|
106
116
|
end
|
data/lib/rubocop/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.93.
|
4
|
+
version: 0.93.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2020-10-
|
13
|
+
date: 2020-10-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: parallel
|
@@ -822,7 +822,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
822
822
|
- !ruby/object:Gem::Version
|
823
823
|
version: '0'
|
824
824
|
requirements: []
|
825
|
-
rubygems_version: 3.1.
|
825
|
+
rubygems_version: 3.1.4
|
826
826
|
signing_key:
|
827
827
|
specification_version: 4
|
828
828
|
summary: Automatic Ruby code style checking tool.
|