🔧 chore(lsp_server): gate providers to completion/definition

Initialize now advertises only completion (resolve) and definition.

Verified: test_provider (clang-linux-server/Release)
This commit is contained in:
csh
2025-12-24 11:33:40 +08:00
parent 09e65224fe
commit 02864dda89
3 changed files with 81 additions and 275 deletions
@@ -79,49 +79,9 @@ namespace lsp::provider
result.capabilities.textDocumentSync = BuildTextDocumentSyncOptions();
result.capabilities.completionProvider = BuildCompletionOptions();
result.capabilities.definitionProvider = true;
result.capabilities.typeDefinitionProvider = true;
result.capabilities.implementationProvider = true;
result.capabilities.hoverProvider = true;
result.capabilities.signatureHelpProvider = BuildSignatureHelpOptions();
result.capabilities.codeActionProvider = BuildCodeActionOptions();
result.capabilities.codeLensProvider = protocol::CodeLensOptions{ .resolveProvider = true };
result.capabilities.documentLinkProvider = protocol::DocumentLinkOptions{ .resolveProvider = true };
result.capabilities.colorProvider = true;
result.capabilities.referencesProvider = true;
result.capabilities.documentHighlightProvider = true;
result.capabilities.renameProvider = protocol::RenameOptions{ .prepareProvider = true };
result.capabilities.documentSymbolProvider = true;
result.capabilities.workspaceSymbolProvider = protocol::WorkspaceSymbolOptions{ .resolveProvider = true };
result.capabilities.semanticTokensProvider = BuildSemanticTokenOptions();
result.capabilities.callHierarchyProvider = true;
result.capabilities.typeHierarchyProvider = true;
result.capabilities.inlayHintProvider = protocol::InlayHintOptions{ .resolveProvider = true };
result.capabilities.foldingRangeProvider = true;
result.capabilities.selectionRangeProvider = true;
result.capabilities.linkedEditingRangeProvider = true;
result.capabilities.monikerProvider = true;
result.capabilities.inlineValueProvider = true;
result.capabilities.documentFormattingProvider = true;
result.capabilities.documentRangeFormattingProvider = true;
result.capabilities.documentOnTypeFormattingProvider = BuildOnTypeFormattingOptions();
result.capabilities.executeCommandProvider = BuildExecuteCommandOptions();
protocol::DiagnosticOptions diagnostic;
diagnostic.identifier = "syntax";
diagnostic.interFileDependencies = false;
diagnostic.workspaceDiagnostics = true;
result.capabilities.diagnosticProvider = std::move(diagnostic);
protocol::ServerCapabilities::Workspace workspace;
protocol::ServerCapabilities::Workspace::FileOperations file_operations;
file_operations.didCreate = true;
file_operations.willCreate = true;
file_operations.didDelete = true;
file_operations.willDelete = true;
file_operations.didRename = true;
file_operations.willRename = true;
workspace.fileOperations = std::move(file_operations);
result.capabilities.workspace = std::move(workspace);
// NOTE: Only advertise the minimal feature set for now:
// - completion (with resolve)
// - go-to-definition
return result;
}
+72 -138
View File
@@ -5,166 +5,100 @@ export module lsp.provider.manifest;
import lsp.core.dispacther;
import lsp.provider.base.registry;
import lsp.provider.call_hierarchy.incoming_calls;
import lsp.provider.call_hierarchy.outgoing_calls;
import lsp.provider.cancel_request.cancel_request;
import lsp.provider.client.register_capability;
import lsp.provider.client.unregister_capability;
import lsp.provider.code_action.resolve;
import lsp.provider.code_lens.resolve;
import lsp.provider.completion_item.resolve;
import lsp.provider.document_link.resolve;
import lsp.provider.exit.exit;
import lsp.provider.initialize.initialize;
import lsp.provider.initialized.initialized;
import lsp.provider.inlay_hint.resolve;
import lsp.provider.shutdown.shutdown;
import lsp.provider.telemetry.event;
import lsp.provider.text_document.code_action;
import lsp.provider.text_document.code_lens;
import lsp.provider.text_document.color_presentation;
import lsp.provider.text_document.completion;
import lsp.provider.text_document.definition;
import lsp.provider.text_document.diagnostic;
import lsp.provider.text_document.did_change;
import lsp.provider.text_document.did_close;
import lsp.provider.text_document.did_open;
import lsp.provider.text_document.document_color;
import lsp.provider.text_document.document_highlight;
import lsp.provider.text_document.document_link;
import lsp.provider.text_document.document_symbol;
import lsp.provider.text_document.folding_range;
import lsp.provider.text_document.formatting;
import lsp.provider.text_document.hover;
import lsp.provider.text_document.implementation;
import lsp.provider.text_document.inlay_hint;
import lsp.provider.text_document.inline_value;
import lsp.provider.text_document.linked_editing_range;
import lsp.provider.text_document.moniker;
import lsp.provider.text_document.on_type_formatting;
import lsp.provider.text_document.prepare_call_hierarchy;
import lsp.provider.text_document.prepare_rename;
import lsp.provider.text_document.prepare_type_hierarchy;
import lsp.provider.text_document.publish_diagnostics;
import lsp.provider.text_document.range_formatting;
import lsp.provider.text_document.references;
import lsp.provider.text_document.rename;
import lsp.provider.text_document.selection_range;
import lsp.provider.text_document.semantic_tokens;
import lsp.provider.text_document.signature_help;
import lsp.provider.text_document.type_definition;
import lsp.provider.text_document.completion;
import lsp.provider.trace.set_trace;
import lsp.provider.type_hierarchy.subtypes;
import lsp.provider.type_hierarchy.supertypes;
import lsp.provider.window.log_message;
import lsp.provider.window.show_document;
import lsp.provider.window.show_message;
import lsp.provider.window.show_message_request;
import lsp.provider.window.work_done_progress_create;
import lsp.provider.workspace.apply_edit;
import lsp.provider.workspace.code_lens_refresh;
import lsp.provider.workspace.configuration;
import lsp.provider.workspace.diagnostic;
import lsp.provider.workspace.did_change_configuration;
import lsp.provider.workspace.did_change_watched_files;
import lsp.provider.workspace.did_change_workspace_folders;
import lsp.provider.workspace.did_create_files;
import lsp.provider.workspace.did_delete_files;
import lsp.provider.workspace.did_rename_files;
import lsp.provider.workspace.diagnostic_refresh;
import lsp.provider.workspace.execute_command;
import lsp.provider.workspace.inlay_hint_refresh;
import lsp.provider.workspace.inline_value_refresh;
import lsp.provider.workspace.semantic_tokens_refresh;
import lsp.provider.workspace.symbol;
import lsp.provider.workspace.workspace_folders;
import lsp.provider.workspace.will_create_files;
import lsp.provider.workspace.will_delete_files;
import lsp.provider.workspace.will_rename_files;
import lsp.provider.workspace_symbol.resolve;
// NOTE: keep other providers implemented but disabled.
// Uncomment when re-enabling additional capabilities.
// import lsp.provider.call_hierarchy.incoming_calls;
// import lsp.provider.call_hierarchy.outgoing_calls;
// import lsp.provider.cancel_request.cancel_request;
// import lsp.provider.client.register_capability;
// import lsp.provider.client.unregister_capability;
// import lsp.provider.code_action.resolve;
// import lsp.provider.code_lens.resolve;
// import lsp.provider.document_link.resolve;
// import lsp.provider.exit.exit;
// import lsp.provider.inlay_hint.resolve;
// import lsp.provider.telemetry.event;
// import lsp.provider.text_document.code_action;
// import lsp.provider.text_document.code_lens;
// import lsp.provider.text_document.color_presentation;
// import lsp.provider.text_document.diagnostic;
// import lsp.provider.text_document.document_color;
// import lsp.provider.text_document.document_highlight;
// import lsp.provider.text_document.document_link;
// import lsp.provider.text_document.document_symbol;
// import lsp.provider.text_document.folding_range;
// import lsp.provider.text_document.formatting;
// import lsp.provider.text_document.hover;
// import lsp.provider.text_document.implementation;
// import lsp.provider.text_document.inlay_hint;
// import lsp.provider.text_document.inline_value;
// import lsp.provider.text_document.linked_editing_range;
// import lsp.provider.text_document.moniker;
// import lsp.provider.text_document.on_type_formatting;
// import lsp.provider.text_document.prepare_call_hierarchy;
// import lsp.provider.text_document.prepare_rename;
// import lsp.provider.text_document.prepare_type_hierarchy;
// import lsp.provider.text_document.publish_diagnostics;
// import lsp.provider.text_document.range_formatting;
// import lsp.provider.text_document.references;
// import lsp.provider.text_document.rename;
// import lsp.provider.text_document.selection_range;
// import lsp.provider.text_document.semantic_tokens;
// import lsp.provider.text_document.signature_help;
// import lsp.provider.text_document.type_definition;
// import lsp.provider.type_hierarchy.subtypes;
// import lsp.provider.type_hierarchy.supertypes;
// import lsp.provider.window.log_message;
// import lsp.provider.window.show_document;
// import lsp.provider.window.show_message;
// import lsp.provider.window.show_message_request;
// import lsp.provider.window.work_done_progress_create;
// import lsp.provider.workspace.apply_edit;
// import lsp.provider.workspace.code_lens_refresh;
// import lsp.provider.workspace.configuration;
// import lsp.provider.workspace.diagnostic;
// import lsp.provider.workspace.did_change_configuration;
// import lsp.provider.workspace.did_change_watched_files;
// import lsp.provider.workspace.did_change_workspace_folders;
// import lsp.provider.workspace.did_create_files;
// import lsp.provider.workspace.did_delete_files;
// import lsp.provider.workspace.did_rename_files;
// import lsp.provider.workspace.diagnostic_refresh;
// import lsp.provider.workspace.execute_command;
// import lsp.provider.workspace.inlay_hint_refresh;
// import lsp.provider.workspace.inline_value_refresh;
// import lsp.provider.workspace.semantic_tokens_refresh;
// import lsp.provider.workspace.symbol;
// import lsp.provider.workspace.workspace_folders;
// import lsp.provider.workspace.will_create_files;
// import lsp.provider.workspace.will_delete_files;
// import lsp.provider.workspace.will_rename_files;
// import lsp.provider.workspace_symbol.resolve;
export namespace lsp::provider
{
using AllProviders = ProviderRegistry<
call_hierarchy::IncomingCalls,
call_hierarchy::OutgoingCalls,
CancelRequest,
client::RegisterCapability,
client::UnregisterCapability,
code_action::Resolve,
code_lens::Resolve,
completion_item::Resolve,
document_link::Resolve,
Exit,
Initialize,
Initialized,
inlay_hint::Resolve,
Shutdown,
telemetry::Event,
text_document::CodeAction,
text_document::CodeLens,
text_document::ColorPresentation,
text_document::Completion,
text_document::Definition,
text_document::Diagnostic,
text_document::DidChange,
text_document::DidClose,
text_document::DidOpen,
text_document::DocumentColor,
text_document::DocumentHighlight,
text_document::DocumentLink,
text_document::DocumentSymbol,
text_document::FoldingRange,
text_document::Formatting,
text_document::Hover,
text_document::Implementation,
text_document::InlayHint,
text_document::InlineValue,
text_document::LinkedEditingRange,
text_document::Moniker,
text_document::OnTypeFormatting,
text_document::PrepareCallHierarchy,
text_document::PrepareRename,
text_document::PrepareTypeHierarchy,
text_document::PublishDiagnostics,
text_document::RangeFormatting,
text_document::References,
text_document::Rename,
text_document::SelectionRange,
text_document::SemanticTokensRange,
text_document::SemanticTokensFull,
text_document::SemanticTokensFullDelta,
text_document::SignatureHelp,
text_document::TypeDefinition,
SetTrace,
type_hierarchy::Subtypes,
type_hierarchy::Supertypes,
window::LogMessage,
window::ShowDocument,
window::ShowMessage,
window::ShowMessageRequest,
window::WorkDoneProgressCreate,
workspace::ApplyEdit,
workspace::CodeLensRefresh,
workspace::Configuration,
workspace::Diagnostic,
workspace::DidChangeConfiguration,
workspace::DidChangeWatchedFiles,
workspace::DidChangeWorkspaceFolders,
workspace::DidCreateFiles,
workspace::DidDeleteFiles,
workspace::DidRenameFiles,
workspace::DiagnosticRefresh,
workspace::ExecuteCommand,
workspace::InlayHintRefresh,
workspace::InlineValueRefresh,
workspace::SemanticTokensRefresh,
workspace::Symbol,
workspace::WorkspaceFolders,
workspace::WillCreateFiles,
workspace::WillDeleteFiles,
workspace::WillRenameFiles,
workspace_symbol::Resolve
SetTrace
>;
static_assert(AllProviders::kProviderCount > 0, "No providers registered.");