Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
DanielRosenwasser opened this issue Nov 14, 2022 · 0 comments · Fixed by #51524
Assignees
Labels
Crawler-Detected Detected by a crawler running random TSServer operations on public code. Domain: JavaScript The issue relates to JavaScript specifically Effort: Moderate Requires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual". Fix Available A PR has been opened for this issue Help Wanted You can do this

Comments

@DanielRosenwasser
Copy link
Member

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)

@DanielRosenwasser DanielRosenwasser added Help Wanted You can do this Effort: Moderate Requires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual". Domain: JavaScript The issue relates to JavaScript specifically labels Nov 14, 2022
@DanielRosenwasser DanielRosenwasser changed the title Using a of property declared after an initializing constructor triggers and assertion failure in JS Using a of property declared after an initializing constructor triggers an assertion failure in JS Nov 14, 2022
@DanielRosenwasser DanielRosenwasser added the Crawler-Detected Detected by a crawler running random TSServer operations on public code. label Nov 14, 2022
@DanielRosenwasser DanielRosenwasser added this to the TypeScript 5.0.1 milestone Nov 14, 2022
@typescript-bot typescript-bot added the Fix Available A PR has been opened for this issue label Nov 14, 2022
jakebailey pushed a commit that referenced this issue Jan 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Crawler-Detected Detected by a crawler running random TSServer operations on public code. Domain: JavaScript The issue relates to JavaScript specifically Effort: Moderate Requires experience with the TypeScript codebase, but feasible. Harder than "Effort: Casual". Fix Available A PR has been opened for this issue Help Wanted You can do this
Projects
None yet
3 participants