Skip to content

Using a of property declared after an initializing constructor triggers an assertion failure in JS #51521

Closed
@DanielRosenwasser

Description

@DanielRosenwasser

This is only valid TS, but it causes a debug failure in JS.

class Printer {
  constructor() {
    this.prop = format;
  }
  declare prop: string;
  method() {
    this.prop.oops/*quick info or diagnostics*/
  }
}
⚠️ Note that typescript-4.8.4 also had errors ⚠️
Req #478 - completionInfo
    at getConstructorDefinedThisAssignmentTypes (/typescript-4.8.4/lib/tsserver.js:56965:22)
    at getWidenedTypeForAssignmentDeclaration (/typescript-4.8.4/lib/tsserver.js:56783:90)
    at getTypeOfVariableOrParameterOrPropertyWorker (/typescript-4.8.4/lib/tsserver.js:57191:24)
    at getTypeOfVariableOrParameterOrProperty (/typescript-4.8.4/lib/tsserver.js:57117:28)
    at getTypeOfSymbol (/typescript-4.8.4/lib/tsserver.js:57489:24)
    at checkPropertyAccessExpressionOrQualifiedName (/typescript-4.8.4/lib/tsserver.js:75543:126)
    at checkPropertyAccessExpression (/typescript-4.8.4/lib/tsserver.js:75330:17)
    at getSymbolOfNameOrPropertyAccessExpression (/typescript-4.8.4/lib/tsserver.js:87403:25)
    at getSymbolAtLocation (/typescript-4.8.4/lib/tsserver.js:87510:32)
    at Object.getSymbolAtLocation (/typescript-4.8.4/lib/tsserver.js:48862:31)
    at getTypeScriptMemberSymbols (/typescript-4.8.4/lib/tsserver.js:135331:46)
    at getCompletionData (/typescript-4.8.4/lib/tsserver.js:135240:17)
    at Object.getCompletionsAtPosition (/typescript-4.8.4/lib/tsserver.js:133845:34)
    at Object.getCompletionsAtPosition (/typescript-4.8.4/lib/tsserver.js:167309:35)
    at IOSession.Session.getCompletions (/typescript-4.8.4/lib/tsserver.js:179441:64)
    at Session.handlers.ts.Map.ts.getEntries._a.<computed> (/typescript-4.8.4/lib/tsserver.js:178114:61)
    at /typescript-4.8.4/lib/tsserver.js:180174:96
    at IOSession.Session.executeWithRequestId (/typescript-4.8.4/lib/tsserver.js:180165:28)
    at IOSession.Session.executeCommand (/typescript-4.8.4/lib/tsserver.js:180174:41)
    at IOSession.Session.onMessage (/typescript-4.8.4/lib/tsserver.js:180202:35)
    at Interface.<anonymous> (/typescript-4.8.4/lib/tsserver.js:184338:31)
Req #478 - completionInfo
    at getConstructorDefinedThisAssignmentTypes (/typescript-5.0.0-dev.20221113/lib/tsserver.js:50243:13)
    at getWidenedTypeForAssignmentDeclaration (/typescript-5.0.0-dev.20221113/lib/tsserver.js:50075:80)
    at getTypeOfVariableOrParameterOrPropertyWorker (/typescript-5.0.0-dev.20221113/lib/tsserver.js:50430:16)
    at getTypeOfVariableOrParameterOrProperty (/typescript-5.0.0-dev.20221113/lib/tsserver.js:50370:22)
    at getTypeOfSymbol (/typescript-5.0.0-dev.20221113/lib/tsserver.js:50675:16)
    at checkPropertyAccessExpressionOrQualifiedName (/typescript-5.0.0-dev.20221113/lib/tsserver.js:65303:118)
    at checkPropertyAccessExpression (/typescript-5.0.0-dev.20221113/lib/tsserver.js:65091:96)
    at getSymbolOfNameOrPropertyAccessExpression (/typescript-5.0.0-dev.20221113/lib/tsserver.js:75191:13)
    at getSymbolAtLocation (/typescript-5.0.0-dev.20221113/lib/tsserver.js:75298:20)
    at Object.getSymbolAtLocation (/typescript-5.0.0-dev.20221113/lib/tsserver.js:43137:23)
    at getTypeScriptMemberSymbols (/typescript-5.0.0-dev.20221113/lib/tsserver.js:134619:34)
    at getCompletionData (/typescript-5.0.0-dev.20221113/lib/tsserver.js:134538:7)
    at Object.getCompletionsAtPosition (/typescript-5.0.0-dev.20221113/lib/tsserver.js:133244:28)
    at Object.getCompletionsAtPosition2 [as getCompletionsAtPosition] (/typescript-5.0.0-dev.20221113/lib/tsserver.js:121773:37)
    at IOSession.getCompletions (/typescript-5.0.0-dev.20221113/lib/tsserver.js:159375:56)
    at completionInfo (/typescript-5.0.0-dev.20221113/lib/tsserver.js:158054:45)
    at /typescript-5.0.0-dev.20221113/lib/tsserver.js:160076:71
    at IOSession.executeWithRequestId (/typescript-5.0.0-dev.20221113/lib/tsserver.js:160068:16)
    at IOSession.executeCommand (/typescript-5.0.0-dev.20221113/lib/tsserver.js:160076:31)
    at IOSession.onMessage (/typescript-5.0.0-dev.20221113/lib/tsserver.js:160104:53)
    at Interface.<anonymous> (/typescript-5.0.0-dev.20221113/lib/tsserver.js:161639:16)

That is a filtered view of the text. To see the raw error text, go to RepoResults1/babel.babel.rawError.txt in the artifact folder

Last few requests

{"seq":475,"type":"request","command":"completionEntryDetails","arguments":{"file":"@PROJECT_ROOT@/packages/babel-generator/test/fixtures/sourcemaps/real-world-babel-file2/output.js","line":568,"offset":32,"entryNames":["arguments"]}}
{"seq":476,"type":"request","command":"references","arguments":{"file":"@PROJECT_ROOT@/packages/babel-generator/test/fixtures/sourcemaps/real-world-babel-file2/output.js","line":591,"offset":13}}
{"seq":477,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/packages/babel-generator/test/fixtures/sourcemaps/real-world-babel-file2/output.js","line":596,"offset":59,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":2,"triggerCharacter":" "}}
{"seq":478,"type":"request","command":"completionInfo","arguments":{"file":"@PROJECT_ROOT@/packages/babel-generator/test/fixtures/sourcemaps/real-world-babel-file2/output.js","line":616,"offset":29,"includeExternalModuleExports":false,"includeInsertTextCompletions":true,"triggerKind":2,"triggerCharacter":"."}}

Repro Steps

  1. git clone https://github.com/babel/babel --recurse-submodules
  2. In dir babel, run git reset --hard 088b28a062fdc5351480acf559a680faca72a0fe
  3. Back in the initial folder, download RepoResults1/babel.babel.replay.txt from the artifact folder
  4. npm install --no-save @typescript/server-replay
  5. npx tsreplay ./babel ./babel.babel.replay.txt path/to/tsserver.js
  6. npx tsreplay --help to learn about helpful switches for debugging, logging, etc

Originally posted by @typescript-bot in #51510 (comment)

Metadata

Metadata

Assignees

Labels

Crawler-DetectedDetected by a crawler running random TSServer operations on public code.Domain: JavaScriptThe issue relates to JavaScript specificallyEffort: ModerateRequires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual".Fix AvailableA PR has been opened for this issueHelp WantedYou can do this

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions