microsoft / TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
https://www.typescriptlang.org
Apache License 2.0
100.51k stars 12.43k forks source link

TS language service keeps crashing #48701

Closed fluggo closed 1 year ago

fluggo commented 2 years ago

Issue Type: Bug

Not at all sure why this happens. One of the stack traces goes like this:

[2022-04-07 17:58:57.661] [exthost] [error] Error: <semantic> TypeScript Server Error (4.6.3)
BADCLIENT: Bad error code, 7027 not found in range 1586..1595 (found: false, false, false, false); could have caused this error:
Debug Failure. Token and statement should start at the same point. {"statementKind":"ReturnStatement","tokenKind":"AsKeyword","errorCode":7027,"start":1586,"length":9}
Error: BADCLIENT: Bad error code, 7027 not found in range 1586..1595 (found: false, false, false, false); could have caused this error:
Debug Failure. Token and statement should start at the same point. {"statementKind":"ReturnStatement","tokenKind":"AsKeyword","errorCode":7027,"start":1586,"length":9}
    at doChange (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:152864:26)
    at /vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:152847:96
    at Function.ChangeTracker.with (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:145719:17)
    at Object.getCodeActions (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:152847:64)
    at /vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:146964:77
    at Object.flatMap (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:508:25)
    at Object.getFixes (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:146964:23)
    at /vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:162191:35
    at Object.flatMap (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:508:25)
    at Object.getCodeFixesAtPosition (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:162189:23)
    at IpcIOSession.Session.getCodeFixes (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:173756:64)
    at Session.handlers.ts.Map.ts.getEntries._a.<computed> (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:172389:61)
    at /vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:174069:88
    at IpcIOSession.Session.executeWithRequestId (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:174060:28)
    at IpcIOSession.Session.executeCommand (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:174069:33)
    at IpcIOSession.Session.onMessage (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:174095:35)
    at process.<anonymous> (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/node_modules/typescript/lib/tsserver.js:176730:31)
    at process.emit (node:events:390:28)
    at emit (node:internal/child_process:917:12)
    at processTicksAndRejections (node:internal/process/task_queues:84:21)
    at Function.create (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/typescript-language-features/dist/extension.js:1:502930)
    at dispatchResponse (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/typescript-language-features/dist/extension.js:1:496778)
    at dispatchMessage (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/typescript-language-features/dist/extension.js:1:495646)
    at ChildProcess.<anonymous> (/vscode/vscode-server/bin/linux-x64/e18005f0f1b33c29e81d732535d8c0e47cafb0b5/extensions/typescript-language-features/dist/extension.js:1:495131)
    at ChildProcess.emit (node:events:390:28)
    at emit (node:internal/child_process:917:12)
    at processTicksAndRejections (node:internal/process/task_queues:84:21)

VS Code version: Code 1.66.0 (e18005f0f1b33c29e81d732535d8c0e47cafb0b5, 2022-03-30T05:50:04.419Z) OS version: Darwin x64 20.6.0 Restricted Mode: No Remote OS version: Linux x64 5.10.76-linuxkit

System Info |Item|Value| |---|---| |CPUs|Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz (12 x 2200)| |GPU Status|2d_canvas: enabled
canvas_oop_rasterization: disabled_off
direct_rendering_display_compositor: disabled_off_ok
gpu_compositing: enabled
metal: disabled_off
multiple_raster_threads: enabled_on
oop_rasterization: enabled
opengl: enabled_on
rasterization: enabled
raw_draw: disabled_off_ok
skia_renderer: enabled_on
video_decode: enabled
video_encode: enabled
webgl: enabled
webgl2: enabled| |Load (avg)|6, 6, 5| |Memory (System)|16.00GB (0.22GB free)| |Process Argv|--crash-reporter-id 961ba054-15e1-4479-bbbb-27dee222b72d| |Screen Reader|no| |VM|0%| |Item|Value| |---|---| |Remote|Dev Container: Node.js| |OS|Linux x64 5.10.76-linuxkit| |CPUs|Intel(R) Core(TM) i7-8750H CPU @ 2.20GHz (6 x 2200)| |Memory (System)|3.84GB (0.40GB free)| |VM|0%|
Extensions (9) Extension|Author (truncated)|Version ---|---|--- ndjson-colorizer|bus|1.0.0 jupyter-keymap|ms-|1.0.0 remote-containers|ms-|0.231.5 remote-ssh|ms-|0.78.0 remote-ssh-edit|ms-|0.80.0 debugger-for-chrome|msj|4.13.0 vscode-eslint|dba|2.2.2 go|gol|0.32.0 vscode-docker|ms-|1.21.0
A/B Experiments ``` vsliv368cf:30146710 vsreu685:30147344 python383:30185418 vspor879:30202332 vspor708:30202333 vspor363:30204092 vswsl492cf:30256860 pythonvspyl392:30443607 pythontb:30283811 pythonptprofiler:30281270 vshan820:30294714 vstes263cf:30335440 vscorecescf:30445987 pythondataviewer:30285071 vscod805cf:30301675 pythonvspyt200:30340761 binariesv615:30325510 bridge0708:30335490 bridge0723:30353136 vsaa593cf:30376535 vsc1dst:30438360 pythonvs932:30410667 wslgetstarted:30449410 pythonvsnew555:30457759 vscscmwlcmt:30465135 vscaat:30438848 pynewfile477:30463512 ```
mjbvz commented 2 years ago

Does this reproduce in the latest VS Code insiders build with all extensions disabled?

fluggo commented 2 years ago

@mjbvz So far, no. I'm still using the remote dev container extension, but the language service remains stable. So either one of my extensions is to blame (such as ESLint), or my version of VS Code is to blame.

mjbvz commented 2 years ago

Thanks for testing. Closing this as not-reproducible based on this feedback. Hopefully it's already been fixed

fluggo commented 2 years ago

Spoke too soon, looks like I did receive a crash with all extensions disabled, with another common error I see:

[2022-04-12 19:25:44.782] [exthost] [error] Error: <semantic> TypeScript Server Error (4.6.3)
Cannot read properties of undefined (reading 'flags')
TypeError: Cannot read properties of undefined (reading 'flags')
    at Object.getCheckFlags (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:19092:23)
    at getTypeOfSymbol (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:55556:33)
    at getTypeOfParameter (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:75768:24)
    at tryGetTypeAtPosition (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:75852:24)
    at getTypeAtPosition (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:75847:20)
    at getContextualTypeForArgumentAtIndex (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:71025:17)
    at Object.getContextualTypeForArgumentAtIndex (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:47280:32)
    at getInfo (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:151309:40)
    at Object.getCodeActionsToCorrectReturnValue [as getCodeActions] (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:151188:28)
    at /vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:146964:77
    at Object.flatMap (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:508:25)
    at Object.getFixes (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:146964:23)
    at /vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:162191:35
    at Object.flatMap (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:508:25)
    at Object.getCodeFixesAtPosition (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:162189:23)
    at IpcIOSession.Session.getCodeFixes (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:173756:64)
    at Session.handlers.ts.Map.ts.getEntries._a.<computed> (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:172389:61)
    at /vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:174069:88
    at IpcIOSession.Session.executeWithRequestId (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:174060:28)
    at IpcIOSession.Session.executeCommand (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:174069:33)
    at IpcIOSession.Session.onMessage (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:174095:35)
    at process.<anonymous> (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/node_modules/typescript/lib/tsserver.js:176730:31)
    at process.emit (node:events:390:28)
    at emit (node:internal/child_process:917:12)
    at processTicksAndRejections (node:internal/process/task_queues:84:21)
    at Function.create (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/typescript-language-features/dist/extension.js:1:503030)
    at dispatchResponse (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/typescript-language-features/dist/extension.js:1:496878)
    at dispatchMessage (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/typescript-language-features/dist/extension.js:1:495746)
    at ChildProcess.<anonymous> (/vscode/vscode-server-insiders/bin/linux-x64/b84feecf9231d404a766e251f8a37c730089511b-insider/extensions/typescript-language-features/dist/extension.js:1:495231)
    at ChildProcess.emit (node:events:390:28)
    at emit (node:internal/child_process:917:12)
    at processTicksAndRejections (node:internal/process/task_queues:84:21)
mjbvz commented 2 years ago

Same stack as #32875

@fluggo Can you share the file / project that seems to cause this issue?

rhefner commented 2 years ago

Cannot read properties of undefined (reading 'flags')

This is also happening to me .. At least in my case, seems related to #40991 as commenting out esModuleInterop from my tsconfig.json stops the crashing and re-enabling it reintroduces the crashes. Happens with all extensions disabled, no .vscode/ files in the repo and also happens on VSCode Insiders. Using a PNPM monorepo w/typescirpt@4.7.3, but also tried with typescript@next (4.8.0-dev.20220624) with the same result.

Here's a copy of the tsserver.log with the private stuff redacted: https://gist.github.com/rhefner/5ad0aa5225d9e56ad2e436c0eb885a83

UPDATE

My issue seems to be caused by one of my ambient type files (loglevel.d.ts) - Commenting out export = log stops the crashes, but also do a few other modifications.

import * as log from 'loglevel'
export as namespace log
export = log // Commenting this out stops the crashes in my case

declare global {
  const log: typeof log
}

...Not sure why that's crashing tsserver, as it seems that's it's allowed - I'm probably missing something very trivial. 😅 Anyways, changing it around to this seems to fix the crashes for me:

declare global {
  const log: typeof import('loglevel')
}

export {}
DanielRosenwasser commented 1 year ago

Thank you @rhefner - here's a minimal repro based on that.

here's a repro:

// bar.d.ts
import * as foo from './foo'
export as namespace foo
export = foo;

declare global {
    const foo: typeof foo;
}
// foo.d.ts
interface Root {
    /**
     * A .default property for ES6 default import compatibility
     */
    default: Root;
}

declare const root: Root;
export = root;