feat(provider): add compile-time registry

This commit is contained in:
csh
2025-12-21 22:21:46 +08:00
parent f54050bad2
commit 2c1c1d8a88
82 changed files with 751 additions and 1001 deletions
@@ -14,28 +14,22 @@ namespace transform = lsp::codec;
export namespace lsp::provider::client
{
class RegisterCapability : public IRequestProvider
class RegisterCapability : public AutoRegisterProvider<RegisterCapability, IRequestProvider>
{
public:
static constexpr std::string_view kMethod = "client/registerCapability";
static constexpr std::string_view kProviderName = "ClientRegisterCapability";
RegisterCapability() = default;
std::string GetMethod() const override;
std::string GetProviderName() const override;
std::string ProvideResponse(const protocol::RequestMessage& request, ExecutionContext& context) override;
};
}
namespace lsp::provider::client
{
std::string RegisterCapability::GetMethod() const
{
return "client/registerCapability";
}
std::string RegisterCapability::GetProviderName() const
{
return "ClientRegisterCapability";
}
std::string RegisterCapability::ProvideResponse(const protocol::RequestMessage& request, [[maybe_unused]] ExecutionContext& context)
{
@@ -45,7 +39,7 @@ namespace lsp::provider::client
protocol::ResponseMessage response;
response.id = request.id;
response.result = std::nullopt; // 成功返回null
response.result = protocol::LSPAny{}; // explicit null result
std::optional<std::string> json = transform::Serialize(response);
if (!json.has_value())
@@ -14,35 +14,29 @@ namespace transform = lsp::codec;
export namespace lsp::provider::client
{
class UnregisterCapability : public IRequestProvider
class UnregisterCapability : public AutoRegisterProvider<UnregisterCapability, IRequestProvider>
{
public:
static constexpr std::string_view kMethod = "client/unregisterCapability";
static constexpr std::string_view kProviderName = "ClientUnregisterCapability";
UnregisterCapability() = default;
std::string GetMethod() const override;
std::string GetProviderName() const override;
std::string ProvideResponse(const protocol::RequestMessage& request, ExecutionContext& context) override;
};
}
namespace lsp::provider::client
{
std::string UnregisterCapability::GetMethod() const
{
return "client/unregisterCapability";
}
std::string UnregisterCapability::GetProviderName() const
{
return "ClientUnregisterCapability";
}
std::string UnregisterCapability::ProvideResponse(const protocol::RequestMessage& request, [[maybe_unused]] ExecutionContext& context)
{
spdlog::debug("UnregisterCapabilityProvider: Providing response for method {}", request.method);
protocol::ResponseMessage response;
response.id = request.id;
response.result = std::nullopt;
response.result = protocol::LSPAny{};
std::optional<std::string> json = transform::Serialize(response);
if (!json.has_value())