inherit_mode:
  merge:
  - Exclude

Sorbet/AllowIncompatibleOverride:
  Description: 'Disallows using `.override(allow_incompatible: true)`.'
  Enabled: true
  VersionAdded: 0.2.0

Sorbet/BindingConstantWithoutTypeAlias:
  Description: >-
                  Disallows binding the return value of `T.any`, `T.all`, `T.enum`
                  to a constant directly. To bind the value, one must use `T.type_alias`.
  Enabled: true
  VersionAdded: 0.2.0

Sorbet/CallbackConditionalsBinding:
  Description: 'Ensures callback conditionals are bound to the right type.'
  Enabled: false
  Safe: false
  VersionAdded: 0.7.0

Sorbet/CheckedTrueInSignature:
  Description: 'Disallows the usage of `checked(true)` in signatures.'
  Enabled: true
  VersionAdded: 0.2.0

Sorbet/EmptyLineAfterSig:
  Description: 'Ensures that there are no blank lines after signatures'
  Enabled: true
  VersionAdded: 0.7.0

Sorbet/ConstantsFromStrings:
  Description: >-
                  Forbids constant access through meta-programming.

                  For example, things like `constantize` or `const_get`
                  are forbidden.
  Enabled: true
  VersionAdded: 0.2.0

Sorbet/EnforceSigilOrder:
  Description: 'Ensures that Sorbet sigil comes first in a file.'
  Enabled: true
  VersionAdded: 0.3.4

Sorbet/EnforceSingleSigil:
  Description: 'Ensures that there is only one Sorbet sigil in a file.'
  Enabled: true
  VersionAdded: 0.7.0

Sorbet/EnforceSignatures:
  Description: 'Ensures all methods have a valid signature.'
  Enabled: false
  VersionAdded: 0.3.4

Sorbet/FalseSigil:
  Description: 'All files must be at least at strictness `false`.'
  Enabled: true
  VersionAdded: 0.3.3
  SuggestedStrictness: "false"
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/ForbidExtendTSigHelpersInShims:
  Description: 'Forbid the use of `extend T::Sig` and `extend T::Helpers` in RBI shims'
  Enabled: true
  VersionAdded: '0.6.0'
  Include:
  - "**/*.rbi"

Sorbet/ForbidRBIOutsideOfAllowedPaths:
  Description: 'Forbids RBI files outside of the allowed paths'
  Enabled: true
  VersionAdded: 0.6.1
  AllowedPaths:
  - "rbi/**"
  - "sorbet/rbi/**"
  Include:
  - "**/*.rbi"

Sorbet/ForbidIncludeConstLiteral:
  Description: 'Forbids include of non-literal constants.'
  Enabled: false
  VersionAdded: 0.2.0
  VersionChanged: 0.5.0

Sorbet/ForbidTypeAliasedShapes:
  Description: 'Forbids defining type aliases that contain shapes'
  Enabled: false
  VersionAdded: 0.7.6

