2 /* --------------------------------------------------------------------------------------------
3 * Copyright (c) Microsoft Corporation. All rights reserved.
4 * Licensed under the MIT License. See License.txt in the project root for license information.
5 * ------------------------------------------------------------------------------------------ */
6 Object.defineProperty(exports, "__esModule", { value: true });
7 exports.attachPartialResult = exports.ProgressFeature = exports.attachWorkDone = void 0;
8 const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
9 const uuid_1 = require("./utils/uuid");
10 class WorkDoneProgressReporterImpl {
11 constructor(_connection, _token) {
12 this._connection = _connection;
14 WorkDoneProgressReporterImpl.Instances.set(this._token, this);
16 begin(title, percentage, message, cancellable) {
24 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
30 if (typeof arg0 === 'number') {
31 param.percentage = arg0;
32 if (arg1 !== undefined) {
39 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
42 WorkDoneProgressReporterImpl.Instances.delete(this._token);
43 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, { kind: 'end' });
46 WorkDoneProgressReporterImpl.Instances = new Map();
47 class WorkDoneProgressServerReporterImpl extends WorkDoneProgressReporterImpl {
48 constructor(connection, token) {
49 super(connection, token);
50 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
53 return this._source.token;
56 this._source.dispose();
60 this._source.cancel();
63 class NullProgressReporter {
73 class NullProgressServerReporter extends NullProgressReporter {
76 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
79 return this._source.token;
82 this._source.dispose();
85 this._source.cancel();
88 function attachWorkDone(connection, params) {
89 if (params === undefined || params.workDoneToken === undefined) {
90 return new NullProgressReporter();
92 const token = params.workDoneToken;
93 delete params.workDoneToken;
94 return new WorkDoneProgressReporterImpl(connection, token);
96 exports.attachWorkDone = attachWorkDone;
97 const ProgressFeature = (Base) => {
98 return class extends Base {
101 this._progressSupported = false;
103 initialize(capabilities) {
105 if (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.window) === null || _a === void 0 ? void 0 : _a.workDoneProgress) === true) {
106 this._progressSupported = true;
107 this.connection.onNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, (params) => {
108 let progress = WorkDoneProgressReporterImpl.Instances.get(params.token);
109 if (progress instanceof WorkDoneProgressServerReporterImpl || progress instanceof NullProgressServerReporter) {
115 attachWorkDoneProgress(token) {
116 if (token === undefined) {
117 return new NullProgressReporter();
120 return new WorkDoneProgressReporterImpl(this.connection, token);
123 createWorkDoneProgress() {
124 if (this._progressSupported) {
125 const token = uuid_1.generateUuid();
126 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, { token }).then(() => {
127 const result = new WorkDoneProgressServerReporterImpl(this.connection, token);
132 return Promise.resolve(new NullProgressServerReporter());
137 exports.ProgressFeature = ProgressFeature;
139 (function (ResultProgress) {
140 ResultProgress.type = new vscode_languageserver_protocol_1.ProgressType();
141 })(ResultProgress || (ResultProgress = {}));
142 class ResultProgressReporterImpl {
143 constructor(_connection, _token) {
144 this._connection = _connection;
145 this._token = _token;
148 this._connection.sendProgress(ResultProgress.type, this._token, data);
151 function attachPartialResult(connection, params) {
152 if (params === undefined || params.partialResultToken === undefined) {
155 const token = params.partialResultToken;
156 delete params.partialResultToken;
157 return new ResultProgressReporterImpl(connection, token);
159 exports.attachPartialResult = attachPartialResult;
160 //# sourceMappingURL=progress.js.map