102 lines
5.3 KiB
JavaScript
102 lines
5.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.register = register;
|
|
const language_service_1 = require("@volar/language-service");
|
|
const vscode_uri_1 = require("vscode-uri");
|
|
const protocol_1 = require("../../protocol");
|
|
function register(server) {
|
|
server.onInitialize(() => {
|
|
const { project } = server;
|
|
const scriptVersions = (0, language_service_1.createUriMap)();
|
|
const scriptVersionSnapshots = new WeakSet();
|
|
server.connection.onRequest(protocol_1.GetMatchTsConfigRequest.type, async (params) => {
|
|
const uri = vscode_uri_1.URI.parse(params.uri);
|
|
const languageService = await project.getLanguageService(uri);
|
|
const tsProject = languageService.context.project.typescript;
|
|
if (tsProject?.configFileName) {
|
|
const { configFileName, uriConverter } = tsProject;
|
|
return { uri: uriConverter.asUri(configFileName).toString() };
|
|
}
|
|
});
|
|
server.connection.onRequest(protocol_1.GetVirtualFileRequest.type, async (document) => {
|
|
const uri = vscode_uri_1.URI.parse(document.uri);
|
|
const languageService = await project.getLanguageService(uri);
|
|
const documentUri = vscode_uri_1.URI.parse(document.uri);
|
|
const sourceScript = languageService.context.language.scripts.get(documentUri);
|
|
if (sourceScript?.generated) {
|
|
return prune(sourceScript.generated.root);
|
|
}
|
|
function prune(virtualCode) {
|
|
const uri = languageService.context.encodeEmbeddedDocumentUri(sourceScript.id, virtualCode.id);
|
|
let version = scriptVersions.get(uri) ?? 0;
|
|
if (!scriptVersionSnapshots.has(virtualCode.snapshot)) {
|
|
version++;
|
|
scriptVersions.set(uri, version);
|
|
scriptVersionSnapshots.add(virtualCode.snapshot);
|
|
}
|
|
return {
|
|
fileUri: sourceScript.id.toString(),
|
|
virtualCodeId: virtualCode.id,
|
|
languageId: virtualCode.languageId,
|
|
embeddedCodes: virtualCode.embeddedCodes?.map(prune) || [],
|
|
version,
|
|
disabled: languageService.context.disabledEmbeddedDocumentUris.has(uri),
|
|
};
|
|
}
|
|
});
|
|
server.connection.onRequest(protocol_1.GetVirtualCodeRequest.type, async (params) => {
|
|
const uri = vscode_uri_1.URI.parse(params.fileUri);
|
|
const languageService = await project.getLanguageService(uri);
|
|
const sourceScript = languageService.context.language.scripts.get(vscode_uri_1.URI.parse(params.fileUri));
|
|
const virtualCode = sourceScript?.generated?.embeddedCodes.get(params.virtualCodeId);
|
|
if (virtualCode) {
|
|
const mappings = {};
|
|
for (const [sourceScript, map] of languageService.context.language.maps.forEach(virtualCode)) {
|
|
mappings[sourceScript.id.toString()] = map.mappings;
|
|
}
|
|
return {
|
|
content: virtualCode.snapshot.getText(0, virtualCode.snapshot.getLength()),
|
|
mappings,
|
|
};
|
|
}
|
|
});
|
|
server.connection.onNotification(protocol_1.UpdateVirtualCodeStateNotification.type, async (params) => {
|
|
const uri = vscode_uri_1.URI.parse(params.fileUri);
|
|
const languageService = await project.getLanguageService(uri);
|
|
const virtualFileUri = languageService.context.encodeEmbeddedDocumentUri(vscode_uri_1.URI.parse(params.fileUri), params.virtualCodeId);
|
|
if (params.disabled) {
|
|
languageService.context.disabledEmbeddedDocumentUris.set(virtualFileUri, true);
|
|
}
|
|
else {
|
|
languageService.context.disabledEmbeddedDocumentUris.delete(virtualFileUri);
|
|
}
|
|
});
|
|
server.connection.onNotification(protocol_1.UpdateServicePluginStateNotification.type, async (params) => {
|
|
const uri = vscode_uri_1.URI.parse(params.uri);
|
|
const languageService = await project.getLanguageService(uri);
|
|
const plugin = languageService.context.plugins[params.serviceId][1];
|
|
if (params.disabled) {
|
|
languageService.context.disabledServicePlugins.add(plugin);
|
|
}
|
|
else {
|
|
languageService.context.disabledServicePlugins.delete(plugin);
|
|
}
|
|
});
|
|
server.connection.onRequest(protocol_1.GetServicePluginsRequest.type, async (params) => {
|
|
const uri = vscode_uri_1.URI.parse(params.uri);
|
|
const languageService = await project.getLanguageService(uri);
|
|
const result = [];
|
|
for (let pluginIndex = 0; pluginIndex < languageService.context.plugins.length; pluginIndex++) {
|
|
const plugin = languageService.context.plugins[pluginIndex];
|
|
result.push({
|
|
id: pluginIndex,
|
|
name: plugin[0].name,
|
|
disabled: languageService.context.disabledServicePlugins.has(plugin[1]),
|
|
features: Object.keys(plugin[1]),
|
|
});
|
|
}
|
|
return result;
|
|
});
|
|
});
|
|
}
|
|
//# sourceMappingURL=editorFeatures.js.map
|