require: - rubocop-rspec AllCops: TargetRubyVersion: 2.7 NewCops: enable Exclude: - coverage/**/* # Excluding specs here because of RSpec's tendency to look at the line-number info on a backtrace to # decide what to show you when a matcher fails. I.E. a very long line may be needed to ensure you # get good diagnostic info on a test failure. Layout/LineLength: Max: 100 Exclude: - spec/**/* RSpec/MultipleMemoizedHelpers: Enabled: false RSpec/IndexedLet: # We have specs that are describing process steps, so... numbers are kinda the best way to describe that. Enabled: false RSpec/NestedGroups: Max: 4 RSpec/LeakyConstantDeclaration: # This effectively duplicates Lint/ConstantDefinitionInBlock. Enabled: false Lint/ConstantDefinitionInBlock: Exclude: - spec/**/* Naming/MemoizedInstanceVariableName: # This conflicts with Reek. Enabled: false # Explicit is bettr than implicit. Style/EmptyElse: Enabled: false Style/RescueModifier: Exclude: - spec/**/* Style/DocumentDynamicEvalDefinition: Enabled: false # Explicit is bettr than implicit. FactoryBot/SyntaxMethods: Enabled: false # For `match(hash_including(...))`, in specs, this rule would make things pretty unreadable. Layout/ClosingParenthesisIndentation: Exclude: - spec/**/* # This makes things pretty unreadable in a lot of cases, including but not limited to # `match(hash_including(...))` in specs. Layout/FirstArgumentIndentation: Enabled: false Bundler/OrderedGems: Exclude: - 'Gemfile' Lint/EmptyBlock: Enabled: false # OpenStruct is unwise for actual application code (esp. in light of potentially using yjit in the # future), but the flexibility is handy for specs. Style/OpenStructUse: Exclude: - spec/**/* # Disabling this because the "preferred" way requires allocating a Range which is stupid and wrong. Style/RandomWithOffset: Enabled: false # What, exactly, does the Ruby community have against the Truthiness Operator?! Style/DoubleNegation: Enabled: false