astro-ghostcms/.pnpm-store/v3/files/4b/f1e2622d4615ad5b590da4cc6e0...

105 lines
4.5 KiB
Plaintext
Raw Normal View History

2024-02-14 14:10:47 +00:00
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupCapabilities = void 0;
const types_1 = require("../../types");
const vscode = require("vscode-languageserver");
function setupCapabilities(server, initOptions, plugins, semanticTokensLegend, services) {
const serviceInstances = Object.values(services)
.map(service => typeof service === 'function' ? service(undefined, undefined) : service)
.filter((service) => !!service);
const serverMode = initOptions.serverMode ?? types_1.ServerMode.Semantic;
if (serverMode === types_1.ServerMode.Semantic || serverMode === types_1.ServerMode.Syntactic) {
server.selectionRangeProvider = true;
server.foldingRangeProvider = true;
server.linkedEditingRangeProvider = true;
server.colorProvider = true;
server.documentSymbolProvider = true;
server.documentFormattingProvider = true;
server.documentRangeFormattingProvider = true;
const characters = [...new Set(serviceInstances.map(service => service.autoFormatTriggerCharacters ?? []).flat())];
if (characters.length) {
server.documentOnTypeFormattingProvider = {
firstTriggerCharacter: characters[0],
moreTriggerCharacter: characters.slice(1),
};
}
}
if (serverMode === types_1.ServerMode.Semantic || serverMode === types_1.ServerMode.PartialSemantic) {
server.referencesProvider = true;
server.implementationProvider = true;
server.definitionProvider = true;
server.typeDefinitionProvider = true;
server.callHierarchyProvider = true;
server.hoverProvider = true;
server.renameProvider = {
prepareProvider: true,
};
server.signatureHelpProvider = {
triggerCharacters: [...new Set(serviceInstances.map(service => service.signatureHelpTriggerCharacters ?? []).flat())],
retriggerCharacters: [...new Set(serviceInstances.map(service => service.signatureHelpRetriggerCharacters ?? []).flat())],
};
server.completionProvider = {
triggerCharacters: [...new Set(serviceInstances.map(service => service.triggerCharacters ?? []).flat())],
resolveProvider: true,
};
if (initOptions.ignoreTriggerCharacters) {
server.completionProvider.triggerCharacters = server.completionProvider.triggerCharacters
?.filter(c => !initOptions.ignoreTriggerCharacters.includes(c));
}
server.documentHighlightProvider = true;
server.documentLinkProvider = {
resolveProvider: true,
};
server.codeLensProvider = {
resolveProvider: true,
};
server.semanticTokensProvider = {
range: true,
full: false,
legend: semanticTokensLegend,
};
server.codeActionProvider = {
codeActionKinds: [
vscode.CodeActionKind.Empty,
vscode.CodeActionKind.QuickFix,
vscode.CodeActionKind.Refactor,
vscode.CodeActionKind.RefactorExtract,
vscode.CodeActionKind.RefactorInline,
vscode.CodeActionKind.RefactorRewrite,
vscode.CodeActionKind.Source,
vscode.CodeActionKind.SourceFixAll,
vscode.CodeActionKind.SourceOrganizeImports,
],
resolveProvider: true,
};
server.inlayHintProvider = {
resolveProvider: true,
};
const exts = plugins.map(plugin => plugin.watchFileExtensions).flat();
if (exts.length) {
server.workspace = {
fileOperations: {
willRename: {
filters: [
{
pattern: {
glob: `**/*.{${exts.join(',')}}`
}
},
]
}
}
};
}
server.workspaceSymbolProvider = true;
}
// diagnostics are shunted in the api
if ((initOptions.diagnosticModel ?? types_1.DiagnosticModel.Push) === types_1.DiagnosticModel.Pull) {
server.diagnosticProvider = {
interFileDependencies: true,
workspaceDiagnostics: false,
};
}
}
exports.setupCapabilities = setupCapabilities;
//# sourceMappingURL=registerFeatures.js.map