Skip to content

Commit 25ebc12

Browse files
committed
fix
1 parent 1cf58c3 commit 25ebc12

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

.vscode/tasks.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,16 @@
3939
"label": "gulp: services",
4040
"problemMatcher": [
4141
"$tsc"
42+
]
43+
},
44+
{
45+
"type": "gulp",
46+
"task": "watch-tsserver",
47+
"problemMatcher": [
48+
"$gulp-tsc"
4249
],
50+
"group": "build",
51+
"label": "gulp: watch-tsserver"
4352
}
4453
]
4554
}

src/tsconfig-base.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"compilerOptions": {
33
"pretty": true,
44
"lib": ["es2015.iterable", "es2015.generator", "es5"],
5-
"target": "es5",
5+
"target": "es2018",
66
"moduleResolution": "classic",
77
"rootDir": ".",
88

src/tsserver/server.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -481,18 +481,17 @@ namespace ts.server {
481481
private eventPort: number | undefined;
482482
private eventSocket: NodeSocket | undefined;
483483
private socketEventQueue: { body: any, eventName: string }[] | undefined;
484+
/** No longer needed if syntax target is es6 or above. Any access to "this" before initialized will be a runtime error. */
484485
private constructed: boolean | undefined;
485486

486487
constructor() {
487-
let isConstructed = false;
488488
const event: Event | undefined = (body: object, eventName: string) => {
489-
if (isConstructed) {
489+
try {
490490
this.event(body, eventName);
491-
}
492-
else {
493-
// It is unsafe to dereference `this` before initialization completes,
494-
// so we defer until the next tick.
495-
//
491+
} catch(e) {
492+
// ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor in ES6 or above
493+
if (!(e instanceof ReferenceError)) throw e;
494+
// It is unsafe to reference `this` before initialization completes, so we defer until the next tick.
496495
// Construction should finish before the next tick fires, so we do not need to do this recursively.
497496
// eslint-disable-next-line no-restricted-globals
498497
setImmediate(() => this.event(body, eventName));
@@ -540,7 +539,6 @@ namespace ts.server {
540539
}
541540

542541
this.constructed = true;
543-
isConstructed = true;
544542
}
545543

546544
event<T extends object>(body: T, eventName: string): void {

0 commit comments

Comments
 (0)