rubocop-rails 2.15.0 → 2.15.2
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/config/default.yml +2 -1
- data/lib/rubocop/cop/rails/delegate.rb +4 -9
- data/lib/rubocop/cop/rails/deprecated_active_model_errors_methods.rb +3 -1
- data/lib/rubocop/cop/rails/dot_separated_keys.rb +1 -1
- data/lib/rubocop/cop/rails/enum_hash.rb +1 -2
- data/lib/rubocop/cop/rails/expanded_date_range.rb +38 -22
- data/lib/rubocop/cop/rails/order_by_id.rb +1 -2
- data/lib/rubocop/cop/rails/strip_heredoc.rb +1 -1
- data/lib/rubocop/cop/rails/time_zone_assignment.rb +2 -2
- data/lib/rubocop/cop/rails/to_formatted_s.rb +1 -0
- data/lib/rubocop/cop/rails/transaction_exit_statement.rb +1 -1
- data/lib/rubocop/cop/rails/unique_validation_without_index.rb +2 -2
- data/lib/rubocop/rails/schema_loader/schema.rb +5 -5
- data/lib/rubocop/rails/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: 169ed04b1f5378e9e08fbffdca151afaf4b84fd54b1867a173740aadaede60b3
|
4
|
+
data.tar.gz: 1a2ac75c313cfcdeec1814d7e3aff4777c5013527d2cf4a2aa4f95aeb45446bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51d495edd3e825db49ece8f51bfc118c73887681f414b86d31cd47d85dc5a1a22a385a2a17ed4ebf7d1c6332989795e2cde999a364d911c60f452993dc926c4b
|
7
|
+
data.tar.gz: 4546785b39af93e6c7fe5a6a3b637fa5c21d4b358c38ea8ad3ebd5c272d1d0a504e8206e8201cfe3771af9199c336649d033e32b324f16b06fc7d150054dc488
|
data/config/default.yml
CHANGED
@@ -160,7 +160,7 @@ Rails/AttributeDefaultBlockValue:
|
|
160
160
|
Enabled: pending
|
161
161
|
VersionAdded: '2.9'
|
162
162
|
Include:
|
163
|
-
- 'models/**/*'
|
163
|
+
- 'app/models/**/*'
|
164
164
|
|
165
165
|
Rails/BelongsTo:
|
166
166
|
Description: >-
|
@@ -367,6 +367,7 @@ Rails/Exit:
|
|
367
367
|
|
368
368
|
Rails/ExpandedDateRange:
|
369
369
|
Description: 'Checks for expanded date range.'
|
370
|
+
StyleGuide: 'https://rails.rubystyle.guide/#date-time-range'
|
370
371
|
Enabled: pending
|
371
372
|
VersionAdded: '2.11'
|
372
373
|
|
@@ -54,6 +54,7 @@ module RuboCop
|
|
54
54
|
# delegate :bar, to: :foo, prefix: true
|
55
55
|
class Delegate < Base
|
56
56
|
extend AutoCorrector
|
57
|
+
include VisibilityHelp
|
57
58
|
|
58
59
|
MSG = 'Use `delegate` to define delegations.'
|
59
60
|
|
@@ -112,17 +113,11 @@ module RuboCop
|
|
112
113
|
end
|
113
114
|
|
114
115
|
def private_or_protected_delegation(node)
|
115
|
-
|
116
|
-
private_or_protected_before(line) ||
|
117
|
-
private_or_protected_inline(line)
|
116
|
+
private_or_protected_inline(node) || node_visibility(node) != :public
|
118
117
|
end
|
119
118
|
|
120
|
-
def
|
121
|
-
|
122
|
-
end
|
123
|
-
|
124
|
-
def private_or_protected_inline(line)
|
125
|
-
processed_source[line - 1].strip.match?(/\A(private )|(protected )/)
|
119
|
+
def private_or_protected_inline(node)
|
120
|
+
processed_source[node.first_line - 1].strip.match?(/\A(private )|(protected )/)
|
126
121
|
end
|
127
122
|
end
|
128
123
|
end
|
@@ -106,6 +106,8 @@ module RuboCop
|
|
106
106
|
|
107
107
|
def on_send(node)
|
108
108
|
any_manipulation?(node) do
|
109
|
+
next if node.method?(:keys) && target_rails_version <= 6.0
|
110
|
+
|
109
111
|
add_offense(node) do |corrector|
|
110
112
|
next unless AUTOCORECTABLE_METHODS.include?(node.method_name)
|
111
113
|
|
@@ -119,7 +121,7 @@ module RuboCop
|
|
119
121
|
def autocorrect(corrector, node)
|
120
122
|
receiver = node.receiver
|
121
123
|
|
122
|
-
if receiver.receiver.method?(:messages)
|
124
|
+
if receiver.receiver.send_type? && receiver.receiver.method?(:messages)
|
123
125
|
corrector.remove(receiver.receiver.loc.dot)
|
124
126
|
corrector.remove(receiver.receiver.loc.selector)
|
125
127
|
end
|
@@ -20,8 +20,7 @@ module RuboCop
|
|
20
20
|
class EnumHash < Base
|
21
21
|
extend AutoCorrector
|
22
22
|
|
23
|
-
MSG = 'Enum defined as an array found in `%<enum>s` enum declaration. '
|
24
|
-
'Use hash syntax instead.'
|
23
|
+
MSG = 'Enum defined as an array found in `%<enum>s` enum declaration. Use hash syntax instead.'
|
25
24
|
RESTRICT_ON_SEND = %i[enum].freeze
|
26
25
|
|
27
26
|
def_node_matcher :enum?, <<~PATTERN
|
@@ -29,14 +29,6 @@ module RuboCop
|
|
29
29
|
|
30
30
|
minimum_target_rails_version 5.1
|
31
31
|
|
32
|
-
def_node_matcher :expanded_date_range, <<~PATTERN
|
33
|
-
(irange
|
34
|
-
(send
|
35
|
-
$_ {:beginning_of_day :beginning_of_week :beginning_of_month :beginning_of_quarter :beginning_of_year})
|
36
|
-
(send
|
37
|
-
$_ {:end_of_day :end_of_week :end_of_month :end_of_quarter :end_of_year}))
|
38
|
-
PATTERN
|
39
|
-
|
40
32
|
PREFERRED_METHODS = {
|
41
33
|
beginning_of_day: 'all_day',
|
42
34
|
beginning_of_week: 'all_week',
|
@@ -54,31 +46,55 @@ module RuboCop
|
|
54
46
|
}.freeze
|
55
47
|
|
56
48
|
def on_irange(node)
|
57
|
-
return unless expanded_date_range(node)
|
58
|
-
|
59
49
|
begin_node = node.begin
|
60
50
|
end_node = node.end
|
61
|
-
return
|
62
|
-
|
63
|
-
beginning_method = begin_node.method_name
|
64
|
-
end_method = end_node.method_name
|
65
|
-
return unless use_mapped_methods?(beginning_method, end_method)
|
51
|
+
return if allow?(begin_node, end_node)
|
66
52
|
|
67
|
-
preferred_method =
|
53
|
+
preferred_method = preferred_method(begin_node)
|
54
|
+
if begin_node.method?(:beginning_of_week) && begin_node.arguments.one?
|
55
|
+
return unless same_argument?(begin_node, end_node)
|
68
56
|
|
69
|
-
|
70
|
-
|
57
|
+
preferred_method << "(#{begin_node.first_argument.source})"
|
58
|
+
elsif any_arguments?(begin_node, end_node)
|
59
|
+
return
|
71
60
|
end
|
61
|
+
|
62
|
+
register_offense(node, preferred_method)
|
72
63
|
end
|
73
64
|
|
74
65
|
private
|
75
66
|
|
76
|
-
def
|
77
|
-
|
67
|
+
def allow?(begin_node, end_node)
|
68
|
+
return true unless (begin_source = receiver_source(begin_node))
|
69
|
+
return true unless (end_source = receiver_source(end_node))
|
70
|
+
|
71
|
+
begin_source != end_source || MAPPED_DATE_RANGE_METHODS[begin_node.method_name] != end_node.method_name
|
72
|
+
end
|
73
|
+
|
74
|
+
def receiver_source(node)
|
75
|
+
return if !node&.send_type? || node.receiver.nil?
|
76
|
+
|
77
|
+
node.receiver.source
|
78
78
|
end
|
79
79
|
|
80
|
-
def
|
81
|
-
|
80
|
+
def same_argument?(begin_node, end_node)
|
81
|
+
begin_node.first_argument.source == end_node.first_argument.source
|
82
|
+
end
|
83
|
+
|
84
|
+
def preferred_method(begin_node)
|
85
|
+
+"#{begin_node.receiver.source}.#{PREFERRED_METHODS[begin_node.method_name]}"
|
86
|
+
end
|
87
|
+
|
88
|
+
def any_arguments?(begin_node, end_node)
|
89
|
+
begin_node.arguments.any? || end_node.arguments.any?
|
90
|
+
end
|
91
|
+
|
92
|
+
def register_offense(node, preferred_method)
|
93
|
+
message = format(MSG, preferred_method: preferred_method)
|
94
|
+
|
95
|
+
add_offense(node, message: message) do |corrector|
|
96
|
+
corrector.replace(node, preferred_method)
|
97
|
+
end
|
82
98
|
end
|
83
99
|
end
|
84
100
|
end
|
@@ -23,8 +23,7 @@ module RuboCop
|
|
23
23
|
class OrderById < Base
|
24
24
|
include RangeHelp
|
25
25
|
|
26
|
-
MSG = 'Do not use the `id` column for ordering. '
|
27
|
-
'Use a timestamp column to order chronologically.'
|
26
|
+
MSG = 'Do not use the `id` column for ordering. Use a timestamp column to order chronologically.'
|
28
27
|
RESTRICT_ON_SEND = %i[order].freeze
|
29
28
|
|
30
29
|
def_node_matcher :order_by_id?, <<~PATTERN
|
@@ -43,7 +43,7 @@ module RuboCop
|
|
43
43
|
|
44
44
|
def register_offense(node, heredoc)
|
45
45
|
add_offense(node) do |corrector|
|
46
|
-
squiggly_heredoc = heredoc.source.sub(/\A
|
46
|
+
squiggly_heredoc = heredoc.source.sub(/\A<<(-|~)?/, '<<~')
|
47
47
|
|
48
48
|
corrector.replace(heredoc, squiggly_heredoc)
|
49
49
|
corrector.remove(node.loc.dot)
|
@@ -22,12 +22,12 @@ module RuboCop
|
|
22
22
|
MSG = 'Use `Time.use_zone` with block instead of `Time.zone=`.'
|
23
23
|
RESTRICT_ON_SEND = %i[zone=].freeze
|
24
24
|
|
25
|
-
def_node_matcher :
|
25
|
+
def_node_matcher :time_zone_assignment?, <<~PATTERN
|
26
26
|
(send (const nil? :Time) :zone= ...)
|
27
27
|
PATTERN
|
28
28
|
|
29
29
|
def on_send(node)
|
30
|
-
return unless
|
30
|
+
return unless time_zone_assignment?(node)
|
31
31
|
|
32
32
|
add_offense(node)
|
33
33
|
end
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
6
6
|
# Checks for the use of exit statements (namely `return`,
|
7
7
|
# `break` and `throw`) in transactions. This is due to the eventual
|
8
8
|
# unexpected behavior when using ActiveRecord >= 7, where transactions
|
9
|
-
#
|
9
|
+
# exited using these statements are being rollbacked rather than
|
10
10
|
# committed (pre ActiveRecord 7 behavior).
|
11
11
|
#
|
12
12
|
# As alternatives, it would be more intuitive to explicitly raise an
|
@@ -56,9 +56,9 @@ module RuboCop
|
|
56
56
|
|
57
57
|
def with_index?(klass, table, names)
|
58
58
|
# Compatibility for Rails 4.2.
|
59
|
-
|
59
|
+
add_indices = schema.add_indices_by(table_name: table_name(klass))
|
60
60
|
|
61
|
-
(table.indices +
|
61
|
+
(table.indices + add_indices).any? do |index|
|
62
62
|
index.unique &&
|
63
63
|
(index.columns.to_set == names ||
|
64
64
|
include_column_names_in_expression_index?(index, names))
|
@@ -5,11 +5,11 @@ module RuboCop
|
|
5
5
|
module SchemaLoader
|
6
6
|
# Represent db/schema.rb
|
7
7
|
class Schema
|
8
|
-
attr_reader :tables, :
|
8
|
+
attr_reader :tables, :add_indices
|
9
9
|
|
10
10
|
def initialize(ast)
|
11
11
|
@tables = []
|
12
|
-
@
|
12
|
+
@add_indices = []
|
13
13
|
|
14
14
|
build!(ast)
|
15
15
|
end
|
@@ -20,8 +20,8 @@ module RuboCop
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
24
|
-
|
23
|
+
def add_indices_by(table_name:)
|
24
|
+
add_indices.select do |add_index|
|
25
25
|
add_index.table_name == table_name
|
26
26
|
end
|
27
27
|
end
|
@@ -39,7 +39,7 @@ module RuboCop
|
|
39
39
|
|
40
40
|
# Compatibility for Rails 4.2.
|
41
41
|
each_add_index(ast) do |add_index_def|
|
42
|
-
@
|
42
|
+
@add_indices << AddIndex.new(add_index_def)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.15.
|
4
|
+
version: 2.15.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-07-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -227,7 +227,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
227
227
|
- !ruby/object:Gem::Version
|
228
228
|
version: '0'
|
229
229
|
requirements: []
|
230
|
-
rubygems_version: 3.
|
230
|
+
rubygems_version: 3.1.6
|
231
231
|
signing_key:
|
232
232
|
specification_version: 4
|
233
233
|
summary: Automatic Rails code style checking tool.
|