54 lines
2.2 KiB
JavaScript
54 lines
2.2 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.register = register;
|
|
const vscode = require("vscode-languageserver");
|
|
const vscode_uri_1 = require("vscode-uri");
|
|
const snapshotDocument_1 = require("../utils/snapshotDocument");
|
|
function register(server) {
|
|
const syncedDocumentParsedUriToUri = new Map();
|
|
const documentsCache = new Map();
|
|
const documents = new vscode.TextDocuments({
|
|
create(uri, languageId, version, text) {
|
|
const cache = documentsCache.get(uri)?.deref();
|
|
if (cache && cache.languageId === languageId && cache.version === version && cache.getText() === text) {
|
|
return cache;
|
|
}
|
|
const document = new snapshotDocument_1.SnapshotDocument(uri, languageId, version, text);
|
|
documentsCache.set(uri, new WeakRef(document));
|
|
return document;
|
|
},
|
|
update(snapshot, contentChanges, version) {
|
|
snapshot.update(contentChanges, version);
|
|
return snapshot;
|
|
},
|
|
});
|
|
documents.listen(server.connection);
|
|
documents.onDidOpen(({ document }) => {
|
|
const parsedUri = vscode_uri_1.URI.parse(document.uri);
|
|
syncedDocumentParsedUriToUri.set(parsedUri.toString(), document.uri);
|
|
});
|
|
documents.onDidClose(({ document }) => {
|
|
const parsedUri = vscode_uri_1.URI.parse(document.uri);
|
|
syncedDocumentParsedUriToUri.delete(parsedUri.toString());
|
|
});
|
|
server.onInitialize(serverCapabilities => {
|
|
serverCapabilities.textDocumentSync = vscode.TextDocumentSyncKind.Incremental;
|
|
});
|
|
return {
|
|
all: documents.all.bind(documents),
|
|
onDidChangeContent: documents.onDidChangeContent.bind(documents),
|
|
onDidOpen: documents.onDidOpen.bind(documents),
|
|
onDidClose: documents.onDidClose.bind(documents),
|
|
onDidSave: documents.onDidSave.bind(documents),
|
|
get(uri) {
|
|
return documents.get(getSyncedDocumentKey(uri) ?? uri.toString());
|
|
},
|
|
};
|
|
function getSyncedDocumentKey(uri) {
|
|
const originalUri = syncedDocumentParsedUriToUri.get(uri.toString());
|
|
if (originalUri) {
|
|
return originalUri;
|
|
}
|
|
}
|
|
}
|
|
//# sourceMappingURL=textDocuments.js.map
|