61 lines
2.4 KiB
JavaScript
61 lines
2.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.register = register;
|
|
const language_service_1 = require("@volar/language-service");
|
|
const vscode = require("vscode-languageserver");
|
|
const vscode_uri_1 = require("vscode-uri");
|
|
function register(documents, fileWatcher) {
|
|
const providers = new Map();
|
|
const readFileCache = (0, language_service_1.createUriMap)();
|
|
const statCache = (0, language_service_1.createUriMap)();
|
|
const readDirectoryCache = (0, language_service_1.createUriMap)();
|
|
documents.onDidSave(({ document }) => {
|
|
const uri = vscode_uri_1.URI.parse(document.uri);
|
|
readFileCache.set(uri, document.getText());
|
|
statCache.delete(uri);
|
|
});
|
|
fileWatcher.onDidChangeWatchedFiles(({ changes }) => {
|
|
for (const change of changes) {
|
|
const changeUri = vscode_uri_1.URI.parse(change.uri);
|
|
const dir = vscode_uri_1.URI.parse(change.uri.substring(0, change.uri.lastIndexOf('/')));
|
|
if (change.type === vscode.FileChangeType.Deleted) {
|
|
readFileCache.set(changeUri, undefined);
|
|
statCache.set(changeUri, undefined);
|
|
readDirectoryCache.delete(dir);
|
|
}
|
|
else if (change.type === vscode.FileChangeType.Changed) {
|
|
readFileCache.delete(changeUri);
|
|
statCache.delete(changeUri);
|
|
}
|
|
else if (change.type === vscode.FileChangeType.Created) {
|
|
readFileCache.delete(changeUri);
|
|
statCache.delete(changeUri);
|
|
readDirectoryCache.delete(dir);
|
|
}
|
|
}
|
|
});
|
|
return {
|
|
readFile(uri) {
|
|
if (!readFileCache.has(uri)) {
|
|
readFileCache.set(uri, providers.get(uri.scheme)?.readFile(uri));
|
|
}
|
|
return readFileCache.get(uri);
|
|
},
|
|
stat(uri) {
|
|
if (!statCache.has(uri)) {
|
|
statCache.set(uri, providers.get(uri.scheme)?.stat(uri));
|
|
}
|
|
return statCache.get(uri);
|
|
},
|
|
readDirectory(uri) {
|
|
if (!readDirectoryCache.has(uri)) {
|
|
readDirectoryCache.set(uri, providers.get(uri.scheme)?.readDirectory(uri) ?? []);
|
|
}
|
|
return readDirectoryCache.get(uri);
|
|
},
|
|
install(scheme, provider) {
|
|
providers.set(scheme, provider);
|
|
},
|
|
};
|
|
}
|
|
//# sourceMappingURL=fileSystem.js.map
|