Revamping to matrix style

This commit is contained in:
2026-02-16 16:37:35 -05:00
parent 71852ec99a
commit 9d0e3938e4
14958 changed files with 2089572 additions and 114 deletions

View File

@@ -0,0 +1,233 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.embeddedContentScheme = void 0;
exports.createLanguageService = createLanguageService;
exports.decodeEmbeddedDocumentUri = decodeEmbeddedDocumentUri;
exports.encodeEmbeddedDocumentUri = encodeEmbeddedDocumentUri;
const language_core_1 = require("@volar/language-core");
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
const vscode_uri_1 = require("vscode-uri");
const autoInsert = require("./features/provideAutoInsertSnippet");
const hierarchy = require("./features/provideCallHierarchyItems");
const codeActions = require("./features/provideCodeActions");
const codeLens = require("./features/provideCodeLenses");
const colorPresentations = require("./features/provideColorPresentations");
const completions = require("./features/provideCompletionItems");
const definition = require("./features/provideDefinition");
const diagnostics = require("./features/provideDiagnostics");
const documentColors = require("./features/provideDocumentColors");
const documentDrop = require("./features/provideDocumentDropEdits");
const format = require("./features/provideDocumentFormattingEdits");
const documentHighlight = require("./features/provideDocumentHighlights");
const documentLink = require("./features/provideDocumentLinks");
const semanticTokens = require("./features/provideDocumentSemanticTokens");
const documentSymbols = require("./features/provideDocumentSymbols");
const fileReferences = require("./features/provideFileReferences");
const fileRename = require("./features/provideFileRenameEdits");
const foldingRanges = require("./features/provideFoldingRanges");
const hover = require("./features/provideHover");
const inlayHints = require("./features/provideInlayHints");
const moniker = require("./features/provideMoniker");
const inlineValue = require("./features/provideInlineValue");
const linkedEditing = require("./features/provideLinkedEditingRanges");
const references = require("./features/provideReferences");
const rename = require("./features/provideRenameEdits");
const renamePrepare = require("./features/provideRenameRange");
const selectionRanges = require("./features/provideSelectionRanges");
const signatureHelp = require("./features/provideSignatureHelp");
const workspaceDiagnostics = require("./features/provideWorkspaceDiagnostics");
const workspaceSymbol = require("./features/provideWorkspaceSymbols");
const codeActionResolve = require("./features/resolveCodeAction");
const codeLensResolve = require("./features/resolveCodeLens");
const completionResolve = require("./features/resolveCompletionItem");
const documentLinkResolve = require("./features/resolveDocumentLink");
const inlayHintResolve = require("./features/resolveInlayHint");
const workspaceSymbolResolve = require("./features/resolveWorkspaceSymbol");
const cancellation_1 = require("./utils/cancellation");
const uriMap_1 = require("./utils/uriMap");
exports.embeddedContentScheme = 'volar-embedded-content';
function createLanguageService(language, plugins, env, project) {
const documentVersions = (0, uriMap_1.createUriMap)();
const snapshot2Doc = new WeakMap();
const context = {
language,
project,
getLanguageService: () => langaugeService,
documents: {
get(uri, languageId, snapshot) {
if (!snapshot2Doc.has(snapshot)) {
snapshot2Doc.set(snapshot, (0, uriMap_1.createUriMap)());
}
const map = snapshot2Doc.get(snapshot);
if (!map.has(uri)) {
const version = documentVersions.get(uri) ?? 0;
documentVersions.set(uri, version + 1);
map.set(uri, vscode_languageserver_textdocument_1.TextDocument.create(uri.toString(), languageId, version, snapshot.getText(0, snapshot.getLength())));
}
return map.get(uri);
},
},
env,
inject: (key, ...args) => {
for (const plugin of context.plugins) {
if (context.disabledServicePlugins.has(plugin[1])) {
continue;
}
const provide = plugin[1].provide?.[key];
if (provide) {
return provide(...args);
}
}
},
plugins: [],
commands: {
rename: {
create(uri, position) {
return {
title: '',
command: 'editor.action.rename',
arguments: [
uri,
position,
],
};
},
is(command) {
return command.command === 'editor.action.rename';
},
},
showReferences: {
create(uri, position, locations) {
return {
title: locations.length === 1 ? '1 reference' : `${locations.length} references`,
command: 'editor.action.showReferences',
arguments: [
uri,
position,
locations,
],
};
},
is(command) {
return command.command === 'editor.action.showReferences';
},
},
setSelection: {
create(position) {
return {
title: '',
command: 'setSelection',
arguments: [{
selection: {
selectionStartLineNumber: position.line + 1,
positionLineNumber: position.line + 1,
selectionStartColumn: position.character + 1,
positionColumn: position.character + 1,
},
}],
};
},
is(command) {
return command.command === 'setSelection';
},
},
},
disabledEmbeddedDocumentUris: (0, uriMap_1.createUriMap)(),
disabledServicePlugins: new WeakSet(),
decodeEmbeddedDocumentUri,
encodeEmbeddedDocumentUri,
};
for (const plugin of plugins) {
context.plugins.push([plugin, plugin.create(context)]);
}
const langaugeService = createLanguageServiceBase(plugins, context);
return langaugeService;
}
function decodeEmbeddedDocumentUri(maybeEmbeddedContentUri) {
if (maybeEmbeddedContentUri.scheme === exports.embeddedContentScheme) {
const embeddedCodeId = decodeURIComponent(maybeEmbeddedContentUri.authority);
const documentUri = decodeURIComponent(maybeEmbeddedContentUri.path.substring(1));
return [
vscode_uri_1.URI.parse(documentUri),
embeddedCodeId,
];
}
}
function encodeEmbeddedDocumentUri(documentUri, embeddedContentId) {
if (embeddedContentId !== embeddedContentId.toLowerCase()) {
console.error(`embeddedContentId must be lowercase: ${embeddedContentId}`);
}
return vscode_uri_1.URI.from({
scheme: exports.embeddedContentScheme,
authority: encodeURIComponent(embeddedContentId),
path: '/' + encodeURIComponent(documentUri.toString()),
});
}
function createLanguageServiceBase(plugins, context) {
const tokenModifiers = plugins.map(plugin => plugin.capabilities.semanticTokensProvider?.legend?.tokenModifiers ?? []).flat();
const tokenTypes = plugins.map(plugin => plugin.capabilities.semanticTokensProvider?.legend?.tokenTypes ?? []).flat();
return {
semanticTokenLegend: {
tokenModifiers: [...new Set(tokenModifiers)],
tokenTypes: [...new Set(tokenTypes)],
},
commands: plugins.map(plugin => plugin.capabilities.executeCommandProvider?.commands ?? []).flat(),
triggerCharacters: plugins.map(plugin => plugin.capabilities.completionProvider?.triggerCharacters ?? []).flat(),
autoFormatTriggerCharacters: plugins.map(plugin => plugin.capabilities.documentOnTypeFormattingProvider?.triggerCharacters ?? []).flat(),
signatureHelpTriggerCharacters: plugins.map(plugin => plugin.capabilities.signatureHelpProvider?.triggerCharacters ?? []).flat(),
signatureHelpRetriggerCharacters: plugins.map(plugin => plugin.capabilities.signatureHelpProvider?.retriggerCharacters ?? []).flat(),
executeCommand(command, args, token = cancellation_1.NoneCancellationToken) {
for (const plugin of context.plugins) {
if (context.disabledServicePlugins.has(plugin[1])) {
continue;
}
if (!plugin[1].executeCommand || !plugin[0].capabilities.executeCommandProvider?.commands.includes(command)) {
continue;
}
return plugin[1].executeCommand(command, args, token);
}
},
getDocumentFormattingEdits: format.register(context),
getFoldingRanges: foldingRanges.register(context),
getSelectionRanges: selectionRanges.register(context),
getLinkedEditingRanges: linkedEditing.register(context),
getDocumentSymbols: documentSymbols.register(context),
getDocumentColors: documentColors.register(context),
getColorPresentations: colorPresentations.register(context),
getDiagnostics: diagnostics.register(context),
getWorkspaceDiagnostics: workspaceDiagnostics.register(context),
getReferences: references.register(context),
getFileReferences: fileReferences.register(context),
getDeclaration: definition.register(context, 'provideDeclaration', language_core_1.isDefinitionEnabled),
getDefinition: definition.register(context, 'provideDefinition', language_core_1.isDefinitionEnabled),
getTypeDefinition: definition.register(context, 'provideTypeDefinition', language_core_1.isTypeDefinitionEnabled),
getImplementations: definition.register(context, 'provideImplementation', language_core_1.isImplementationEnabled),
getRenameRange: renamePrepare.register(context),
getRenameEdits: rename.register(context),
getFileRenameEdits: fileRename.register(context),
getSemanticTokens: semanticTokens.register(context),
getHover: hover.register(context),
getCompletionItems: completions.register(context),
getCodeActions: codeActions.register(context),
getSignatureHelp: signatureHelp.register(context),
getCodeLenses: codeLens.register(context),
getDocumentHighlights: documentHighlight.register(context),
getDocumentLinks: documentLink.register(context),
getWorkspaceSymbols: workspaceSymbol.register(context),
getAutoInsertSnippet: autoInsert.register(context),
getDocumentDropEdits: documentDrop.register(context),
getInlayHints: inlayHints.register(context),
getMoniker: moniker.register(context),
getInlineValue: inlineValue.register(context),
resolveCodeAction: codeActionResolve.register(context),
resolveCompletionItem: completionResolve.register(context),
resolveCodeLens: codeLensResolve.register(context),
resolveDocumentLink: documentLinkResolve.register(context),
resolveInlayHint: inlayHintResolve.register(context),
resolveWorkspaceSymbol: workspaceSymbolResolve.register(context),
...hierarchy.register(context),
dispose: () => context.plugins.forEach(plugin => plugin[1].dispose?.()),
context,
};
}
//# sourceMappingURL=languageService.js.map