Skip to content

bug: getCodeFixesAtPosition fails when TS2339 diagnostic paired with large pojo; Debug Failure. False expression: Token end is child end #54366

@wondersloth

Description

@wondersloth

Bug Report

🔎 Search Terms

  • Debug Failure. False expression: Token end is child end
  • getCodeFixesAtPosition
  • TS2339 Property 'x' does not exist on type 'Y'

🕗 Version & Regression Information

  • This is a crash
  • Found this issue on 5.0.4 and still exists at @next of 5.2.0-dev.20230521
  • Validated the bug still exists at 4.9.3

⏯ Playground Link

Playground link with relevant code

💻 Code

import { External } from 'some-package'; // This package has an unknown implementation. No Types.

export default class Something extends External {
  constructor(...args) {
    super(...args);
    this.setRoutes({
      'pizza.a': '',
      'pizza.b': '',
      'pizza.c': '',
      'pizza.d': '',
      'pizza.e': '',
      'pizza.f': '',
      'pizza.g': '',
      'pizza.h': '',
      'pizza.i': '',
      'pizza.j': '',
      'pizza.k': '',
      'pizza.l': '',
      'pizza.m': '',
      'pizza.n': '',
      'pizza.o': '',
      'pizza.p': '',
      'pizza.q': '',
      'pizza.r': '',
      'pizza.s': '',
      'pizza.t': '',
      'pizza.u': '',
      'pizza.v': '',
      'pizza.w': '',
      'pizza.x': '',
      'pizza.y': '',
      'pizza.z': '',
    });
  }
}

🙁 Actual behavior

Uncaught Error Error: Debug Failure. False expression: Token end is child end
    at fail (/node_modules/typescript/lib/typescript.js:1811:19)
    at assert (/node_modules/typescript/lib/typescript.js:1830:13)
    at processChildNode (/node_modules/typescript/lib/typescript.js:166208:19)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:166139:11)
    at visitNode2 (/node_modules/typescript/lib/typescript.js:27583:20)
    at forEachChildInPropertySignature (/node_modules/typescript/lib/typescript.js:28046:65)
    at forEachChild (/node_modules/typescript/lib/typescript.js:27676:37)
    at processNode (/node_modules/typescript/lib/typescript.js:166136:7)
    at processChildNode (/node_modules/typescript/lib/typescript.js:166215:9)
    at processChildNodes (/node_modules/typescript/lib/typescript.js:166258:34)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:166152:11)
    at visitNodes (/node_modules/typescript/lib/typescript.js:27588:16)
    at forEachChildInTypeLiteral (/node_modules/typescript/lib/typescript.js:28105:18)
    at forEachChild (/node_modules/typescript/lib/typescript.js:27676:37)
    at processNode (/node_modules/typescript/lib/typescript.js:166136:7)
    at processChildNode (/node_modules/typescript/lib/typescript.js:166215:9)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:166139:11)
    at visitNode2 (/node_modules/typescript/lib/typescript.js:27583:20)
    at forEachChildInParameter (/node_modules/typescript/lib/typescript.js:28040:183)
    at forEachChild (/node_modules/typescript/lib/typescript.js:27676:37)
    at processNode (/node_modules/typescript/lib/typescript.js:166136:7)
    at processChildNode (/node_modules/typescript/lib/typescript.js:166215:9)
    at processChildNodes (/node_modules/typescript/lib/typescript.js:166258:34)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:166152:11)
    at visitNodes (/node_modules/typescript/lib/typescript.js:27588:16)
    at forEachChildInMethodDeclaration (/node_modules/typescript/lib/typescript.js:28069:279)
    at forEachChild (/node_modules/typescript/lib/typescript.js:27676:37)
    at processNode (/node_modules/typescript/lib/typescript.js:166136:7)
    at formatSpanWorker (/node_modules/typescript/lib/typescript.js:165944:7)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:165884:107)
    at getFormattingScanner (/node_modules/typescript/lib/typescript.js:164659:17)
    at formatNodeGivenIndentation (/node_modules/typescript/lib/typescript.js:165884:12)
    at getFormattedTextOfNode (/node_modules/typescript/lib/typescript.js:164392:49)
    at format (/node_modules/typescript/lib/typescript.js:164372:33)
    at computeNewText (/node_modules/typescript/lib/typescript.js:164373:225)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:164334:31)
    at mapDefined (/node_modules/typescript/lib/typescript.js:374:24)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:164332:34)
    at mapDefined (/node_modules/typescript/lib/typescript.js:374:24)
    at getTextChangesFromChanges (/node_modules/typescript/lib/typescript.js:164326:18)
    at getChanges (/node_modules/typescript/lib/typescript.js:164314:41)
    at with (/node_modules/typescript/lib/typescript.js:163812:26)
    at addMethodDeclarationChanges (/node_modules/typescript/lib/typescript.js:142592:102)
    at getActionsForMissingMethodDeclaration (/node_modules/typescript/lib/typescript.js:142593:61)
    at getCodeActions (/node_modules/typescript/lib/typescript.js:142913:30)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:137216:48)
    at flatMap (/node_modules/typescript/lib/typescript.js:303:19)
    at getFixes (/node_modules/typescript/lib/typescript.js:137216:12)
    at <anonymous> (/node_modules/typescript/lib/typescript.js:133697:35)
    at flatMap (/node_modules/typescript/lib/typescript.js:303:19)
    at getCodeFixesAtPosition (/node_modules/typescript/lib/typescript.js:133695:14)

🙂 Expected behavior

getCodeFixesAtPosition returns an empty array of codefixes without throwing an error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: LS: Quick FixesEditor-provided fixes, often called code actions.

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions