rubocop-rails 2.16.0 → 2.16.1
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 531a7f7b4bc04b877c25047dc10ee38e10804ad233b5b2abd425b613d508f0b5
|
4
|
+
data.tar.gz: 135eaa3b4ab1c2393f8ab72cd961470c713552d2d6300bd2ea0f981831ea5cba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab99c18ad7f0684d03945b48393cadecd20f465ade8f27a9876b874210e2b930300ce5b08d7e6b8d654595bca67ae321b6afef88c05843ddd79ff47cf1b80708
|
7
|
+
data.tar.gz: 879fd14dfff79cd8afe60e9f6678d66f61eefe8b91cdbe36c92cbb31541f6735b59d5dc33a8c21f8330dac60f359c4e46ad59f43b259d81ea25c366d3f26ca50
|
data/config/default.yml
CHANGED
@@ -43,10 +43,15 @@ module RuboCop
|
|
43
43
|
PATTERN
|
44
44
|
|
45
45
|
def on_send(node)
|
46
|
-
child_node, method_name = *node.first_argument.children
|
46
|
+
child_node, method_name, time_argument = *node.first_argument.children
|
47
|
+
return if time_argument || !child_node
|
47
48
|
return unless current_time?(child_node, method_name) || current_time_with_convert?(child_node, method_name)
|
48
49
|
|
49
|
-
add_offense(node)
|
50
|
+
add_offense(node) do |corrector|
|
51
|
+
last_argument = node.last_argument
|
52
|
+
freeze_time_method = last_argument.block_pass_type? ? "freeze_time(#{last_argument.source})" : 'freeze_time'
|
53
|
+
corrector.replace(node, freeze_time_method)
|
54
|
+
end
|
50
55
|
end
|
51
56
|
|
52
57
|
private
|
@@ -11,6 +11,10 @@ module RuboCop
|
|
11
11
|
# This cop works best when used together with
|
12
12
|
# `Style/FileRead`, `Style/FileWrite` and `Rails/RootJoinChain`.
|
13
13
|
#
|
14
|
+
# @safety
|
15
|
+
# This cop is unsafe for autocorrection because `Dir`'s `children`, `each_child`, `entries`, and `glob`
|
16
|
+
# methods return string element, but these methods of `Pathname` return `Pathname` element.
|
17
|
+
#
|
14
18
|
# @example
|
15
19
|
# # bad
|
16
20
|
# File.open(Rails.root.join('db', 'schema.rb'))
|
@@ -30,6 +34,7 @@ module RuboCop
|
|
30
34
|
#
|
31
35
|
class RootPathnameMethods < Base
|
32
36
|
extend AutoCorrector
|
37
|
+
include RangeHelp
|
33
38
|
|
34
39
|
MSG = '`%<rails_root>s` is a `Pathname` so you can just append `#%<method>s`.'
|
35
40
|
|
@@ -138,6 +143,11 @@ module RuboCop
|
|
138
143
|
}
|
139
144
|
PATTERN
|
140
145
|
|
146
|
+
def_node_matcher :dir_glob?, <<~PATTERN
|
147
|
+
(send
|
148
|
+
(const {cbase nil?} :Dir) :glob ...)
|
149
|
+
PATTERN
|
150
|
+
|
141
151
|
def_node_matcher :rails_root_pathname?, <<~PATTERN
|
142
152
|
{
|
143
153
|
$#rails_root?
|
@@ -153,8 +163,12 @@ module RuboCop
|
|
153
163
|
def on_send(node)
|
154
164
|
evidence(node) do |method, path, args, rails_root|
|
155
165
|
add_offense(node, message: format(MSG, method: method, rails_root: rails_root.source)) do |corrector|
|
156
|
-
|
157
|
-
|
166
|
+
if dir_glob?(node)
|
167
|
+
replacement = build_path_glob(path, method)
|
168
|
+
else
|
169
|
+
replacement = "#{path.source}.#{method}"
|
170
|
+
replacement += "(#{args.map(&:source).join(', ')})" unless args.empty?
|
171
|
+
end
|
158
172
|
|
159
173
|
corrector.replace(node, replacement)
|
160
174
|
end
|
@@ -169,6 +183,31 @@ module RuboCop
|
|
169
183
|
|
170
184
|
yield(method, path, args, rails_root)
|
171
185
|
end
|
186
|
+
|
187
|
+
def build_path_glob(path, method)
|
188
|
+
receiver = range_between(path.loc.expression.begin_pos, path.children.first.loc.selector.end_pos).source
|
189
|
+
|
190
|
+
argument = if path.arguments.one?
|
191
|
+
path.first_argument.source
|
192
|
+
else
|
193
|
+
join_arguments(path.arguments)
|
194
|
+
end
|
195
|
+
|
196
|
+
"#{receiver}.#{method}(#{argument})"
|
197
|
+
end
|
198
|
+
|
199
|
+
def include_interpolation?(arguments)
|
200
|
+
arguments.any? do |argument|
|
201
|
+
argument.children.any? { |child| child.respond_to?(:begin_type?) && child.begin_type? }
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def join_arguments(arguments)
|
206
|
+
quote = include_interpolation?(arguments) ? '"' : "'"
|
207
|
+
joined_arguments = arguments.map(&:value).join('/')
|
208
|
+
|
209
|
+
"#{quote}#{joined_arguments}#{quote}"
|
210
|
+
end
|
172
211
|
end
|
173
212
|
end
|
174
213
|
end
|
@@ -31,6 +31,7 @@ module RuboCop
|
|
31
31
|
# @param [RuboCop::AST::ConstNode] node
|
32
32
|
def on_const(node)
|
33
33
|
return unless top_level_hash_with_indifferent_access?(node)
|
34
|
+
return if node.parent&.class_type? && node.parent.ancestors.any?(&:module_type?)
|
34
35
|
|
35
36
|
add_offense(node) do |corrector|
|
36
37
|
autocorrect(corrector, node)
|
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.16.
|
4
|
+
version: 2.16.1
|
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-09-
|
13
|
+
date: 2022-09-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|