Skip to content

Circular declarations cause infinite loops in getExportInfos since v5.5 #59201

Closed
@simon-paris

Description

@simon-paris

🔎 Search Terms

infinite loop, circular, infinite loop, getExportInfos, invalid array length

🕗 Version & Regression Information

⏯ Playground Link

Does not reproduce on playground

💻 Code

In an empty folder, place this code in types.d.ts

declare module "mymod" {
  import mymod from "mymod";
  export default mymod;
}

In another file index.ts, trigger an autocomplete or getCodeFixes. Typing two characters into an empty file will usually work. It will hang.

🙁 Actual behavior

The LSP server go into an infinite loop and hangs. After about 20 seconds it'll throw because an array gets too big.

The server log contains:

    RangeError: Invalid array length
        at Array.push (<anonymous>)
        at append (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:2822:6)
        at forEachNameOfDefaultExport (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:138888:13)
        at /Users/myusername/mweb/node_modules/typescript/lib/typescript.js:155493:115
        at /Users/myusername/mweb/node_modules/typescript/lib/typescript.js:138720:119
        at forEachExternalModule (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:138763:7)
        at forEachExternalModuleToImportFrom (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:138720:3)
        at getExportInfos (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:155488:3)
        at /Users/myusername/mweb/node_modules/typescript/lib/typescript.js:155424:24
        at flatMap (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:2502:17)
        at getFixesInfoForNonUMDImport (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:155418:10)
        at getFixInfos (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:155254:12)
        at Object.getCodeActions (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:154389:18)
        at /Users/myusername/mweb/node_modules/typescript/lib/typescript.js:151448:46
        at flatMap (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:2502:17)
        at Object.getFixes (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:151448:10)
        at /Users/myusername/mweb/node_modules/typescript/lib/typescript.js:149730:33
        at flatMap (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:2502:17)
        at Object.getCodeFixesAtPosition (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:149728:12)
        at IpcIOSession.getCodeFixes (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:191339:50)
        at getCodeFixes (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:189374:43)
        at /Users/myusername/mweb/node_modules/typescript/lib/typescript.js:191661:15
        at IpcIOSession.executeWithRequestId (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:191650:14)
        at IpcIOSession.executeCommand (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:191659:29)
        at IpcIOSession.onMessage (/Users/myusername/mweb/node_modules/typescript/lib/typescript.js:191707:68)
        at process.<anonymous> (/Users/myusername/mweb/node_modules/typescript/lib/tsserver.js:525:14)
        at process.emit (node:events:514:28)
        at emit (node:internal/child_process:951:14)
        at process.processTicksAndRejections (node:internal/process/task_queues:83:21)
Screenshot 2024-07-09 at 10 06 41 PM

🙂 Expected behavior

Nothing should happen.

Additional information about the issue

No response

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptCrashFor flagging bugs which are compiler or service crashes or unclean exits, rather than bad outputFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions