63 lines
2.4 KiB
JavaScript
63 lines
2.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.register = register;
|
|
const vscode = require("vscode-languageserver");
|
|
function register(server) {
|
|
let watchFilesDisposableCounter = 0;
|
|
let watchFilesDisposable;
|
|
const didChangeWatchedFilesCallbacks = new Set();
|
|
return {
|
|
watchFiles,
|
|
onDidChangeWatchedFiles,
|
|
};
|
|
async function watchFiles(patterns) {
|
|
const disposables = [];
|
|
const didChangeWatchedFiles = server.initializeParams.capabilities.workspace?.didChangeWatchedFiles;
|
|
const fileOperations = server.initializeParams.capabilities.workspace?.fileOperations;
|
|
if (didChangeWatchedFiles) {
|
|
if (watchFilesDisposableCounter === 0) {
|
|
watchFilesDisposable = server.connection.onDidChangeWatchedFiles(e => {
|
|
for (const cb of didChangeWatchedFilesCallbacks) {
|
|
cb(e);
|
|
}
|
|
});
|
|
}
|
|
watchFilesDisposableCounter++;
|
|
disposables.push({
|
|
dispose() {
|
|
watchFilesDisposableCounter--;
|
|
if (watchFilesDisposableCounter === 0) {
|
|
watchFilesDisposable?.dispose();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
if (didChangeWatchedFiles?.dynamicRegistration) {
|
|
disposables.push(await server.connection.client.register(vscode.DidChangeWatchedFilesNotification.type, {
|
|
watchers: patterns.map(pattern => ({ globPattern: pattern })),
|
|
}));
|
|
}
|
|
if (fileOperations?.dynamicRegistration && fileOperations.willRename) {
|
|
disposables.push(await server.connection.client.register(vscode.WillRenameFilesRequest.type, {
|
|
filters: patterns.map(pattern => ({ pattern: { glob: pattern } })),
|
|
}));
|
|
}
|
|
return {
|
|
dispose() {
|
|
for (const disposable of disposables) {
|
|
disposable.dispose();
|
|
}
|
|
disposables.length = 0;
|
|
},
|
|
};
|
|
}
|
|
function onDidChangeWatchedFiles(cb) {
|
|
didChangeWatchedFilesCallbacks.add(cb);
|
|
return {
|
|
dispose: () => {
|
|
didChangeWatchedFilesCallbacks.delete(cb);
|
|
},
|
|
};
|
|
}
|
|
}
|
|
//# sourceMappingURL=fileWatcher.js.map
|