makandra-rubocop 5.4.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/config/ext/rails.yml CHANGED
@@ -23,6 +23,27 @@ AllCops:
23
23
  # as the default.
24
24
  TargetRailsVersion: ~
25
25
 
26
+ Lint/NumberConversion:
27
+ # Add Rails' duration methods to the ignore list for `Lint/NumberConversion`
28
+ # so that calling `to_i` on one of these does not register an offense.
29
+ # See: https://github.com/rubocop/rubocop/issues/8950
30
+ IgnoredMethods:
31
+ - ago
32
+ - from_now
33
+ - second
34
+ - seconds
35
+ - minute
36
+ - minutes
37
+ - hour
38
+ - hours
39
+ - day
40
+ - days
41
+ - week
42
+ - weeks
43
+ - fortnight
44
+ - fortnights
45
+ - in_milliseconds
46
+
26
47
  Rails/ActionFilter:
27
48
  Description: 'Enforces consistent use of action filter methods.'
28
49
  Enabled: true
@@ -43,6 +64,14 @@ Rails/ActiveRecordAliases:
43
64
  VersionAdded: '0.53'
44
65
  SafeAutoCorrect: false
45
66
 
67
+ Rails/ActiveRecordCallbacksOrder:
68
+ Description: 'Order callback declarations in the order in which they will be executed.'
69
+ StyleGuide: 'https://rails.rubystyle.guide/#callbacks-order'
70
+ Enabled: true
71
+ VersionAdded: '2.7'
72
+ Include:
73
+ - app/models/**/*.rb
74
+
46
75
  Rails/ActiveRecordOverride:
47
76
  Description: >-
48
77
  Check for overriding Active Record methods instead of using
@@ -60,6 +89,24 @@ Rails/ActiveSupportAliases:
60
89
  Enabled: false
61
90
  VersionAdded: '0.48'
62
91
 
92
+ Rails/AddColumnIndex:
93
+ Description: >-
94
+ Rails migrations don't make use of a given `index` key, but also
95
+ doesn't given an error when it's used, so it makes it seem like an
96
+ index might be used.
97
+ Enabled: true
98
+ VersionAdded: '2.11'
99
+ Include:
100
+ - db/migrate/*.rb
101
+
102
+ Rails/AfterCommitOverride:
103
+ Description: >-
104
+ This cop enforces that there is only one call to `after_commit`
105
+ (and its aliases - `after_create_commit`, `after_update_commit`,
106
+ and `after_destroy_commit`) with the same callback name per model.
107
+ Enabled: true
108
+ VersionAdded: '2.8'
109
+
63
110
  Rails/ApplicationController:
64
111
  Description: 'Check that controllers subclass ApplicationController.'
65
112
  Enabled: false # We have Controllers like `/jasmine` which do not inherit from ApplicationController
@@ -88,6 +135,12 @@ Rails/ApplicationRecord:
88
135
  VersionAdded: '0.49'
89
136
  VersionChanged: '2.5'
90
137
 
138
+ Rails/ArelStar:
139
+ Description: 'Enforces `Arel.star` instead of `"*"` for expanded columns.'
140
+ Enabled: true
141
+ SafeAutoCorrect: false
142
+ VersionAdded: '2.9'
143
+
91
144
  Rails/AssertNot:
92
145
  Description: 'Use `assert_not` instead of `assert !`.'
93
146
  Enabled: true
@@ -95,18 +148,26 @@ Rails/AssertNot:
95
148
  Include:
96
149
  - '**/test/**/*'
97
150
 
151
+ Rails/AttributeDefaultBlockValue:
152
+ Description: 'Pass method call in block for attribute option `default`.'
153
+ Enabled: true
154
+ VersionAdded: '2.9'
155
+ Include:
156
+ - 'models/**/*'
157
+
98
158
  Rails/BelongsTo:
99
159
  Description: >-
100
160
  Use `optional: true` instead of `required: false` for
