.rubocop.yml
require:
- rubocop-rails
- rubocop-sorbet
- rubocop-rake
- rubocop-rspec
- rubocop-capybara
- rubocop-factory_bot
AllCops:
Exclude:
- 'db/migrate/*'
- 'db/schema.rb'
- config/*
- config/initializers/*
- config/environments/*
- config/deploy/*
- config/puma/*
- bin/*
- vendor/**/*
- maizzle/**/*
# Disabling warnings about line length because it's so common through
# the codebase currently. It would be good to fix as it would make things
# easier to read but it would take a bit of time to do.
# TODO: Enable this again
Layout/LineLength:
Enabled: false
# We prefer double quotes here and it we're making liberal use of multi-line
# strings so it makes sense to enforce those to be consistent oo
Style/StringLiterals:
EnforcedStyle: double_quotes
ConsistentQuotesInMultiline: true
# This one I disagree with. Putting seperators in large numbers makes sense
# in some circumstances but in others (an example id in a database table)
# it's just nonsensical. Also, I think this one might also be a bit US centric.
Style/NumericLiterals:
Enabled: false
# For Rails it feels a little overkill to have to write a description for
# each class because so much is naming conventions. So, disabling this
Style/Documentation:
Enabled: false
# We have a few places that we're using things population_2021 which quite
# a reasonable way to name things.
Naming/VariableNumber:
Enabled: false
# Anonymous block forwarding doesn't look to be compatible with sorbet
Naming/BlockForwarding: # new in 1.24
Enabled: true
EnforcedStyle: explicit
# A bit too blanket of a rule. There are places where you just want to test more than one item
# and you're not testing for different behaviour. So, just numbering should be fine
RSpec/IndexedLet:
Enabled: false
# Disable a bunch of metrics to do with code complexity. These as are all
# a bit hard-nosed. Maybe after we've done a pass with Code Climate we
# can revisit these
Metrics/AbcSize:
Enabled: false
Metrics/BlockLength:
Enabled: false
Metrics/ClassLength:
Enabled: false
Metrics/CyclomaticComplexity:
Enabled: false
Metrics/MethodLength:
Enabled: false
Metrics/ModuleLength:
Enabled: false
Metrics/ParameterLists:
Enabled: false
Metrics/PerceivedComplexity:
Enabled: false
# Also disabling some things to do with messy tests that are overly
# complicated. It would be good to turn these on as it would result
# in cleaner, clearer and more readable tests. It is probably a fair amount of
# work so putting it off for the time being.
RSpec/ExampleLength:
Enabled: false
RSpec/MultipleExpectations:
Enabled: false
RSpec/MultipleMemoizedHelpers:
Enabled: false
RSpec/NestedGroups:
Enabled: false
Layout/EmptyLinesAroundAttributeAccessor:
Enabled: true
Layout/SpaceAroundMethodCallOperator:
Enabled: true
Lint/RaiseException:
Enabled: true
Lint/StructNewOverride:
Enabled: true
Style/ExponentialNotation:
Enabled: true
Style/HashEachMethods:
Enabled: true
Style/HashTransformKeys:
Enabled: true
Style/HashTransformValues:
Enabled: true
Style/SlicingWithRange:
Enabled: true
Lint/DeprecatedOpenSSLConstant:
Enabled: true
Lint/MixedRegexpCaptureTypes:
Enabled: true
# To use method signature in sorbet with accessors we need to separate them
# So, disabling this
Style/AccessorGrouping:
Enabled: false
Style/BisectedAttrAccessor:
Enabled: true
Style/RedundantAssignment:
Enabled: true
Style/RedundantFetchBlock:
Enabled: true
Style/RedundantRegexpCharacterClass:
Enabled: true
Style/RedundantRegexpEscape:
Enabled: true
Layout/LineEndStringConcatenationIndentation: # new in 1.18
Enabled: true
Layout/SpaceBeforeBrackets: # new in 1.7
Enabled: true
Lint/AmbiguousAssignment: # new in 1.7
Enabled: true
Lint/AmbiguousOperatorPrecedence: # new in 1.21
Enabled: true
Lint/AmbiguousRange: # new in 1.19
Enabled: true
Lint/DeprecatedConstants: # new in 1.8
Enabled: true
Lint/DuplicateBranch: # new in 1.3
Enabled: true
Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
Enabled: true
Lint/EmptyBlock: # new in 1.1
Enabled: true
Lint/EmptyClass: # new in 1.3
Enabled: true
Lint/EmptyInPattern: # new in 1.16
Enabled: true
Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
Enabled: true
Lint/LambdaWithoutLiteralBlock: # new in 1.8
Enabled: true
Lint/NoReturnInBeginEndBlocks: # new in 1.2
Enabled: true
Lint/NumberedParameterAssignment: # new in 1.9
Enabled: true
Lint/OrAssignmentToConstant: # new in 1.9
Enabled: true
Lint/RedundantDirGlobSort: # new in 1.8
Enabled: true
Lint/RequireRelativeSelfPath: # new in 1.22
Enabled: true
Lint/SymbolConversion: # new in 1.9
Enabled: true
Lint/ToEnumArguments: # new in 1.1
Enabled: true
Lint/TripleQuotes: # new in 1.9
Enabled: true
Lint/UnexpectedBlockArity: # new in 1.5
Enabled: true
Lint/UnmodifiedReduceAccumulator: # new in 1.1
Enabled: true
Security/IoMethods: # new in 1.22
Enabled: true
Style/ArgumentsForwarding: # new in 1.1
Enabled: true
Style/CollectionCompact: # new in 1.2
Enabled: true
Style/DocumentDynamicEvalDefinition: # new in 1.1
Enabled: true
Style/EndlessMethod: # new in 1.8
Enabled: true
Style/HashConversion: # new in 1.10
Enabled: true
Style/HashExcept: # new in 1.7
Enabled: true
Style/IfWithBooleanLiteralBranches: # new in 1.9
Enabled: true
Style/InPatternThen: # new in 1.16
Enabled: true
Style/MultilineInPatternThen: # new in 1.16
Enabled: true
Style/NegatedIfElseCondition: # new in 1.2
Enabled: true
Style/NilLambda: # new in 1.3
Enabled: true
Style/NumberedParameters: # new in 1.22
Enabled: true
Style/NumberedParametersLimit: # new in 1.22
Enabled: true
Style/QuotedSymbols: # new in 1.16
Enabled: true
Style/RedundantArgument: # new in 1.4
Enabled: true
Style/RedundantSelfAssignmentBranch: # new in 1.19
Enabled: true
Style/SelectByRegexp: # new in 1.22
Enabled: true
Style/StringChars: # new in 1.12
Enabled: true
Style/SwapValues: # new in 1.1
Enabled: true
Rails/AddColumnIndex: # new in 2.11
Enabled: true
Rails/AttributeDefaultBlockValue: # new in 2.9
Enabled: true
Rails/EagerEvaluationLogMessage: # new in 2.11
Enabled: true
Rails/ExpandedDateRange: # new in 2.11
Enabled: true
Rails/I18nLocaleAssignment: # new in 2.11
Enabled: true
Rails/RedundantTravelBack: # new in 2.12
Enabled: true
Rails/TimeZoneAssignment: # new in 2.10
Enabled: true
Rails/UnusedIgnoredColumns: # new in 2.11
Enabled: true
Rails/WhereEquals: # new in 2.9
Enabled: true
RSpec/ExcessiveDocstringSpacing: # new in 2.5
Enabled: true
RSpec/IdenticalEqualityAssertion: # new in 2.4
Enabled: true
RSpec/SubjectDeclaration: # new in 2.5
Enabled: true
RSpec/Rails/AvoidSetupHook: # new in 2.4
Enabled: true
# Sorbet
Sorbet/FalseSigil:
Exclude:
- spec/**/*.rb
- db/seeds.rb
- lib/tasks/*.rake
- config.ru
Sorbet/TrueSigil:
Enabled: true
Exclude:
- spec/**/*.rb
- db/seeds.rb
- lib/tasks/*.rake
- config.ru
- Capfile
- Gemfile
- Guardfile
- Rakefile
- app/views/api/_application.json.jbuilder
# TODO: Remove these exclusions as soon as we can
- app/admin/*.rb
Sorbet/StrictSigil:
Enabled: true
Exclude:
- spec/**/*.rb
- db/seeds.rb
- lib/tasks/*.rake
- config.ru
- Capfile
- Gemfile
- Guardfile
- Rakefile
- app/views/api/_application.json.jbuilder
- experiments/metrics/alert_signup.rb
# TODO: Remove these exclusions as soon as we can
- app/models/concerns/email_confirmable.rb
- app/models/feed.rb
- app/forms/*.rb
Rails/ActiveRecordCallbacksOrder:
Enabled: true
Rails/AfterCommitOverride:
Enabled: true
Rails/FindById:
Enabled: true
Rails/Inquiry:
Enabled: true
Rails/MailerName:
Enabled: true
Rails/MatchRoute:
Enabled: true
Rails/NegateInclude:
Enabled: true
Rails/Pluck:
Enabled: true
Rails/PluckInWhere:
Enabled: true
Rails/RenderInline:
Enabled: true
Rails/RenderPlainText:
Enabled: true
Rails/ShortI18n:
Enabled: true
Rails/SquishedSQLHeredocs:
Enabled: true
Rails/WhereExists:
Enabled: true
Rails/WhereNot:
Enabled: true
Gemspec/DeprecatedAttributeAssignment: # new in 1.30
Enabled: true
Gemspec/RequireMFA: # new in 1.23
Enabled: true
Layout/LineContinuationLeadingSpace: # new in 1.31
Enabled: true
Layout/LineContinuationSpacing: # new in 1.31
Enabled: true
Lint/ConstantOverwrittenInRescue: # new in 1.31
Enabled: true
Lint/DuplicateMagicComment: # new in 1.37
Enabled: true
Lint/NonAtomicFileOperation: # new in 1.31
Enabled: true
Lint/RefinementImportMethods: # new in 1.27
Enabled: true
Lint/RequireRangeParentheses: # new in 1.32
Enabled: true
Lint/UselessRuby2Keywords: # new in 1.23
Enabled: true
Security/CompoundHash: # new in 1.28
Enabled: true
Style/EmptyHeredoc: # new in 1.32
Enabled: true
Style/EnvHome: # new in 1.29
Enabled: true
Style/FetchEnvVar: # new in 1.28
Enabled: true
Style/FileRead: # new in 1.24
Enabled: true
Style/FileWrite: # new in 1.24
Enabled: true
Style/MagicCommentFormat: # new in 1.35
Enabled: true
Style/MapCompactWithConditionalBlock: # new in 1.30
Enabled: true
Style/MapToHash: # new in 1.24
Enabled: true
Style/NestedFileDirname: # new in 1.26
Enabled: true
Style/ObjectThen: # new in 1.28
Enabled: true
Style/OpenStructUse: # new in 1.23
Enabled: true
Style/OperatorMethodCall: # new in 1.37
Enabled: true
Style/RedundantInitialize: # new in 1.27
Enabled: true
Style/RedundantStringEscape: # new in 1.37
Enabled: true
Rails/ActionControllerFlashBeforeRender: # new in 2.16
Enabled: true
Rails/ActionControllerTestCase: # new in 2.14
Enabled: true
Rails/ActiveSupportOnLoad: # new in 2.16
Enabled: true
Rails/CompactBlank: # new in 2.13
Enabled: true
Rails/DeprecatedActiveModelErrorsMethods: # new in 2.14
Enabled: true
Rails/DotSeparatedKeys: # new in 2.15
Enabled: true
Rails/DuplicateAssociation: # new in 2.14
Enabled: true
Rails/DuplicateScope: # new in 2.14
Enabled: true
Rails/DurationArithmetic: # new in 2.13
Enabled: true
Rails/FreezeTime: # new in 2.16
Enabled: true
Rails/I18nLazyLookup: # new in 2.14
Enabled: true
Rails/I18nLocaleTexts: # new in 2.14
Enabled: true
Rails/MigrationClassName: # new in 2.14
Enabled: true
Rails/RedundantPresenceValidationOnBelongsTo: # new in 2.13
Enabled: true
Rails/RootJoinChain: # new in 2.13
Enabled: true
Rails/RootPathnameMethods: # new in 2.16
Enabled: true
Rails/RootPublicPath: # new in 2.15
Enabled: true
Rails/StripHeredoc: # new in 2.15
Enabled: true
Rails/ToFormattedS: # new in 2.15
Enabled: true
Rails/ToSWithArgument: # new in 2.16
Enabled: true
Rails/TopLevelHashWithIndifferentAccess: # new in 2.16
Enabled: true
Rails/TransactionExitStatement: # new in 2.14
Enabled: true
Rails/WhereMissing: # new in 2.16
Enabled: true
Rails/ActionOrder: # new in 2.17
Enabled: true
Rails/IgnoredColumnsAssignment: # new in 2.17
Enabled: true
Rails/WhereNotWithMultipleConditions: # new in 2.17
Enabled: true
RSpec/BeEq: # new in 2.9.0
Enabled: true
RSpec/BeNil: # new in 2.9.0
Enabled: true
RSpec/ChangeByZero: # new in 2.11
Enabled: true
RSpec/ClassCheck: # new in 2.13
Enabled: true
RSpec/NoExpectationExample: # new in 2.13
Enabled: true
RSpec/SortMetadata: # new in 2.14
Enabled: true
RSpec/VerifiedDoubleReference: # new in 2.10.0
Enabled: true
Capybara/NegationMatcher: # new in 2.14
Enabled: true
Capybara/SpecificActions: # new in 2.14
Enabled: true
Capybara/SpecificFinders: # new in 2.13
Enabled: true
Capybara/SpecificMatcher: # new in 2.12
Enabled: true
FactoryBot/ConsistentParenthesesStyle: # new in 2.14
Enabled: true
FactoryBot/SyntaxMethods: # new in 2.7
Enabled: true
RSpec/Rails/HaveHttpStatus: # new in 2.12
Enabled: true
RSpec/Rails/InferredSpecType: # new in 2.14
Enabled: true
Style/ArrayIntersect: # new in 1.40
Enabled: true
Style/ConcatArrayLiterals: # new in 1.41
Enabled: true
Style/RedundantConstantBase: # new in 1.40
Enabled: true
Style/RedundantDoubleSplatHashBraces: # new in 1.41
Enabled: true
Style/RedundantEach: # new in 1.38
Enabled: true
RSpec/DuplicatedMetadata: # new in 2.16
Enabled: true
RSpec/PendingWithoutReason: # new in 2.16
Enabled: true
FactoryBot/FactoryNameStyle: # new in 2.16
Enabled: true
Style/MapToSet: # new in 1.42
Enabled: true
Style/MinMaxComparison: # new in 1.42
Enabled: true
Style/YodaExpression: # new in 1.42
Enabled: true
Gemspec/DevelopmentDependencies: # new in 1.44
Enabled: true
Lint/DuplicateMatchPattern: # new in 1.50
Enabled: true
Lint/MixedCaseRange: # new in 1.53
Enabled: true
Lint/RedundantRegexpQuantifiers: # new in 1.53
Enabled: true
Lint/UselessRescue: # new in 1.43
Enabled: true
Metrics/CollectionLiteralLength: # new in 1.47
Enabled: true
Style/ComparableClamp: # new in 1.44
Enabled: true
Style/DataInheritance: # new in 1.49
Enabled: true
Style/DirEmpty: # new in 1.48
Enabled: true
Style/ExactRegexpMatch: # new in 1.51
Enabled: true
Style/FileEmpty: # new in 1.48
Enabled: true
Style/RedundantArrayConstructor: # new in 1.52
Enabled: true
Style/RedundantCurrentDirectoryInPath: # new in 1.53
Enabled: true
Style/RedundantFilterChain: # new in 1.52
Enabled: true
Style/RedundantHeredocDelimiterQuotes: # new in 1.45
Enabled: true
Style/RedundantLineContinuation: # new in 1.49
Enabled: true
Style/RedundantRegexpArgument: # new in 1.53
Enabled: true
Style/RedundantRegexpConstructor: # new in 1.52
Enabled: true
Style/ReturnNilInPredicateMethodDefinition: # new in 1.53
Enabled: true
Style/YAMLFileRead: # new in 1.53
Enabled: true
Rails/ResponseParsedBody: # new in 2.18
Enabled: true
Rails/ThreeStateBooleanColumn: # new in 2.19
Enabled: true
Capybara/MatchStyle: # new in 2.17
Enabled: true
FactoryBot/AssociationStyle: # new in 2.23
Enabled: true
FactoryBot/FactoryAssociationWithStrategy: # new in 2.23
Enabled: true
FactoryBot/RedundantFactoryOption: # new in 2.23
Enabled: true
RSpec/BeEmpty: # new in 2.20
Enabled: true
RSpec/ContainExactly: # new in 2.19
Enabled: true
RSpec/MatchArray: # new in 2.19
Enabled: true
RSpec/ReceiveMessages: # new in 2.23
Enabled: true
RSpec/RedundantAround: # new in 2.19
Enabled: true
RSpec/SkipBlockInsideExample: # new in 2.19
Enabled: true
RSpec/Rails/MinitestAssertions: # new in 2.17
Enabled: true
RSpec/Rails/NegationBeValid: # new in 2.23
Enabled: true
RSpec/Rails/TravelAround: # new in 2.19
Enabled: true