Sorbet/ForbidSuperclassConstLiteral:
  Description: 'Forbid superclasses which are non-literal constants.'
  Enabled: false
  VersionAdded: 0.2.0
  VersionChanged: 0.6.1
  Exclude:
  - db/migrate/*.rb

Sorbet/ForbidTStruct:
  Description: 'Forbid usage of T::Struct.'
  Enabled: false
  VersionAdded: <<next>>
  VersionChanged: <<next>>
  Safe: false

Sorbet/ForbidTUnsafe:
  Description: 'Forbid usage of T.unsafe.'
  Enabled: false
  VersionAdded: 0.7.0
  VersionChanged: 0.7.0

Sorbet/ForbidTUntyped:
  Description: 'Forbid usage of T.untyped'
  Enabled: false
  VersionAdded: 0.6.9
  VersionChanged: 0.7.0

Sorbet/ForbidUntypedStructProps:
  Description: >-
                  Disallows use of `T.untyped` or `T.nilable(T.untyped)` as a
                  prop type for `T::Struct` subclasses.
  Enabled: true
  VersionAdded: 0.4.0

Sorbet/HasSigil:
  Description: 'Makes the Sorbet typed sigil mandatory in all files.'
  Enabled: false
  SuggestedStrictness: "false"
  MinimumStrictness: nil
  ExactStrictness: nil
  VersionAdded: 0.3.3
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/IgnoreSigil:
  Description: 'All files must be at least at strictness `ignore`.'
  Enabled: false
  SuggestedStrictness: "ignore"
  VersionAdded: 0.3.3
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/ImplicitConversionMethod:
  Description: >-
    This cop disallows declaring implicit conversion methods, as sorbet does
    not support implicit conversion.
  Enabled: false
  VersionAdded: '<<next>>'

Sorbet/KeywordArgumentOrdering:
  Description: >-
                  Enforces a compatible keyword arguments with Sorbet.

                  All keyword arguments must be at the end of the parameters
                  list, and all keyword arguments with a default value must be
                  after those without default values.
  Enabled: true
  VersionAdded: 0.2.0

Sorbet/ObsoleteStrictMemoization:
  Description: >-
    This cop checks for the obsolete pattern for initializing instance variables that was required for older Sorbet
    versions in `#typed: strict` files.

    It's no longer required, as of Sorbet 0.5.10210
    See https://sorbet.org/docs/type-assertions#put-type-assertions-behind-memoization
  Enabled: true
  VersionAdded: '0.7.1'
  Safe: true
  SafeAutoCorrect: true

Sorbet/BuggyObsoleteStrictMemoization:
  Description: >-
    Checks for the a mistaken variant of the "obsolete memoization pattern" that used to be required
    for older Sorbet versions in `#typed: strict` files. The mistaken variant would overwrite the ivar with `nil`
    on every call, causing the memoized value to be discarded and recomputed on every call.

    This cop will correct it to read from the ivar instead of `nil`, which will memoize it correctly.

    The result of this correction will be the "obsolete memoization pattern", which can further be corrected by
    the `Sorbet/ObsoleteStrictMemoization` cop.

    See `Sorbet/ObsoleteStrictMemoization` for more details.
  Enabled: true
  VersionAdded: '0.7.3'
  Safe: true
  SafeAutoCorrect: false

Sorbet/RedundantExtendTSig:
  Description: >-
    Forbid the usage of redundant `extend T::Sig`.

    Only for use in applications that monkey patch `Module.include(T::Sig)` directly,
    where it is useful to reduce noise.
  Enabled: false
  Safe: false
  VersionAdded: 0.7.0

Sorbet/SignatureBuildOrder:
  Description: >-
                  Enforces the order of parts in a signature.

                  The order is first inheritance related builders,
                  then params, then return and finally the modifier
                  such as: `abstract.params(...).returns(...).soft`.'
  Enabled: true
  Order:
    - final
    - abstract
    - implementation
    - override
    - overridable
    - type_parameters
    - params
    - bind
    - returns
    - void
    - soft
    - checked
    - on_failure
  VersionAdded: 0.3.0

Sorbet/SingleLineRbiClassModuleDefinitions:
  Description: 'Empty class and module definitions in RBI must be on a single line.'
  Enabled: false
  VersionAdded: '0.6.0'
  Include:
  - "**/*.rbi"

Sorbet/StrictSigil:
  Description: 'All files must be at least at strictness `strict`.'
  Enabled: false
  SuggestedStrictness: "strict"
  VersionAdded: 0.3.3
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/StrongSigil:
  Description: 'All files must be at least at strictness `strong`.'
  Enabled: false
  SuggestedStrictness: "strong"
  VersionAdded: 0.3.3
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/TrueSigil:
  Description: 'All files must be at least at strictness `true`.'
  Enabled: false
  SuggestedStrictness: "true"
  VersionAdded: 0.3.3
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/TypeAliasName:
  Description: 'Type alias constant names must be in CamelCase.'
  Enabled: true
  VersionAdded: 0.6.6
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/ValidSigil:
  Description: 'All files must have a valid sigil.'
  Enabled: true
  RequireSigilOnAllFiles: false
  SuggestedStrictness: "false"
  MinimumStrictness: nil
  ExactStrictness: nil
  VersionAdded: 0.3.3
  Include:
  - "**/*.{rb,rbi,rake,ru}"
  Exclude:
  - bin/**/*
  - db/**/*.rb
  - script/**/*

Sorbet/VoidCheckedTests:
  Description: 'Forbid `.void.checked(:tests)`'
  Enabled: true
  VersionAdded: 0.7.7

Sorbet/MultipleTEnumValues:
  Description: 'Ensures that all `T::Enum`s have multiple values.'
  Enabled: true
  VersionAdded: 0.8.2

Sorbet/ForbidComparableTEnum:
  Description: 'Disallows including the `Comparable` module in a `T::Enum`.'
  Enabled: true
  VersionAdded: 0.8.2