initial commit
This commit is contained in:
160
node_modules/vscode-languageserver/lib/common/progress.js
generated
vendored
Normal file
160
node_modules/vscode-languageserver/lib/common/progress.js
generated
vendored
Normal file
@@ -0,0 +1,160 @@
|
||||
"use strict";
|
||||
/* --------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
* ------------------------------------------------------------------------------------------ */
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.attachPartialResult = exports.ProgressFeature = exports.attachWorkDone = void 0;
|
||||
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
||||
const uuid_1 = require("./utils/uuid");
|
||||
class WorkDoneProgressReporterImpl {
|
||||
constructor(_connection, _token) {
|
||||
this._connection = _connection;
|
||||
this._token = _token;
|
||||
WorkDoneProgressReporterImpl.Instances.set(this._token, this);
|
||||
}
|
||||
begin(title, percentage, message, cancellable) {
|
||||
let param = {
|
||||
kind: 'begin',
|
||||
title,
|
||||
percentage,
|
||||
message,
|
||||
cancellable
|
||||
};
|
||||
this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
|
||||
}
|
||||
report(arg0, arg1) {
|
||||
let param = {
|
||||
kind: 'report'
|
||||
};
|
||||
if (typeof arg0 === 'number') {
|
||||
param.percentage = arg0;
|
||||
if (arg1 !== undefined) {
|
||||
param.message = arg1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
param.message = arg0;
|
||||
}
|
||||
this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
|
||||
}
|
||||
done() {
|
||||
WorkDoneProgressReporterImpl.Instances.delete(this._token);
|
||||
this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, { kind: 'end' });
|
||||
}
|
||||
}
|
||||
WorkDoneProgressReporterImpl.Instances = new Map();
|
||||
class WorkDoneProgressServerReporterImpl extends WorkDoneProgressReporterImpl {
|
||||
constructor(connection, token) {
|
||||
super(connection, token);
|
||||
this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
|
||||
}
|
||||
get token() {
|
||||
return this._source.token;
|
||||
}
|
||||
done() {
|
||||
this._source.dispose();
|
||||
super.done();
|
||||
}
|
||||
cancel() {
|
||||
this._source.cancel();
|
||||
}
|
||||
}
|
||||
class NullProgressReporter {
|
||||
constructor() {
|
||||
}
|
||||
begin() {
|
||||
}
|
||||
report() {
|
||||
}
|
||||
done() {
|
||||
}
|
||||
}
|
||||
class NullProgressServerReporter extends NullProgressReporter {
|
||||
constructor() {
|
||||
super();
|
||||
this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
|
||||
}
|
||||
get token() {
|
||||
return this._source.token;
|
||||
}
|
||||
done() {
|
||||
this._source.dispose();
|
||||
}
|
||||
cancel() {
|
||||
this._source.cancel();
|
||||
}
|
||||
}
|
||||
function attachWorkDone(connection, params) {
|
||||
if (params === undefined || params.workDoneToken === undefined) {
|
||||
return new NullProgressReporter();
|
||||
}
|
||||
const token = params.workDoneToken;
|
||||
delete params.workDoneToken;
|
||||
return new WorkDoneProgressReporterImpl(connection, token);
|
||||
}
|
||||
exports.attachWorkDone = attachWorkDone;
|
||||
const ProgressFeature = (Base) => {
|
||||
return class extends Base {
|
||||
constructor() {
|
||||
super();
|
||||
this._progressSupported = false;
|
||||
}
|
||||
initialize(capabilities) {
|
||||
var _a;
|
||||
if (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.window) === null || _a === void 0 ? void 0 : _a.workDoneProgress) === true) {
|
||||
this._progressSupported = true;
|
||||
this.connection.onNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, (params) => {
|
||||
let progress = WorkDoneProgressReporterImpl.Instances.get(params.token);
|
||||
if (progress instanceof WorkDoneProgressServerReporterImpl || progress instanceof NullProgressServerReporter) {
|
||||
progress.cancel();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
attachWorkDoneProgress(token) {
|
||||
if (token === undefined) {
|
||||
return new NullProgressReporter();
|
||||
}
|
||||
else {
|
||||
return new WorkDoneProgressReporterImpl(this.connection, token);
|
||||
}
|
||||
}
|
||||
createWorkDoneProgress() {
|
||||
if (this._progressSupported) {
|
||||
const token = uuid_1.generateUuid();
|
||||
return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, { token }).then(() => {
|
||||
const result = new WorkDoneProgressServerReporterImpl(this.connection, token);
|
||||
return result;
|
||||
});
|
||||
}
|
||||
else {
|
||||
return Promise.resolve(new NullProgressServerReporter());
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
exports.ProgressFeature = ProgressFeature;
|
||||
var ResultProgress;
|
||||
(function (ResultProgress) {
|
||||
ResultProgress.type = new vscode_languageserver_protocol_1.ProgressType();
|
||||
})(ResultProgress || (ResultProgress = {}));
|
||||
class ResultProgressReporterImpl {
|
||||
constructor(_connection, _token) {
|
||||
this._connection = _connection;
|
||||
this._token = _token;
|
||||
}
|
||||
report(data) {
|
||||
this._connection.sendProgress(ResultProgress.type, this._token, data);
|
||||
}
|
||||
}
|
||||
function attachPartialResult(connection, params) {
|
||||
if (params === undefined || params.partialResultToken === undefined) {
|
||||
return undefined;
|
||||
}
|
||||
const token = params.partialResultToken;
|
||||
delete params.partialResultToken;
|
||||
return new ResultProgressReporterImpl(connection, token);
|
||||
}
|
||||
exports.attachPartialResult = attachPartialResult;
|
||||
//# sourceMappingURL=progress.js.map
|
||||
Reference in New Issue
Block a user