Skip to content

RangeError: Maximum call stack size exceeded when calling getJsDocTags on getter of class that implements itselfΒ #60024

@auvred

Description

@auvred

πŸ”Ž Search Terms

findBaseOfDeclaration getJSDocTags getContextualJsDocTags getContextualDocumentationComment getDocumentationComment

πŸ•— Version & Regression Information

Regression after #46801

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.6.2#code/MYGwhgzhAECC0EsC2AHEBTJ6B2AXG8A3gFDTQDm6u0AHgBQCUAXNBLgE4LbnSHTtUAru2zQARGOgBfYjOAB7bG2jpoAXmjZ0AdziNi6AHQ1iAelMA9APxA

πŸ’» Code

class A implements A {
  get x(): string { return "" }
}
const e = new A()
e.x
//^?

πŸ™ Actual behavior

If you try to hover over x property in playground or IDE, or call symbol.getJsDocTags(checker) on it, a runtime exception will be thrown.

Error log (trying to call quickinfo in my editor)
ts_ls: 1: <semantic> TypeScript Server Error (5.6.2)
Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
    at getJSDocTagsWorker (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:15137:28)
    at getJSDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:15153:10)
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:172267:18
    at forEachUnique (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:137997:24)
    at Object.getJsDocTagsFromDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:172266:3)
    at getJsDocTagsOfDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149278:31)
    at SymbolObject.getContextualJsDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149109:44)
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149287:27
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149328:21
    at firstDefined (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:2307:20)
    at findBaseOfDeclaration (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149324:10)
    at getJsDocTagsOfDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149282:29)
    at SymbolObject.getContextualJsDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149109:44)
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149287:27
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149328:21
    at firstDefined (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:2307:20)
    at findBaseOfDeclaration (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149324:10)
    at getJsDocTagsOfDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149282:29)
    at SymbolObject.getContextualJsDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149109:44)
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149287:27
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149328:21
    at firstDefined (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:2307:20)
    at findBaseOfDeclaration (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149324:10)
    at getJsDocTagsOfDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149282:29)
    at SymbolObject.getContextualJsDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149109:44)
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149287:27
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149328:21
    at firstDefined (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:2307:20)
    at findBaseOfDeclaration (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149324:10)
    at getJsDocTagsOfDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149282:29)
    at SymbolObject.getContextualJsDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149109:44)
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149287:27
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149328:21
    at firstDefined (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:2307:20)
    at findBaseOfDeclaration (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149324:10)
    at getJsDocTagsOfDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149282:29)
    at SymbolObject.getContextualJsDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149109:44)
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149287:27
    at /tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149328:21
    at firstDefined (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:2307:20)
    at findBaseOfDeclaration (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149324:10)
    at getJsDocTagsOfDeclarations (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149282:29)
    at SymbolObject.getContextualJsDocTags (/tmp/repro/node_modules/.pnpm/[email protected]/node_modules/typescript/lib/typescript.js:149109:44)
    ...

πŸ™‚ Expected behavior

No infinite recursion.

Additional information about the issue

This was originally reported in typescript-eslint/typescript-eslint#10031

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions