提交 b115d886 编写于 作者: M Matt Bierner

Extract loadingIndicator to class

上级 300f1b8d
...@@ -54,7 +54,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType ...@@ -54,7 +54,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
private lastStart: number; private lastStart: number;
private numberRestarts: number; private numberRestarts: number;
private isRestarting: boolean = false; private isRestarting: boolean = false;
private _tsServerLoading: { resolve: () => void, reject: () => void } | undefined; private loadingIndicator = new ServerInitializingIndicator();
public readonly telemetryReporter: TelemetryReporter; public readonly telemetryReporter: TelemetryReporter;
/** /**
...@@ -150,10 +150,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType ...@@ -150,10 +150,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
this.forkedTsServer.kill(); this.forkedTsServer.kill();
} }
if (this._tsServerLoading) { this.loadingIndicator.stop();
this._tsServerLoading.reject();
this._tsServerLoading = undefined;
}
} }
public restartTsServer(): void { public restartTsServer(): void {
...@@ -322,17 +319,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType ...@@ -322,17 +319,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
this.forkedTsServer = handle; this.forkedTsServer = handle;
this._onTsServerStarted.fire(currentVersion.version); this._onTsServerStarted.fire(currentVersion.version);
if (this._tsServerLoading) { this.loadingIndicator.start(this._apiVersion);
this._tsServerLoading.reject();
}
if (this._apiVersion.gte(API.v300)) {
vscode.window.withProgress({
location: vscode.ProgressLocation.Window,
title: localize('serverLoading.progress', "Initializing JS/TS language features"),
}, () => new Promise((resolve, reject) => {
this._tsServerLoading = { resolve, reject };
}));
}
this.serviceStarted(resendModels); this.serviceStarted(resendModels);
...@@ -437,10 +424,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType ...@@ -437,10 +424,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
} }
private serviceExited(restart: boolean): void { private serviceExited(restart: boolean): void {
if (this._tsServerLoading) { this.loadingIndicator.stop();
this._tsServerLoading.reject();
this._tsServerLoading = undefined;
}
enum MessageAction { enum MessageAction {
reportIssue reportIssue
...@@ -611,10 +595,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType ...@@ -611,10 +595,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
case 'semanticDiag': case 'semanticDiag':
case 'suggestionDiag': case 'suggestionDiag':
// This event also roughly signals that project has been loaded successfully // This event also roughly signals that project has been loaded successfully
if (this._tsServerLoading) { this.loadingIndicator.stop();
this._tsServerLoading.resolve();
this._tsServerLoading = undefined;
}
const diagnosticEvent = event as Proto.DiagnosticEvent; const diagnosticEvent = event as Proto.DiagnosticEvent;
if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) { if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) {
...@@ -743,3 +724,30 @@ function getDignosticsKind(event: Proto.Event) { ...@@ -743,3 +724,30 @@ function getDignosticsKind(event: Proto.Event) {
} }
throw new Error('Unknown dignostics kind'); throw new Error('Unknown dignostics kind');
} }
class ServerInitializingIndicator extends Disposable {
private _tsServerLoading?: { resolve: () => void, reject: () => void };
public start(apiVersion: API) {
if (this._tsServerLoading) {
this._tsServerLoading.reject();
}
if (apiVersion.gte(API.v300)) {
vscode.window.withProgress({
location: vscode.ProgressLocation.Window,
title: localize('serverLoading.progress', "Initializing JS/TS language features"),
}, () => new Promise((resolve, reject) => {
this._tsServerLoading = { resolve, reject };
}));
}
}
public stop() {
if (this._tsServerLoading) {
this._tsServerLoading.reject();
this._tsServerLoading = undefined;
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册