101
- `belongs_to` relations'
161
+ `belongs_to` relations.
102
162
  Enabled: true
103
163
  VersionAdded: '0.62'
104
164
 
105
165
  Rails/Blank:
106
166
  Description: 'Enforces use of `blank?`.'
107
167
  Enabled: true
168
+ SafeAutoCorrect: false
108
169
  VersionAdded: '0.48'
109
- VersionChanged: '0.67'
170
+ VersionChanged: '2.10'
110
171
  # Convert usages of `nil? || empty?` to `blank?`
111
172
  NilOrEmpty: true
112
173
  # Convert usages of `!present?` to `blank?`
@@ -125,6 +186,14 @@ Rails/BulkChangeTable:
125
186
  Include:
126
187
  - db/migrate/*.rb
127
188
 
189
+ Rails/ContentTag:
190
+ Description: 'Use `tag` instead of `content_tag`.'
191
+ Reference:
192
+ - 'https://github.com/rails/rails/issues/25195'
193
+ - 'https://api.rubyonrails.org/classes/ActionView/Helpers/TagHelper.html#method-i-content_tag'
194
+ Enabled: false # We currently use content_tag in many applications. If content_tag should become deprecated in the future we'll have to change it anyway, but until then, we'll keep the content_tag syntax
195
+ VersionAdded: '2.6'
196
+
128
197
  Rails/CreateTableWithTimestamps:
129
198
  Description: >-
130
199
  Checks the migration for which timestamps are not included
@@ -140,7 +209,7 @@ Rails/Date:
140
209
  such as Date.today, Date.current etc.
141
210
  Enabled: false # It's not that simple. Really.
142
211
  VersionAdded: '0.30'
143
- VersionChanged: '0.33'
212
+ VersionChanged: '2.11'
144
213
  # The value `strict` disallows usage of `Date.today`, `Date.current`,
145
214
  # `Date#to_time` etc.
146
215
  # The value `flexible` allows usage of `Date.current`, `Date.yesterday`, etc
@@ -150,6 +219,14 @@ Rails/Date:
150
219
  SupportedStyles:
151
220
  - strict
152
221
  - flexible
222
+ AllowToTime: false # datetime.to_time can handle timezones, but this depends on a setting, which one may not be
223
+ # aware of, see https://api.rubyonrails.org/classes/DateTime.html#method-i-to_time,
224
+
225
+ Rails/DefaultScope:
226
+ Description: 'Avoid use of `default_scope`.'
227
+ StyleGuide: 'https://rails.rubystyle.guide#avoid-default-scope'
228
+ Enabled: false
229
+ VersionAdded: '2.7'
153
230
 
154
231
  Rails/Delegate:
155
232
  Description: 'Prefer delegate method for delegations.'
@@ -171,8 +248,20 @@ Rails/DynamicFindBy:
171
248
  StyleGuide: 'https://rails.rubystyle.guide#find_by'
172
249
  Enabled: false # We occasionally define custom find_by_* methods (e.g. `find_by_anything`) which don't work like ActiveRecord's methods.
173
250
  VersionAdded: '0.44'
251
+ VersionChanged: '2.10'
252
+ # The `Whitelist` has been deprecated, Please use `AllowedMethods` instead.
174
253
  Whitelist:
175
254
  - find_by_sql
255
+ AllowedMethods:
256
+ - find_by_sql
257
+ AllowedReceivers:
258
+ - Gem::Specification
259
+
260
+ Rails/EagerEvaluationLogMessage:
261
+ Description: 'Checks that blocks are used for interpolated strings passed to `Rails.logger.debug`.'
262
+ Reference: 'https://guides.rubyonrails.org/debugging_rails_applications.html#impact-of-logs-on-performance'
263
+ Enabled: true
264
+ VersionAdded: '2.11'
176
265
 
177
266
  Rails/EnumHash:
178
267
  Description: 'Prefer hash syntax over array syntax when defining enums.'
@@ -190,10 +279,23 @@ Rails/EnumUniqueness:
190
279
  - app/models/**/*.rb
