✨ feat(lsp_server): implement missing providers and json coverage
Implement workspace configuration/folders and apply WorkspaceEdit.changes. Strengthen provider JSON coverage (all methods require params, no errors). Verified: Release test_provider
This commit is contained in:
@@ -10,7 +10,7 @@ import lsp.protocol;
|
||||
import lsp.codec.facade;
|
||||
import lsp.provider.base.interface;
|
||||
|
||||
namespace transform = lsp::codec;
|
||||
namespace codec = lsp::codec;
|
||||
|
||||
export namespace lsp::provider::client
|
||||
{
|
||||
@@ -27,21 +27,30 @@ export namespace lsp::provider::client
|
||||
|
||||
namespace lsp::provider::client
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
std::string RegisterCapability::ProvideResponse(const protocol::RequestMessage& request, [[maybe_unused]] ExecutionContext& context)
|
||||
{
|
||||
spdlog::debug("RegisterCapabilityProvider: Providing response for method {}", request.method);
|
||||
// 这个方法通常不会被调用,因为这是服务器发起的请求
|
||||
// 但为了完整性还是实现它
|
||||
|
||||
if (!request.params.has_value() || !request.params->Is<protocol::LSPObject>())
|
||||
{
|
||||
spdlog::warn("{}: Missing params in request", GetProviderName());
|
||||
return BuildErrorResponseMessage(request, protocol::ErrorCodes::InvalidParams, "Missing params");
|
||||
}
|
||||
|
||||
const auto& obj = request.params->Get<protocol::LSPObject>();
|
||||
auto regs_it = obj.find("registrations");
|
||||
if (regs_it != obj.end() && regs_it->second.Is<protocol::LSPArray>())
|
||||
{
|
||||
spdlog::debug("{}: Received {} registration(s)", GetProviderName(), regs_it->second.Get<protocol::LSPArray>().size());
|
||||
}
|
||||
|
||||
protocol::ResponseMessage response;
|
||||
response.id = request.id;
|
||||
response.result = protocol::LSPAny{}; // explicit null result
|
||||
response.result = protocol::LSPAny(std::nullptr_t{});
|
||||
|
||||
std::optional<std::string> json = transform::Serialize(response);
|
||||
std::optional<std::string> json = codec::Serialize(response);
|
||||
if (!json.has_value())
|
||||
return BuildErrorResponseMessage(request, protocol::ErrorCodes::InternalError, "Internal error");
|
||||
return json.value();
|
||||
|
||||
@@ -10,7 +10,7 @@ import lsp.protocol;
|
||||
import lsp.codec.facade;
|
||||
import lsp.provider.base.interface;
|
||||
|
||||
namespace transform = lsp::codec;
|
||||
namespace codec = lsp::codec;
|
||||
|
||||
export namespace lsp::provider::client
|
||||
{
|
||||
@@ -27,18 +27,28 @@ export namespace lsp::provider::client
|
||||
|
||||
namespace lsp::provider::client
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
std::string UnregisterCapability::ProvideResponse(const protocol::RequestMessage& request, [[maybe_unused]] ExecutionContext& context)
|
||||
{
|
||||
spdlog::debug("UnregisterCapabilityProvider: Providing response for method {}", request.method);
|
||||
|
||||
if (!request.params.has_value() || !request.params->Is<protocol::LSPObject>())
|
||||
{
|
||||
spdlog::warn("{}: Missing params in request", GetProviderName());
|
||||
return BuildErrorResponseMessage(request, protocol::ErrorCodes::InvalidParams, "Missing params");
|
||||
}
|
||||
|
||||
const auto& obj = request.params->Get<protocol::LSPObject>();
|
||||
auto regs_it = obj.find("unregistrations");
|
||||
if (regs_it != obj.end() && regs_it->second.Is<protocol::LSPArray>())
|
||||
{
|
||||
spdlog::debug("{}: Received {} unregistration(s)", GetProviderName(), regs_it->second.Get<protocol::LSPArray>().size());
|
||||
}
|
||||
|
||||
protocol::ResponseMessage response;
|
||||
response.id = request.id;
|
||||
response.result = protocol::LSPAny{};
|
||||
response.result = protocol::LSPAny(std::nullptr_t{});
|
||||
|
||||
std::optional<std::string> json = transform::Serialize(response);
|
||||
std::optional<std::string> json = codec::Serialize(response);
|
||||
if (!json.has_value())
|
||||
return BuildErrorResponseMessage(request, protocol::ErrorCodes::InternalError, "Internal error");
|
||||
return json.value();
|
||||
|
||||
Reference in New Issue
Block a user