105 lines
4.5 KiB
Plaintext
105 lines
4.5 KiB
Plaintext
"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 |