191
280
 
192
281
  Rails/EnvironmentComparison:
193
- Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`"
282
+ Description: "Favor `Rails.env.production?` over `Rails.env == 'production'`."
194
283
  Enabled: true
195
284
  VersionAdded: '0.52'
196
285
 
286
+ Rails/EnvironmentVariableAccess:
287
+ Description: 'Do not access `ENV` directly after initialization.'
288
+ Enabled: false
289
+ VersionAdded: '2.10'
290
+ VersionChanged: '2.11'
291
+ Include:
292
+ - app/**/*.rb
293
+ - lib/**/*.rb
294
+ Exclude:
295
+ - lib/**/*.rake
296
+ AllowReads: false
297
+ AllowWrites: false
298
+
197
299
  Rails/Exit:
198
300
  Description: >-
199
301
  Favor `fail`, `break`, `return`, etc. over `exit` in
@@ -208,6 +310,11 @@ Rails/Exit:
208
310
  Exclude:
209
311
  - lib/**/*.rake
210
312
 
313
+ Rails/ExpandedDateRange:
314
+ Description: 'Checks for expanded date range.'
315
+ Enabled: false # We think the range syntax is clearer than using #all_year for example
316
+ VersionAdded: '2.11'
317
+
211
318
  Rails/FilePath:
212
319
  Description: 'Use `Rails.root.join` for file path joining.'
213
320
  Enabled: false
@@ -223,16 +330,33 @@ Rails/FindBy:
223
330
  StyleGuide: 'https://rails.rubystyle.guide#find_by'
224
331
  Enabled: false
225
332
  VersionAdded: '0.30'
333
+ VersionChanged: '2.11'
334
+ IgnoreWhereFirst: true
226
335
  Include:
227
336
  - app/models/**/*.rb
228
337
 
338
+ Rails/FindById:
339
+ Description: >-
340
+ Favor the use of `find` over `where.take!`, `find_by!`, and `find_by_id!` when you
341
+ need to retrieve a single record by primary key when you expect it to be found.
342
+ StyleGuide: 'https://rails.rubystyle.guide/#find'
343
+ Enabled: true
344
+ VersionAdded: '2.7'
345
+
229
346
  Rails/FindEach:
230
347
  Description: 'Prefer all.find_each over all.find.'
231
348
  StyleGuide: 'https://rails.rubystyle.guide#find-each'
232
349
  Enabled: true
233
350
  VersionAdded: '0.30'
351
+ VersionChanged: '2.9'
234
352
  Include:
235
353
  - app/models/**/*.rb
354
+ IgnoredMethods:
355
+ # Methods that don't work well with `find_each`.
356
+ - order
357
+ - limit
358
+ - select
359
+ - lock
236
360
 
237
361
  Rails/HasAndBelongsToMany:
238
362
  Description: 'Prefer has_many :through to has_and_belongs_to_many.'
@@ -251,7 +375,7 @@ Rails/HasManyOrHasOneDependent:
251
375
  - app/models/**/*.rb
252
376
 
253
377
  Rails/HelperInstanceVariable:
254
- Description: 'Do not use instance variables in helpers'
378
+ Description: 'Do not use instance variables in helpers.'
255
379
  Enabled: false # https://github.com/makandra/makandra-rubocop/issues/12
256
380
  VersionAdded: '2.0'
257
381
  Include:
@@ -269,11 +393,20 @@ Rails/HttpStatus:
269
393
  Description: 'Enforces use of symbolic or numeric value to define HTTP status.'
270
394
  Enabled: false
271
395
  VersionAdded: '0.54'
396
+ VersionChanged: '2.11'
272
397
  EnforcedStyle: symbolic
273
398
  SupportedStyles:
274
399
  - numeric
275
400
  - symbolic
276
401
 
402
+ Rails/I18nLocaleAssignment:
403
+ Description: 'Prefer the usage of `I18n.with_locale` instead of manually updating `I18n.locale` value.'
404
+ Enabled: false
405
+ VersionAdded: '2.11'
406
+ Include:
407
+ - spec/**/*.rb
408
+ - test/**/*.rb
409
+
277
410
  Rails/IgnoredSkipActionFilterOption:
278
411
  Description: 'Checks that `if` and `only` (or `except`) are not used together as options of `skip_*` action filter.'
279
412
  Reference: 'https://api.rubyonrails.org/classes/AbstractController/Callbacks/ClassMethods.html#method-i-_normalize_callback_options'
@@ -283,14 +416,22 @@ Rails/IgnoredSkipActionFilterOption:
283
416
  - app/controllers/**/*.rb
284
417
 
285
418
  Rails/IndexBy:
286
- Description: 'Prefer `index_by` over `each_with_object` or `map`.'
419
+ Description: 'Prefer `index_by` over `each_with_object`, `to_h`, or `map`.'
287
420
  Enabled: true
288
421
  VersionAdded: '2.5'
422
+ VersionChanged: '2.8'
289
423
 
290
424
  Rails/IndexWith:
291
- Description: 'Prefer `index_with` over `each_with_object` or `map`.'
425
+ Description: 'Prefer `index_with` over `each_with_object`, `to_h`, or `map`.'
292
426
  Enabled: true
293
427
  VersionAdded: '2.5'
428
+ VersionChanged: '2.8'
429
+
430
+ Rails/Inquiry:
431
+ Description: "Prefer Ruby's comparison operators over Active Support's `Array#inquiry` and `String#inquiry`."
432
+ StyleGuide: 'https://rails.rubystyle.guide/#inquiry'
433
+ Enabled: false # Not clear why we want this
434
+ VersionAdded: '2.7'
294
435
 
