Files
ry.kazcloud.dev/node_modules/@volar/language-server/lib/features/fileWatcher.js

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