# TODO: [@thepracticaldev/oss] test cops that are commented out inherit_from: .rubocop_todo.yml require: - rubocop-performance - rubocop-rails - rubocop-rspec - rubocop-capybara AllCops: Exclude: - bin/**/* - db/schema.rb - db/migrate/*.rb - node_modules/**/* - tmp/**/* - vendor/**/* - .pryrc DisplayStyleGuide: true ExtraDetails: true NewCops: enable # opt-in to new cops by default TargetRubyVersion: 3.0 #################### Bundler ########################### Bundler/GemVersion: Description: 'Requires or forbids specifying gem versions.' Enabled: true EnforcedStyle: 'required' AllowedGems: ['acts_as_follower'] Bundler/OrderedGems: Description: >- Gems within groups in the Gemfile should be alphabetically sorted. Enabled: true ConsiderPunctuation: true #################### Layout ########################### Gemspec/DeprecatedAttributeAssignment: Description: 'Checks that deprecated attribute attributes (like date) are not set in a gemspec file.' Enabled: true #################### Layout ########################### Lint/AmbiguousAssignment: Description: 'Checks for mistyped shorthand assignments.' Enabled: true Layout/ClassStructure: Description: 'Enforces a configured order of definitions within a class body.' StyleGuide: '#consistent-classes' Enabled: true Layout/DotPosition: Description: 'Checks the position of the dot in multi-line method calls.' StyleGuide: '#consistent-multi-line-chains' EnforcedStyle: leading Lint/EmptyInPattern: Description: 'Checks for the presence of `in` pattern branches without a body.' Enabled: true Layout/EmptyLinesAroundAttributeAccessor: Description: "Keep blank lines around attribute accessors." StyleGuide: '#empty-lines-around-attribute-accessor' Enabled: true # Layout/FirstArrayElementLineBreak: # Description: >- # Checks for a line break before the first element in a # multi-line array. # Enabled: false # Layout/FirstHashElementLineBreak: # Description: >- # Checks for a line break before the first element in a # multi-line hash. # Enabled: false # Layout/FirstMethodArgumentLineBreak: # Description: >- # Checks for a line break before the first argument in a # multi-line method call. # Enabled: false # Layout/FirstMethodParameterLineBreak: # Description: >- # Checks for a line break before the first parameter in a # multi-line method parameter definition. # Enabled: false # Layout/HeredocArgumentClosingParenthesis: # Description: >- # Checks for the placement of the closing parenthesis in a # method call that passes a HEREDOC string as an argument. # Enabled: false # StyleGuide: '#heredoc-argument-closing-parentheses' Layout/LineLength: Description: 'Checks that line length does not exceed the configured limit.' AutoCorrect: true # this is false by default Exclude: - Gemfile - app/lib/constants/site_config.rb - spec/workers/users/record_field_test_event_worker_spec.rb # Layout/MultilineArrayLineBreaks: # Description: >- # Checks that each item in a multi-line array literal # starts on a separate line. # Enabled: false # Layout/MultilineAssignmentLayout: # Description: 'Check for a newline after the assignment operator in multi-line assignments.' # StyleGuide: '#indent-conditional-assignment' # Enabled: false # Layout/MultilineHashKeyLineBreaks: # Description: >- # Checks that each item in a multi-line hash literal # starts on a separate line. # Enabled: false # Layout/MultilineMethodArgumentLineBreaks: # Description: >- # Checks that each argument in a multi-line method call # starts on a separate line. # Enabled: false Layout/MultilineOperationIndentation: Description: >- Checks indentation of binary operations that span more than one line. Enabled: true EnforcedStyle: indented Layout/MultilineMethodCallIndentation: Description: >- Checks indentation of method calls with the dot operator that span more than one line. Enabled: true EnforcedStyle: indented Layout/SpaceAroundMethodCallOperator: Description: 'Checks method call operators to not have spaces around them.' Enabled: true Layout/SpaceBeforeBrackets: Description: 'Checks for receiver with a space before the opening brackets.' StyleGuide: '#space-in-brackets-access' Enabled: true #################### Lint ################################## Lint/AmbiguousBlockAssociation: Description: >- Checks for ambiguous block association with method when param passed without parentheses. StyleGuide: '#syntax' Enabled: true Exclude: - "spec/**/*" Lint/BinaryOperatorWithIdenticalOperands: Description: 'This cop checks for places where binary operator has identical operands.' Enabled: true Lint/ConstantResolution: Description: 'Check that constants are fully qualified with `::`.' Enabled: false Lint/DeprecatedConstants: Description: 'Checks for deprecated constants.' Enabled: true Lint/DeprecatedOpenSSLConstant: Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`." Enabled: true Lint/DuplicateBranch: Description: Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs. Enabled: false Lint/DuplicateElsifCondition: Description: 'Do not repeat conditions used in if `elsif`.' Enabled: true Lint/DuplicateRegexpCharacterClassElement: Description: 'Checks for duplicate elements in Regexp character classes.' Enabled: true Lint/DuplicateRescueException: Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.' Enabled: true Lint/EmptyConditionalBody: Description: 'This cop checks for the presence of `if`, `elsif` and `unless` branches without a body.' Enabled: true Lint/EmptyBlock: Description: 'This cop checks for blocks without a body.' Enabled: true Lint/EmptyClass: Description: 'Checks for classes and metaclasses without a body.' Enabled: true Lint/FloatComparison: Description: 'Checks for the presence of precise comparison of floating point numbers.' StyleGuide: '#float-comparison' Enabled: true # Lint/HeredocMethodCallPosition: # Description: >- # Checks for the ordering of a method call where # the receiver of the call is a HEREDOC. # Enabled: false Lint/MissingSuper: Description: >- This cop checks for the presence of constructors and lifecycle callbacks without calls to `super`'. Enabled: true Exclude: - 'app/components/**/*.rb' - 'app/policies/**/*.rb' Lint/MixedRegexpCaptureTypes: Description: 'Do not mix named captures and numbered captures in a Regexp literal.' Enabled: true Lint/NumberedParameterAssignment: Description: 'Checks for uses of numbered parameter assignment.' Enabled: true # Lint/NumberConversion: # Description: 'Checks unsafe usage of number conversion methods.' # Enabled: false Lint/OrAssignmentToConstant: Description: 'Checks unintended or-assignment to constant.' Enabled: true Lint/OutOfRangeRegexpRef: Description: 'Checks for out of range reference for Regexp because it always returns nil.' Enabled: true Lint/RaiseException: Description: Checks for `raise` or `fail` statements which are raising `Exception` class. StyleGuide: '#raise-exception' Enabled: true Lint/RedundantDirGlobSort: Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.' Enabled: true Lint/SelfAssignment: Description: 'Checks for self-assignments.' Enabled: true Lint/StructNewOverride: Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.' Enabled: true Lint/SymbolConversion: Description: 'Checks for unnecessary symbol conversions.' Enabled: true Lint/ToEnumArguments: Description: 'This cop ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.' Enabled: true Lint/TopLevelReturnWithArgument: Description: 'This cop detects top level return statements with argument.' Enabled: true Lint/TripleQuotes: Description: 'Checks for useless triple quote constructs.' Enabled: true Lint/UnexpectedBlockArity: Description: 'Looks for blocks that have fewer arguments that the calling method expects.' Enabled: true Lint/UnmodifiedReduceAccumulator: Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration. Enabled: true Lint/UnreachableLoop: Description: 'This cop checks for loops that will have at most one iteration.' Enabled: true #################### Metrics ############################### Metrics/AbcSize: Description: >- A calculated magnitude based on number of assignments, branches, and conditions. Enabled: false Metrics/BlockLength: Description: 'Avoid long blocks with many lines.' Enabled: true Exclude: - 'db/seeds.rb' - 'Guardfile' - 'spec/**/*' Metrics/ClassLength: Description: 'Avoid classes longer than 100 lines of code.' Enabled: false Metrics/CyclomaticComplexity: Description: >- A complexity metric that is strongly correlated to the number of test cases needed to validate a method. Enabled: true Max: 13 Metrics/MethodLength: Description: 'Avoid methods longer than 10 lines of code.' StyleGuide: '#short-methods' Enabled: false Metrics/ModuleLength: Description: 'Avoid modules longer than 100 lines of code.' Enabled: false Metrics/ParameterLists: Description: 'Avoid parameter lists longer than three or four parameters.' StyleGuide: '#too-many-params' Enabled: false Metrics/PerceivedComplexity: Description: >- A complexity metric geared towards measuring complexity for a human reader. Enabled: true Max: 14 #################### Naming ############################## Naming/AccessorMethodName: Description: Check the naming of accessor methods for get_/set_. StyleGuide: '#accessor_mutator_method_names' Enabled: false Naming/InclusiveLanguage: Description: 'Recommend the use of inclusive language instead of problematic terms.' Enabled: false Naming/PredicateName: Description: 'Check the names of predicate methods.' StyleGuide: '#bool-methods-qmark' Enabled: true ForbiddenPrefixes: - is_ Exclude: - spec/**/* Naming/VariableNumber: Description: 'Use the configured style when numbering symbols, methods and variables.' StyleGuide: '#snake-case-symbols-methods-vars-with-numbers' Enabled: false #################### Style ############################### Style/AsciiComments: Description: 'Use only ascii symbols in comments.' StyleGuide: '#english-comments' Enabled: false Style/AccessorGrouping: Description: 'Checks for grouping of accessors in `class` and `module` bodies.' Enabled: true Style/ArgumentsForwarding: Description: 'Use arguments forwarding.' StyleGuide: '#arguments-forwarding' Enabled: false Style/ArrayCoercion: Description: >- Use Array() instead of explicit Array check or [*var], when dealing with a variable you want to treat as an Array, but you're not certain it's an array. StyleGuide: '#array-coercion' Enabled: true # Style/AutoResourceCleanup: # Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).' # Enabled: false Style/BisectedAttrAccessor: Description: >- Checks for places where `attr_reader` and `attr_writer` for the same method can be combined into single `attr_accessor`. Enabled: true Style/CaseLikeIf: Description: 'This cop identifies places where `if-elsif` constructions can be replaced with `case-when`.' StyleGuide: '#case-vs-if-else' Enabled: true Style/ClassAndModuleChildren: Description: 'Checks style of children classes and modules.' StyleGuide: '#namespace-definition' Enabled: true SafeAutoCorrect: true Style/CollectionCompact: Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.' Enabled: true Style/CollectionMethods: Description: 'Preferred collection methods.' StyleGuide: '#map-find-select-reduce-include-size' Enabled: true PreferredMethods: find: detect # Style/ConstantVisibility: # Description: >- # Check that class- and module constants have # visibility declarations. # Enabled: false # Style/DateTime: # Description: 'Use Time over DateTime.' # StyleGuide: '#no-datetime' # Enabled: false Style/Documentation: Description: 'Document classes and non-namespace modules.' Enabled: false Style/DocumentDynamicEvalDefinition: Description: >- When using `class_eval` (or other `eval`) with string interpolation, add a comment block showing its appearance if interpolated. StyleGuide: '#eval-comment-docs' Enabled: true Style/ExplicitBlockArgument: Description: >- Consider using explicit block argument to avoid writing block literal that just passes its arguments to another block. StyleGuide: '#block-argument' Enabled: true Style/Encoding: Description: 'Use UTF-8 as the source file encoding.' Enabled: false Style/EndlessMethod: Description: 'Avoid the use of multi-lined endless method definitions.' StyleGuide: '#endless-methods' Enabled: pending Style/ExponentialNotation: Description: 'When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).' StyleGuide: '#exponential-notation' Enabled: true EnforcedStyle: scientific Style/FormatStringToken: Description: 'Use a consistent style for format string tokens.' Exclude: - 'config/routes.rb' Style/FrozenStringLiteralComment: Description: >- Add the frozen_string_literal comment to the top of files to help transition to frozen string literals by default. Enabled: true EnforcedStyle: never Style/GlobalStdStream: Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.' StyleGuide: '#global-stdout' Enabled: true Style/HashAsLastArrayItem: Description: >- Checks for presence or absence of braces around hash literal as a last array item depending on configuration. StyleGuide: '#hash-literal-as-last-array-item' Enabled: true EnforcedStyle: braces Style/HashConversion: Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.' Enabled: true Style/HashEachMethods: Description: 'Use Hash#each_key and Hash#each_value.' StyleGuide: '#hash-each' Enabled: true Style/HashExcept: Description: >- Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods that can be replaced with `Hash#except` method. Enabled: true Style/HashLikeCase: Description: >- Checks for places where `case-when` represents a simple 1:1 mapping and can be replaced with a hash lookup. Enabled: true Style/HashSyntax: Description: >- Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax { :a => 1, :b => 2 }. StyleGuide: '#hash-literals' Enabled: true EnforcedStyle: ruby19_no_mixed_keys Style/HashTransformKeys: Description: 'Prefer `transform_keys` over `each_with_object` and `map`.' StyleGuide: '#hash-transform-methods' Enabled: true Style/HashTransformValues: Description: 'Prefer `transform_values` over `each_with_object` and `map`.' StyleGuide: '#hash-transform-methods' Enabled: true Style/IfUnlessModifier: Description: >- Favor modifier if/unless usage when you have a single-line body. StyleGuide: '#if-as-a-modifier' Enabled: false Style/IfWithBooleanLiteralBranches: Description: 'Checks for redundant `if` with boolean literal branches.' Enabled: true # Style/ImplicitRuntimeError: # Description: >- # Use `raise` or `fail` with an explicit exception class and # message, rather than just a message. # Enabled: false # Style/InlineComment: # Description: 'Avoid trailing inline comments.' # Enabled: false Style/InPatternThen: Description: 'Checks for `in;` uses in `case` expressions.' StyleGuide: '#no-in-pattern-semicolons' Enabled: true # Style/IpAddresses: # Description: "Don't include literal IP addresses in code." # Enabled: false # Style/MethodCallWithArgsParentheses: # Description: 'Use parentheses for method calls with arguments.' # StyleGuide: '#method-invocation-parens' # Enabled: false # Style/MethodCalledOnDoEndBlock: # Description: 'Avoid chaining a method call on a do...end block.' # StyleGuide: '#single-line-blocks' # Enabled: false Style/MultilineInPatternThen: Description: 'Do not use `then` for multi-line `in` statement.' Enabled: true Style/NegatedIfElseCondition: Description: >- This cop checks for uses of `if-else` and ternary operators with a negated condition which can be simplified by inverting condition and swapping branches. Enabled: true Style/Next: Description: 'Use `next` to skip iteration instead of a condition at the end.' StyleGuide: '#no-nested-conditionals' Enabled: true Style/NilLambda: Description: 'Prefer `-> {}` to `-> { nil }`.' Enabled: true Style/OptionalBooleanParameter: Description: 'Use keyword arguments when defining method with boolean argument.' StyleGuide: '#boolean-keyword-arguments' Enabled: true Style/OptionHash: Description: "Don't use option hashes when you can use keyword arguments." Enabled: true Style/QuotedSymbols: Description: 'Use a consistent style for quoted symbols.' Enabled: true Style/RedundantArgument: Description: 'Check for a redundant argument passed to certain methods.' Enabled: true Style/RedundantAssignment: Description: 'Checks for redundant assignment before returning.' Enabled: true Style/RedundantFetchBlock: Description: >- Use `fetch(key, value)` instead of `fetch(key) { value }` when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant. Reference: 'https://github.com/JuanitoFatas/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code' Enabled: true Style/RedundantFileExtensionInRequire: Description: >- Checks for the presence of superfluous `.rb` extension in the filename provided to `require` and `require_relative`. StyleGuide: '#no-explicit-rb-to-require' Enabled: true Style/RedundantRegexpCharacterClass: Description: 'Checks for unnecessary single-element Regexp character classes.' Enabled: true Style/RedundantRegexpEscape: Description: 'Checks for redundant escapes in Regexps.' Enabled: true Style/ReturnNil: Description: 'Use return instead of return nil.' Enabled: true Style/Send: Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.' StyleGuide: '#prefer-public-send' Enabled: true Style/SingleArgumentDig: Description: 'Avoid using single argument dig method.' Enabled: true Style/SingleLineBlockParams: Description: 'Enforces the names of some block params.' Enabled: true Style/SlicingWithRange: Description: 'Checks array slicing is done with endless ranges when suitable.' Enabled: true Style/StringChars: Description: 'Checks for uses of `String#split` with empty string or regexp literal argument.' Enabled: true Style/StringConcatenation: Description: 'Checks for places where string concatenation can be replaced with string interpolation.' StyleGuide: '#string-interpolation' Enabled: true Style/StringLiterals: Description: 'Checks if uses of quotes match the configured preference.' StyleGuide: '#consistent-string-literals' Enabled: true EnforcedStyle: double_quotes ConsistentQuotesInMultiline: true Style/SwapValues: Description: 'This cop enforces the use of shorthand-style swapping of 2 variables.' StyleGuide: '#values-swapping' Enabled: true Style/TopLevelMethodDefinition: Description: 'This cop looks for top-level method definitions.' Enabled: false # We're disabling it for the time being until a new version of rubocop # (> 1.31.2) is released with a fix for false positives that are coming up. # These files below were the original files excluded from this rule. # Exclude: # - scripts/release # - scripts/stage_release Style/TrailingCommaInArguments: Description: 'Checks for trailing comma in argument lists.' StyleGuide: '#no-trailing-params-comma' Enabled: true EnforcedStyleForMultiline: comma Style/TrailingCommaInArrayLiteral: Description: 'Checks for trailing comma in array literals.' StyleGuide: '#no-trailing-array-commas' Enabled: true EnforcedStyleForMultiline: comma Style/TrailingCommaInBlockArgs: Description: 'Checks for useless trailing commas in block arguments.' Enabled: true Style/UnlessLogicalOperators: Description: >- Checks for use of logical operators in an unless condition. Enabled: false # Performance cops from rubocop-performance # https://github.com/rubocop-hq/rubocop-performance/blob/master/config/default.yml Performance/AncestorsInclude: Description: 'Use `A <= B` instead of `A.ancestors.include?(B)`.' Reference: 'https://github.com/JuanitoFatas/fast-ruby#ancestorsinclude-vs--code' Enabled: true Performance/BigDecimalWithNumericArgument: Description: 'Convert numeric argument to string before passing to BigDecimal.' Enabled: true Performance/CaseWhenSplat: Description: >- Reordering `when` conditions with a splat to the end of the `when` branches can improve performance. Enabled: true Performance/ChainArrayAllocation: Description: >- Instead of chaining array methods that allocate new arrays, mutate an existing array. Reference: 'https://twitter.com/schneems/status/1034123879978029057' Enabled: false Performance/IoReadlines: Description: 'Use `IO.each_line` (`IO#each_line`) instead of `IO.readlines` (`IO#readlines`).' Reference: 'https://docs.gitlab.com/ee/development/performance.html#reading-from-files-and-other-data-sources' Enabled: true Performance/MapCompact: Description: 'Use `filter_map` instead of `collection.map(&:do_something).compact`.' Enabled: true Performance/OpenStruct: Description: 'Use `Struct` instead of `OpenStruct`.' Enabled: true Performance/RedundantEqualityComparisonBlock: Description: >- Checks for uses `Enumerable#all?`, `Enumerable#any?`, `Enumerable#one?`, or `Enumerable#none?` are compared with `===` or similar methods in block. Enabled: true Performance/RedundantSortBlock: Description: 'Use `sort` instead of `sort { |a, b| a <=> b }`.' Enabled: true Performance/RedundantSplitRegexpArgument: Description: 'This cop identifies places where `split` argument can be replaced from a deterministic regexp to a string.' Enabled: true Performance/RedundantStringChars: Description: 'Checks for redundant `String#chars`.' Enabled: true Performance/ReverseFirst: Description: 'Use `last(n).reverse` instead of `reverse.first(n)`.' Enabled: true Performance/SelectMap: Description: 'Use `filter_map` instead of `ary.select(&:foo).map(&:bar)`.' Enabled: true Performance/SortReverse: Description: 'Use `sort.reverse` instead of `sort { |a, b| b <=> a }`.' Enabled: true Performance/Squeeze: Description: "Use `squeeze('a')` instead of `gsub(/a+/, 'a')`." Reference: 'https://github.com/JuanitoFatas/fast-ruby#remove-extra-spaces-or-other-contiguous-characters-code' Enabled: true Performance/StringInclude: Description: 'Use `String#include?` instead of a regex match with literal-only pattern.' Enabled: true # Rails cops from rubocop-rails # https://github.com/rubocop-hq/rubocop-rails/blob/master/config/default.yml # TODO: [@thepracticaldev/oss] enable these Rails cops Rails/ActiveRecordCallbacksOrder: Description: 'Order callback declarations in the order in which they will be executed.' StyleGuide: 'https://rails.rubystyle.guide/#callbacks-order' Enabled: true Rails/AddColumnIndex: Description: >- Rails migrations don't make use of a given `index` key, but also doesn't given an error when it's used, so it makes it seem like an index might be used. Enabled: true Rails/Date: Exclude: - scripts/release - scripts/stage_release Rails/DefaultScope: Description: 'Avoid use of `default_scope`.' StyleGuide: 'https://rails.rubystyle.guide#avoid-default-scope' Enabled: true Rails/EagerEvaluationLogMessage: Description: 'Checks that blocks are used for interpolated strings passed to `Rails.logger.debug`.' Reference: 'https://guides.rubyonrails.org/debugging_rails_applications.html#impact-of-logs-on-performance' Enabled: true Rails/EnvironmentVariableAccess: Description: 'Do not access `ENV` directly after initialization.' Enabled: false Rails/ExpandedDateRange: Description: 'Checks for expanded date range.' Enabled: true Rails/FilePath: EnforcedStyle: slashes Rails/FindById: Description: >- Favor the use of `find` over `where.take!`, `find_by!`, and `find_by_id!` when you need to retrieve a single record by primary key when you expect it to be found. StyleGuide: 'https://rails.rubystyle.guide/#find' Enabled: true Rails/I18nLocaleAssignment: Description: 'Prefer the usage of `I18n.with_locale` instead of manually updating `I18n.locale` value.' Enabled: true Rails/Inquiry: Description: "Prefer Ruby's comparison operators over Active Support's `Array#inquiry` and `String#inquiry`." StyleGuide: 'https://rails.rubystyle.guide/#inquiry' Enabled: true Rails/LexicallyScopedActionFilter: Exclude: - app/controllers/api/**/* Rails/MailerName: Description: 'Mailer should end with `Mailer` suffix.' StyleGuide: 'https://rails.rubystyle.guide/#mailer-name' Enabled: true Rails/MatchRoute: Description: >- Don't use `match` to define any routes unless there is a need to map multiple request types among [:get, :post, :patch, :put, :delete] to a single action using the `:via` option. StyleGuide: 'https://rails.rubystyle.guide/#no-match-routes' Enabled: true Rails/NegateInclude: Description: 'Prefer `collection.exclude?(obj)` over `!collection.include?(obj)`.' Enabled: true Rails/Pluck: Description: 'Prefer `pluck` over `map { ... }`.' Enabled: true Rails/PluckId: Description: 'Use `ids` instead of `pluck(:id)` or `pluck(primary_key)`.' StyleGuide: 'https://rails.rubystyle.guide/#ids' Enabled: true Rails/PluckInWhere: Description: 'Use `select` instead of `pluck` in `where` query methods.' Enabled: true Rails/RenderInline: Description: 'Prefer using a template over inline rendering.' StyleGuide: 'https://rails.rubystyle.guide/#inline-rendering' Enabled: true Rails/RenderPlainText: Description: 'Prefer `render plain:` over `render text:`.' StyleGuide: 'https://rails.rubystyle.guide/#plain-text-rendering' Enabled: true # TODO: enable this once all loader related deprecations on console/server startup are dealt with Rails/RequireDependency: Description: 'Do not use `require_dependency` when running in Zeitwerk mode. `require_dependency` is for autoloading in classic mode.' Reference: 'https://guides.rubyonrails.org/autoloading_and_reloading_constants.html' Enabled: false Rails/ReversibleMigrationMethodDefinition: Description: 'Checks whether the migration implements either a `change` method or both an `up` and a `down` method.' Enabled: true Include: - db/migrate/*.rb Rails/ShortI18n: Description: 'Use the short form of the I18n methods: `t` instead of `translate` and `l` instead of `localize`.' StyleGuide: 'https://rails.rubystyle.guide/#short-i18n' Enabled: true Rails/SkipsModelValidations: Description: >- Use methods that skips model validations with caution. See reference for more information. Reference: 'https://guides.rubyonrails.org/active_record_validations.html#skipping-validations' Enabled: false Rails/SquishedSQLHeredocs: Enabled: false Rails/TimeZoneAssignment: Description: 'Prefer the usage of `Time.use_zone` instead of manually updating `Time.zone` value.' Reference: 'https://thoughtbot.com/blog/its-about-time-zones' Enabled: true Rails/UnusedIgnoredColumns: Description: 'Remove a column that does not exist from `ignored_columns`.' Enabled: true Rails/WhereExists: Description: 'Prefer `exists?(...)` over `where(...).exists?`.' Enabled: true # RSpec cops from rubocop-rspec # https://github.com/rubocop-hq/rubocop-rspec/blob/master/config/default.yml RSpec/DescribeClass: Description: Check that the first argument to the top level describe is a constant. Enabled: true StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/DescribeClass Exclude: - '**/spec/features/**/*' - '**/spec/requests/**/*' - '**/spec/routing/**/*' - '**/spec/system/**/*' - '**/spec/views/**/*' RSpec/DescribedClassModuleWrapping: Description: Avoid opening modules and defining specs within them. Enabled: true StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/DescribedClassModuleWrapping RSpec/ExampleLength: Description: Checks for long examples. Enabled: false RSpec/IdenticalEqualityAssertion: Description: Checks for equality assertions with identical expressions on both sides. Enabled: true StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/IdenticalEqualityAssertion RSpec/MessageExpectation: Description: Checks for consistent message expectation style. Enabled: true EnforcedStyle: allow RSpec/MultipleMemoizedHelpers: Description: Checks if example groups contain too many `let` and `subject` calls. Enabled: false StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MultipleMemoizedHelpers RSpec/MultipleExpectations: Description: Checks if examples contain too many `expect` calls. Enabled: true Max: 8 StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/MultipleExpectations RSpec/Rails/AvoidSetupHook: Description: Checks that tests use RSpec `before` hook over Rails `setup` method. Enabled: true StyleGuide: https://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Rails/AvoidSetupHook RSpec/NoExpectationExample: Enabled: false AllowedPatterns: - ^expect_ - ^assert_ - sidekiq_assert_ RSpec/IndexedLet: Enabled: false