295
436
  Rails/InverseOf:
296
437
  Description: 'Checks for associations where the inverse cannot be determined automatically.'
@@ -317,13 +458,49 @@ Rails/LinkToBlank:
317
458
  Enabled: true
318
459
  VersionAdded: '0.62'
319
460
 
461
+ Rails/MailerName:
462
+ Description: 'Mailer should end with `Mailer` suffix.'
463
+ StyleGuide: 'https://rails.rubystyle.guide/#mailer-name'
464
+ Enabled: true
465
+ SafeAutoCorrect: false
466
+ VersionAdded: '2.7'
467
+ Include:
468
+ - app/mailers/**/*.rb
469
+
470
+ Rails/MatchRoute:
471
+ Description: >-
472
+ Don't use `match` to define any routes unless there is a need to map multiple request types
473
+ among [:get, :post, :patch, :put, :delete] to a single action using the `:via` option.
474
+ StyleGuide: 'https://rails.rubystyle.guide/#no-match-routes'
475
+ Enabled: false # No need why we want to have a cop for this
476
+ VersionAdded: '2.7'
477
+ Include:
478
+ - config/routes.rb
479
+ - config/routes/**/*.rb
480
+
481
+ Rails/NegateInclude:
482
+ Description: 'Prefer `collection.exclude?(obj)` over `!collection.include?(obj)`.'
483
+ StyleGuide: 'https://rails.rubystyle.guide#exclude'
484
+ Enabled: true
485
+ Safe: false
486
+ VersionAdded: '2.7'
487
+ VersionChanged: '2.9'
488
+
320
489
  Rails/NotNullColumn:
321
- Description: 'Do not add a NOT NULL column without a default value'
490
+ Description: 'Do not add a NOT NULL column without a default value.'
322
491
  Enabled: true
323
492
  VersionAdded: '0.43'
324
493
  Include:
325
494
  - db/migrate/*.rb
326
495
 
496
+ Rails/OrderById:
497
+ Description: >-
498
+ Do not use the `id` column for ordering.
499
+ Use a timestamp column to order chronologically.
500
+ StyleGuide: 'https://rails.rubystyle.guide/#order-by-id'
501
+ Enabled: false
502
+ VersionAdded: '2.8'
503
+
327
504
  Rails/Output:
328
505
  Description: 'Checks for calls to puts, print, etc.'
329
506
  Enabled: false
@@ -340,6 +517,37 @@ Rails/OutputSafety:
340
517
  Enabled: true # We may need to review this. Unsure if the cop can always know which `html_safe` call is valid and which one is not.
341
518
  VersionAdded: '0.41'
342
519
 
520
+ Rails/Pick:
521
+ Description: 'Prefer `pick` over `pluck(...).first`.'
522
+ StyleGuide: 'https://rails.rubystyle.guide#pick'
523
+ Enabled: true
524
+ Safe: false
525
+ VersionAdded: '2.6'
526
+
527
+ Rails/Pluck:
528
+ Description: 'Prefer `pluck` over `map { ... }`.'
529
+ StyleGuide: 'https://rails.rubystyle.guide#pluck'
530
+ Enabled: true
531
+ VersionAdded: '2.7'
532
+
533
+ Rails/PluckId:
534
+ Description: 'Use `ids` instead of `pluck(:id)` or `pluck(primary_key)`.'
535
+ StyleGuide: 'https://rails.rubystyle.guide/#ids'
536
+ Enabled: true
537
+ Safe: false
538
+ VersionAdded: '2.7'
539
+
540
+ Rails/PluckInWhere:
541
+ Description: 'Use `select` instead of `pluck` in `where` query methods.'
542
+ Enabled: false
543
+ Safe: false
544
+ VersionAdded: '2.7'
545
+ VersionChanged: '2.8'
546
+ EnforcedStyle: conservative
547
+ SupportedStyles:
548
+ - conservative
549
+ - aggressive
550
+
343
551
  Rails/PluralizationGrammar:
344
552
  Description: 'Checks for incorrect grammar when using methods like `3.day.ago`.'
345
553
  Enabled: true
@@ -367,6 +575,7 @@ Rails/RakeEnvironment:
367
575
  Enabled: false
368
576
  Safe: false
369
577
  VersionAdded: '2.4'
578
+ VersionChanged: '2.6'
370
579
  Include:
371
580
  - '**/Rakefile'
372
581
  - '**/*.rake'
@@ -393,6 +602,11 @@ Rails/RedundantAllowNil:
393
602
  Include:
394
603
  - app/models/**/*.rb
395
604
 
605
+ Rails/RedundantForeignKey:
606
+ Description: 'Checks for associations where the `:foreign_key` option is redundant.'
607
+ Enabled: true
608
+ VersionAdded: '2.6'
609
+
396
610
  Rails/RedundantReceiverInWithOptions:
397
611
  Description: 'Checks for redundant receiver in `with_options`.'
398
612
  Enabled: true
@@ -401,7 +615,9 @@ Rails/RedundantReceiverInWithOptions:
401
615
  Rails/ReflectionClassName:
402
616
  Description: 'Use a string for `class_name` option value in the definition of a reflection.'
403
617
  Enabled: true
618
+ Safe: false
404
619
  VersionAdded: '0.64'
620
+ VersionChanged: '2.10'
405
621
 
406
622
  Rails/RefuteMethods:
407
623
  Description: 'Use `assert_not` methods instead of `refute` methods.'
@@ -421,15 +637,35 @@ Rails/RelativeDateConstant:
421
637
  VersionChanged: '0.59'
422
638
  AutoCorrect: false
423
639
 
640
+ Rails/RenderInline:
641
+ Description: 'Prefer using a template over inline rendering.'
642
+ StyleGuide: 'https://rails.rubystyle.guide/#inline-rendering'
643
+ Enabled: false
644
+ VersionAdded: '2.7'
645
+
646
+ Rails/RenderPlainText:
647
+ Description: 'Prefer `render plain:` over `render text:`.'
648
+ StyleGuide: 'https://rails.rubystyle.guide/#plain-text-rendering'
649
+ Enabled: true
650
+ VersionAdded: '2.7'
651
+ # Convert only when `content_type` is explicitly set to `text/plain`.
652
+ ContentTypeCompatibility: true
653
+
424
654
  Rails/RequestReferer:
425
655
  Description: 'Use consistent syntax for request.referer.'
426
656
  Enabled: true
427
657
  VersionAdded: '0.41'
428
- EnforcedStyle: referrer # A typo in a "remote API" (HTTP RFC) should not force us using badly named methods
658
+ EnforcedStyle: referer
429
659
  SupportedStyles:
430
660
  - referer
431
661
  - referrer
432
662
 
663
+ Rails/RequireDependency:
664
+ Description: 'Do not use `require_dependency` when running in Zeitwerk mode. `require_dependency` is for autoloading in classic mode.'
665
+ Reference: 'https://guides.rubyonrails.org/autoloading_and_reloading_constants.html'
666
+ Enabled: false # We should enable this cop later, when all or most of our applications use zeitwerk
667
+ VersionAdded: '2.10'
668
+
433
669
  Rails/ReversibleMigration:
434
670
  Description: 'Checks whether the change method of the migration file is reversible.'
435
671
  StyleGuide: 'https://rails.rubystyle.guide#reversible-migration'
@@ -439,8 +675,15 @@ Rails/ReversibleMigration:
439
675
  Include:
440
676
  - db/migrate/*.rb
441
677
 
678
+ Rails/ReversibleMigrationMethodDefinition:
679
+ Description: 'Checks whether the migration implements either a `change` method or both an `up` and a `down` method.'
680
+ Enabled: false # If the migration starts with a class definition, no change-, up-, or down-method is recognized, although they exist
681
+ VersionAdded: '2.10'
682
+ Include:
683
+ - db/migrate/*.rb
684
+
442
685
  Rails/SafeNavigation:
443
- Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`"
686
+ Description: "Use Ruby's safe navigation operator (`&.`) instead of `try!`."
444
687
  Enabled: false
445
688
  VersionAdded: '0.43'
446
689
  # This will convert usages of `try` to use safe navigation as well as `try!`.
@@ -478,6 +721,16 @@ Rails/ScopeArgs:
478
721
  Include:
479
722
  - app/models/**/*.rb
480
723
 
724
+ Rails/ShortI18n:
725
+ Description: 'Use the short form of the I18n methods: `t` instead of `translate` and `l` instead of `localize`.'
726
+ StyleGuide: 'https://rails.rubystyle.guide/#short-i18n'
727
+ Enabled: true
728
+ VersionAdded: '2.7'
729
+ EnforcedStyle: conservative
730
+ SupportedStyles:
731
+ - conservative
732
+ - aggressive
733
+
481
734
  Rails/SkipsModelValidations:
482
735
  Description: >-
483
736
  Use methods that skips model validations with caution.
@@ -485,20 +738,37 @@ Rails/SkipsModelValidations:
485
738
  Reference: 'https://guides.rubyonrails.org/active_record_validations.html#skipping-validations'
486
739
  Enabled: false
487
740
  VersionAdded: '0.47'
488
- VersionChanged: '0.60'
489
- Blacklist:
741
+ VersionChanged: '2.7'
742
+ ForbiddenMethods:
490
743
  - decrement!
491
744
  - decrement_counter
492
745
  - increment!
493
746
  - increment_counter
747
+ - insert
748
+ - insert!
749
+ - insert_all
750
+ - insert_all!
494
751
  - toggle!
495
752
  - touch
753
+ - touch_all
496
754
  - update_all
497
755
  - update_attribute
498
756
  - update_column
499
757
  - update_columns
500
758
  - update_counters
501
- Whitelist: []
759
+ - upsert
760
+ - upsert_all
761
+ AllowedMethods: []
762
+
763
+ Rails/SquishedSQLHeredocs:
764
+ Description: 'Checks SQL heredocs to use `.squish`.'
765
+ StyleGuide: 'https://rails.rubystyle.guide/#squished-heredocs'
766
+ Enabled: true
767
+ VersionAdded: '2.8'
768
+ VersionChanged: '2.9'
769
+ # Some SQL syntax (e.g. PostgreSQL comments and functions) requires newlines
770
+ # to be preserved in order to work, thus auto-correction is not safe.
771
+ SafeAutoCorrect: false
502
772
 
503
773
  Rails/TimeZone:
504
774
  Description: 'Checks the correct usage of time zone aware methods.'
@@ -507,23 +777,35 @@ Rails/TimeZone:
507
777
  Enabled: false
508
778
  Safe: false
509
779
  VersionAdded: '0.30'
510
- VersionChanged: '0.68'
780
+ VersionChanged: '2.10'
511
781
  # The value `strict` means that `Time` should be used with `zone`.
512
782
  # The value `flexible` allows usage of `in_time_zone` instead of `zone`.
513
783
  EnforcedStyle: flexible
514
784
  SupportedStyles:
515
785
  - strict
516
786
  - flexible
787
+ Exclude:
788
+ - '**/*.gemspec'
789
+
790
+ Rails/TimeZoneAssignment:
791
+ Description: 'Prefer the usage of `Time.use_zone` instead of manually updating `Time.zone` value.'
792
+ Reference: 'https://thoughtbot.com/blog/its-about-time-zones'
793
+ Enabled: false
794
+ VersionAdded: '2.10'
795
+ Include:
796
+ - spec/**/*.rb
797
+ - test/**/*.rb
517
798
 
518
799
  Rails/UniqBeforePluck:
519
800
  Description: 'Prefer the use of uniq or distinct before pluck.'
520
801
  Enabled: true
521
802
  VersionAdded: '0.40'
522
- VersionChanged: '0.47'
803
+ VersionChanged: '2.8'
523
804
  EnforcedStyle: conservative
524
805
  SupportedStyles:
525
806
  - conservative
526
807
  - aggressive
808
+ SafeAutoCorrect: false
527
809
  AutoCorrect: false
528
810
 
529
811
  Rails/UniqueValidationWithoutIndex:
@@ -542,6 +824,13 @@ Rails/UnknownEnv:
542
824
  - test
543
825
  - production
544
826
 
827
+ Rails/UnusedIgnoredColumns:
828
+ Description: 'Remove a column that does not exist from `ignored_columns`.'
829
+ Enabled: true
830
+ VersionAdded: '2.11'
831
+ Include:
832
+ - app/models/**/*.rb
833
+
545
834
  Rails/Validation:
546
835
  Description: 'Use validates :attribute, hash of validations.'
547
836
  Enabled: true
@@ -549,3 +838,30 @@ Rails/Validation:
549
838
  VersionChanged: '0.41'
550
839
  Include:
551
840
  - app/models/**/*.rb
841
+
842
+ Rails/WhereEquals:
843
+ Description: 'Pass conditions to `where` as a hash instead of manually constructing SQL.'
844
+ StyleGuide: 'https://rails.rubystyle.guide/#hash-conditions'
845
+ Enabled: true
846
+ VersionAdded: '2.9'
847
+ VersionChanged: '2.10'
848
+
849
+ Rails/WhereExists:
850
+ Description: 'Prefer `exists?(...)` over `where(...).exists?`.'
851
+ Enabled: true
852
+ EnforcedStyle: exists
853
+ SupportedStyles:
854
+ - exists
855
+ - where
856
+ VersionAdded: '2.7'
857
+ VersionChanged: '2.10'
858
+
859
+ Rails/WhereNot:
860
+ Description: 'Use `where.not(...)` instead of manually constructing negated SQL in `where`.'
861
+ StyleGuide: 'https://rails.rubystyle.guide/#hash-conditions'
862
+ Enabled: true
863
+ VersionAdded: '2.8'
864
+
865
+ # Accept `redirect_to(...) and return` and similar cases.
866
+ Style/AndOr:
867
+ EnforcedStyle: conditionals