Skip to content

Bug: [no-unsafe-return] Infinite recursion with thenable this return type #10868

Closed
@Zamralik

Description

@Zamralik

Before You File a Bug Report Please Confirm You Have Done The Following...

  • I have tried restarting my IDE and the issue persists.
  • I have updated to the latest version of the packages.
  • I have searched for related issues and found none that matched my issue.
  • I have read the FAQ and my problem is not listed.

Playground Link

https://typescript-eslint.io/play/#ts=5.7.2&fileType=.ts&code=MYGwhgzhAEBiD29oG8CwAoa0AOBXARiAJbDQDmApgC4CSVEFIAZgBQCUAXNFQBZExpMWaACdquEQDtufCAG4MWAL4ZFOEfCoVgWgCYyKklmIjwQANwpd20ALwA%2BaOfhFdnJy-2DhoiqYsU7ApCKuihQA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Jge1tieQEMAZolrRE%2BWNCbooiaNA7RI4MAF8QKoA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false

Repro Code

class Foo {
  public getItself(): this {
    return this;
  }

  protected then(resolve: () => void): void {
    resolve();
  }
}

ESLint Config

module.exports = {
  parser: "@typescript-eslint/parser",
  rules: {
    "@typescript-eslint/no-unsafe-return": "error",
  },
};

tsconfig

{
  "compilerOptions": {
    "strictNullChecks": true
  }
}

Expected Result

No error, nor ESLint crash.

Actual Result

ESLint will crash because of an infinite recursion of the discriminateAnyType function in type-utils/dist/predicates.js

Additional Info

When a class has a method return this and this is also a Thenable, discriminateAnyType tries to checker.getAwaitedType on it. I assume it results in the same this type, which is then recursively checked infinitely.

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issuebugSomething isn't workinglocked due to agePlease open a new issue if you'd like to say more. See https://typescript-eslint.io/contributing.package: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions