rubocop-rails 2.19.1 → 2.21.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/README.md +3 -1
- data/config/default.yml +86 -12
- data/lib/rubocop/cop/mixin/index_method.rb +2 -2
- data/lib/rubocop/cop/rails/action_controller_flash_before_render.rb +1 -1
- data/lib/rubocop/cop/rails/action_controller_test_case.rb +2 -2
- data/lib/rubocop/cop/rails/assert_not.rb +0 -1
- data/lib/rubocop/cop/rails/bulk_change_table.rb +20 -3
- data/lib/rubocop/cop/rails/dangerous_column_names.rb +439 -0
- data/lib/rubocop/cop/rails/date.rb +12 -3
- data/lib/rubocop/cop/rails/duplicate_association.rb +3 -0
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +3 -3
- data/lib/rubocop/cop/rails/file_path.rb +129 -13
- data/lib/rubocop/cop/rails/find_each.rb +1 -1
- data/lib/rubocop/cop/rails/freeze_time.rb +1 -1
- data/lib/rubocop/cop/rails/http_status.rb +4 -3
- data/lib/rubocop/cop/rails/i18n_lazy_lookup.rb +63 -13
- data/lib/rubocop/cop/rails/i18n_locale_texts.rb +5 -1
- data/lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb +22 -2
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +9 -10
- data/lib/rubocop/cop/rails/not_null_column.rb +1 -1
- data/lib/rubocop/cop/rails/rake_environment.rb +20 -4
- data/lib/rubocop/cop/rails/redundant_active_record_all_method.rb +168 -0
- data/lib/rubocop/cop/rails/refute_methods.rb +0 -1
- data/lib/rubocop/cop/rails/reversible_migration.rb +1 -1
- data/lib/rubocop/cop/rails/root_pathname_methods.rb +38 -4
- data/lib/rubocop/cop/rails/save_bang.rb +2 -2
- data/lib/rubocop/cop/rails/schema_comment.rb +16 -10
- data/lib/rubocop/cop/rails/select_map.rb +78 -0
- data/lib/rubocop/cop/rails/squished_sql_heredocs.rb +0 -1
- data/lib/rubocop/cop/rails/three_state_boolean_column.rb +2 -4
- data/lib/rubocop/cop/rails/time_zone.rb +12 -5
- data/lib/rubocop/cop/rails/transaction_exit_statement.rb +35 -9
- data/lib/rubocop/cop/rails/unique_validation_without_index.rb +15 -19
- data/lib/rubocop/cop/rails/unused_render_content.rb +67 -0
- data/lib/rubocop/cop/rails/where_exists.rb +0 -1
- data/lib/rubocop/cop/rails_cops.rb +4 -0
- data/lib/rubocop/rails/schema_loader/schema.rb +4 -4
- data/lib/rubocop/rails/schema_loader.rb +1 -1
- data/lib/rubocop/rails/version.rb +1 -1
- data/lib/rubocop-rails.rb +8 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e154e69d10b43226db08e454d992d724dc7504d54cac804e597156ee5cf13e5
|
4
|
+
data.tar.gz: 60d4697e076620a134f48eff2f81be7b2004fd824796b1a1b15f5822239e3ce3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0aa0f69a7aa3b90d1e402ab26bdf5a4d03680080d9b06ba157cd92f3c5c290f821e81d4a99636009e17ec4ea2de0cfd405cea00134ebccd4323d424fb790ec8
|
7
|
+
data.tar.gz: 6b6ddbe47c1b112638cc3693464d9509f589a6683317b0bb30925a27788e39351a3a10853ecf286b419d3ec3b17e13aee9fd09ae07581d209635f0a56a44065b
|
data/README.md
CHANGED
@@ -72,7 +72,9 @@ module YourCoolApp
|
|
72
72
|
class Application < Rails::Application
|
73
73
|
config.generators.after_generate do |files|
|
74
74
|
parsable_files = files.filter { |file| file.end_with?('.rb') }
|
75
|
-
|
75
|
+
unless parsable_files.empty?
|
76
|
+
system("bundle exec rubocop -A --fail-level=E #{parsable_files.shelljoin}", exception: true)
|
77
|
+
end
|
76
78
|
end
|
77
79
|
end
|
78
80
|
end
|
data/config/default.yml
CHANGED
@@ -6,6 +6,7 @@ inherit_mode:
|
|
6
6
|
|
7
7
|
AllCops:
|
8
8
|
Exclude:
|
9
|
+
- app/assets/**/*
|
9
10
|
- bin/*
|
10
11
|
# Exclude db/schema.rb and db/[CONFIGURATION_NAMESPACE]_schema.rb by default.
|
11
12
|
# See: https://guides.rubyonrails.org/active_record_multiple_databases.html#setting-up-your-application
|
@@ -47,6 +48,31 @@ Lint/NumberConversion:
|
|
47
48
|
- in_milliseconds
|
48
49
|
AllowedPatterns: []
|
49
50
|
|
51
|
+
Lint/RedundantSafeNavigation:
|
52
|
+
# Add `presence` and `present?` methods to the default of the RuboCop core.
|
53
|
+
# https://github.com/rubocop/rubocop/blob/v1.51.0/config/default.yml#L2148-L2159
|
54
|
+
AllowedMethods:
|
55
|
+
- instance_of?
|
56
|
+
- kind_of?
|
57
|
+
- is_a?
|
58
|
+
- eql?
|
59
|
+
- respond_to?
|
60
|
+
- equal?
|
61
|
+
- presence
|
62
|
+
- present?
|
63
|
+
|
64
|
+
Lint/SafeNavigationChain:
|
65
|
+
# Add `presence_in` method to the default of the RuboCop core:
|
66
|
+
# https://github.com/rubocop/rubocop/blob/v1.56.0/config/default.yml#L2265-L2271
|
67
|
+
AllowedMethods:
|
68
|
+
- present?
|
69
|
+
- blank?
|
70
|
+
- presence
|
71
|
+
- presence_in
|
72
|
+
- try
|
73
|
+
- try!
|
74
|
+
- in?
|
75
|
+
|
50
76
|
Rails:
|
51
77
|
Enabled: true
|
52
78
|
DocumentationBaseURL: https://docs.rubocop.org/rubocop-rails
|
@@ -146,8 +172,9 @@ Rails/AddColumnIndex:
|
|
146
172
|
index might be used.
|
147
173
|
Enabled: pending
|
148
174
|
VersionAdded: '2.11'
|
175
|
+
VersionChanged: '2.20'
|
149
176
|
Include:
|
150
|
-
- db
|
177
|
+
- db/**/*.rb
|
151
178
|
|
152
179
|
Rails/AfterCommitOverride:
|
153
180
|
Description: >-
|
@@ -235,12 +262,13 @@ Rails/BulkChangeTable:
|
|
235
262
|
- https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/Table.html
|
236
263
|
Enabled: true
|
237
264
|
VersionAdded: '0.57'
|
265
|
+
VersionChanged: '2.20'
|
238
266
|
Database: null
|
239
267
|
SupportedDatabases:
|
240
268
|
- mysql
|
241
269
|
- postgresql
|
242
270
|
Include:
|
243
|
-
- db
|
271
|
+
- db/**/*.rb
|
244
272
|
|
245
273
|
Rails/CompactBlank:
|
246
274
|
Description: 'Checks if collection can be blank-compacted with `compact_blank`.'
|
@@ -270,18 +298,31 @@ Rails/CreateTableWithTimestamps:
|
|
270
298
|
when creating a new table.
|
271
299
|
Enabled: true
|
272
300
|
VersionAdded: '0.52'
|
301
|
+
VersionChanged: '2.20'
|
273
302
|
Include:
|
274
|
-
- db
|
303
|
+
- db/**/*.rb
|
275
304
|
Exclude:
|
276
305
|
# Respect the `active_storage_variant_records` table of `*_create_active_storage_tables.active_storage.rb`
|
306
|
+
# and `*_create_active_storage_variant_records.active_storage.rb`
|
277
307
|
# auto-generated by `bin/rails active_storage:install` even if `created_at` is not specified.
|
278
|
-
- db
|
308
|
+
- db/**/*_create_active_storage_tables.active_storage.rb
|
309
|
+
- db/**/*_create_active_storage_variant_records.active_storage.rb
|
310
|
+
|
311
|
+
Rails/DangerousColumnNames:
|
312
|
+
Description: >-
|
313
|
+
Avoid dangerous column names.
|
314
|
+
Enabled: pending
|
315
|
+
Severity: warning
|
316
|
+
VersionAdded: '2.21'
|
317
|
+
Include:
|
318
|
+
- 'db/**/*.rb'
|
279
319
|
|
280
320
|
Rails/Date:
|
281
321
|
Description: >-
|
282
322
|
Checks the correct usage of date aware methods,
|
283
323
|
such as Date.today, Date.current etc.
|
284
324
|
Enabled: true
|
325
|
+
SafeAutoCorrect: false
|
285
326
|
VersionAdded: '0.30'
|
286
327
|
VersionChanged: '2.11'
|
287
328
|
# The value `strict` disallows usage of `Date.today`, `Date.current`,
|
@@ -443,10 +484,8 @@ Rails/FindBy:
|
|
443
484
|
StyleGuide: 'https://rails.rubystyle.guide#find_by'
|
444
485
|
Enabled: true
|
445
486
|
VersionAdded: '0.30'
|
446
|
-
VersionChanged: '2.
|
487
|
+
VersionChanged: '2.21'
|
447
488
|
IgnoreWhereFirst: true
|
448
|
-
Include:
|
449
|
-
- app/models/**/*.rb
|
450
489
|
|
451
490
|
Rails/FindById:
|
452
491
|
Description: >-
|
@@ -462,9 +501,7 @@ Rails/FindEach:
|
|
462
501
|
Enabled: true
|
463
502
|
Safe: false
|
464
503
|
VersionAdded: '0.30'
|
465
|
-
VersionChanged: '2.
|
466
|
-
Include:
|
467
|
-
- app/models/**/*.rb
|
504
|
+
VersionChanged: '2.21'
|
468
505
|
AllowedMethods:
|
469
506
|
# Methods that don't work well with `find_each`.
|
470
507
|
- order
|
@@ -527,6 +564,10 @@ Rails/I18nLazyLookup:
|
|
527
564
|
Reference: 'https://guides.rubyonrails.org/i18n.html#lazy-lookup'
|
528
565
|
Enabled: pending
|
529
566
|
VersionAdded: '2.14'
|
567
|
+
EnforcedStyle: lazy
|
568
|
+
SupportedStyles:
|
569
|
+
- lazy
|
570
|
+
- explicit
|
530
571
|
Include:
|
531
572
|
- 'app/controllers/**/*.rb'
|
532
573
|
|
@@ -632,8 +673,9 @@ Rails/MigrationClassName:
|
|
632
673
|
Description: 'The class name of the migration should match its file name.'
|
633
674
|
Enabled: pending
|
634
675
|
VersionAdded: '2.14'
|
676
|
+
VersionChanged: '2.20'
|
635
677
|
Include:
|
636
|
-
- db
|
678
|
+
- db/**/*.rb
|
637
679
|
|
638
680
|
Rails/NegateInclude:
|
639
681
|
Description: 'Prefer `collection.exclude?(obj)` over `!collection.include?(obj)`.'
|
@@ -647,8 +689,9 @@ Rails/NotNullColumn:
|
|
647
689
|
Description: 'Do not add a NOT NULL column without a default value.'
|
648
690
|
Enabled: true
|
649
691
|
VersionAdded: '0.43'
|
692
|
+
VersionChanged: '2.20'
|
650
693
|
Include:
|
651
|
-
- db
|
694
|
+
- db/**/*.rb
|
652
695
|
|
653
696
|
Rails/OrderById:
|
654
697
|
Description: >-
|
@@ -753,6 +796,16 @@ Rails/ReadWriteAttribute:
|
|
753
796
|
Include:
|
754
797
|
- app/models/**/*.rb
|
755
798
|
|
799
|
+
Rails/RedundantActiveRecordAllMethod:
|
800
|
+
Description: Detect redundant `all` used as a receiver for Active Record query methods.
|
801
|
+
StyleGuide: 'https://rails.rubystyle.guide/#redundant-all'
|
802
|
+
Enabled: pending
|
803
|
+
Safe: false
|
804
|
+
AllowedReceivers:
|
805
|
+
- ActionMailer::Preview
|
806
|
+
- ActiveSupport::TimeZone
|
807
|
+
VersionAdded: '2.21'
|
808
|
+
|
756
809
|
Rails/RedundantAllowNil:
|
757
810
|
Description: >-
|
758
811
|
Finds redundant use of `allow_nil` when `allow_blank` is set to
|
@@ -933,6 +986,12 @@ Rails/ScopeArgs:
|
|
933
986
|
Include:
|
934
987
|
- app/models/**/*.rb
|
935
988
|
|
989
|
+
Rails/SelectMap:
|
990
|
+
Description: 'Checks for uses of `select(:column_name)` with `map(&:column_name)`.'
|
991
|
+
Enabled: pending
|
992
|
+
Safe: false
|
993
|
+
VersionAdded: '2.21'
|
994
|
+
|
936
995
|
Rails/ShortI18n:
|
937
996
|
Description: 'Use the short form of the I18n methods: `t` instead of `translate` and `l` instead of `localize`.'
|
938
997
|
StyleGuide: 'https://rails.rubystyle.guide/#short-i18n'
|
@@ -1061,6 +1120,7 @@ Rails/TransactionExitStatement:
|
|
1061
1120
|
- https://github.com/rails/rails/commit/15aa4200e083
|
1062
1121
|
Enabled: pending
|
1063
1122
|
VersionAdded: '2.14'
|
1123
|
+
TransactionMethods: []
|
1064
1124
|
|
1065
1125
|
Rails/UniqBeforePluck:
|
1066
1126
|
Description: 'Prefer the use of uniq or distinct before pluck.'
|
@@ -1098,6 +1158,12 @@ Rails/UnusedIgnoredColumns:
|
|
1098
1158
|
Include:
|
1099
1159
|
- app/models/**/*.rb
|
1100
1160
|
|
1161
|
+
Rails/UnusedRenderContent:
|
1162
|
+
Description: 'Do not specify body content for a response with a non-content status code.'
|
1163
|
+
Enabled: pending
|
1164
|
+
Severity: warning
|
1165
|
+
VersionAdded: '2.21'
|
1166
|
+
|
1101
1167
|
Rails/Validation:
|
1102
1168
|
Description: 'Use validates :attribute, hash of validations.'
|
1103
1169
|
Enabled: true
|
@@ -1153,6 +1219,14 @@ Style/FormatStringToken:
|
|
1153
1219
|
AllowedMethods:
|
1154
1220
|
- redirect
|
1155
1221
|
|
1222
|
+
Style/InvertibleUnlessCondition:
|
1223
|
+
InverseMethods:
|
1224
|
+
# Active Support defines some common inverse methods. They are listed below:
|
1225
|
+
:present?: :blank?
|
1226
|
+
:blank?: :present?
|
1227
|
+
:include?: :exclude?
|
1228
|
+
:exclude?: :include?
|
1229
|
+
|
1156
1230
|
Style/SymbolProc:
|
1157
1231
|
AllowedMethods:
|
1158
1232
|
- define_method
|
@@ -102,7 +102,7 @@ module RuboCop
|
|
102
102
|
end
|
103
103
|
|
104
104
|
# Internal helper class to hold match data
|
105
|
-
Captures = Struct.new(
|
105
|
+
Captures = ::Struct.new(
|
106
106
|
:transformed_argname,
|
107
107
|
:transforming_body_expr
|
108
108
|
) do
|
@@ -112,7 +112,7 @@ module RuboCop
|
|
112
112
|
end
|
113
113
|
|
114
114
|
# Internal helper class to hold autocorrect data
|
115
|
-
Autocorrection = Struct.new(:match, :block_node, :leading, :trailing) do
|
115
|
+
Autocorrection = ::Struct.new(:match, :block_node, :leading, :trailing) do
|
116
116
|
def self.from_each_with_object(node, match)
|
117
117
|
new(match, node, 0, 0)
|
118
118
|
end
|
@@ -3,8 +3,8 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Rails
|
6
|
-
# Using `ActionController::TestCase
|
7
|
-
# `ActionDispatch::IntegrationTest
|
6
|
+
# Using `ActionController::TestCase` is discouraged and should be replaced by
|
7
|
+
# `ActionDispatch::IntegrationTest`. Controller tests are too close to the
|
8
8
|
# internals of a controller whereas integration tests mimic the browser/user.
|
9
9
|
#
|
10
10
|
# @safety
|
@@ -12,7 +12,8 @@ module RuboCop
|
|
12
12
|
# The `bulk` option is only supported on the MySQL and
|
13
13
|
# the PostgreSQL (5.2 later) adapter; thus it will
|
14
14
|
# automatically detect an adapter from `development` environment
|
15
|
-
# in `config/database.yml`
|
15
|
+
# in `config/database.yml` or the environment variable `DATABASE_URL`
|
16
|
+
# when the `Database` option is not set.
|
16
17
|
# If the adapter is not `mysql2` or `postgresql`,
|
17
18
|
# this Cop ignores offenses.
|
18
19
|
#
|
@@ -175,13 +176,13 @@ module RuboCop
|
|
175
176
|
end
|
176
177
|
|
177
178
|
def database
|
178
|
-
cop_config['Database'] || database_from_yaml
|
179
|
+
cop_config['Database'] || database_from_yaml || database_from_env
|
179
180
|
end
|
180
181
|
|
181
182
|
def database_from_yaml
|
182
183
|
return nil unless database_yaml
|
183
184
|
|
184
|
-
case
|
185
|
+
case database_adapter
|
185
186
|
when 'mysql2'
|
186
187
|
MYSQL
|
187
188
|
when 'postgresql'
|
@@ -189,6 +190,10 @@ module RuboCop
|
|
189
190
|
end
|
190
191
|
end
|
191
192
|
|
193
|
+
def database_adapter
|
194
|
+
database_yaml['adapter'] || database_yaml.first.last['adapter']
|
195
|
+
end
|
196
|
+
|
192
197
|
def database_yaml
|
193
198
|
return nil unless File.exist?('config/database.yml')
|
194
199
|
|
@@ -207,6 +212,18 @@ module RuboCop
|
|
207
212
|
nil
|
208
213
|
end
|
209
214
|
|
215
|
+
def database_from_env
|
216
|
+
url = ENV['DATABASE_URL'].presence
|
217
|
+
return nil unless url
|
218
|
+
|
219
|
+
case url
|
220
|
+
when %r{\Amysql2://}
|
221
|
+
MYSQL
|
222
|
+
when %r{\Apostgres(ql)?://}
|
223
|
+
POSTGRESQL
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
210
227
|
def support_bulk_alter?
|
211
228
|
case database
|
212
229
|
when MYSQL
|