lsp-server first commit

This commit is contained in:
csh
2025-06-23 20:29:48 +08:00
parent cbcff7d1b4
commit 4f5bf9d781
43 changed files with 1851 additions and 11 deletions
@@ -0,0 +1,55 @@
#include "./initialize_provider.hpp"
#include "../../lsp/logger.hpp"
namespace lsp::providers::initialize
{
nlohmann::json InitializeProvider::ProvideResponse(const LspRequest& request)
{
nlohmann::json response;
response["jsonrpc"] = "2.0";
response["id"] = request.id;
response["result"] = BuildInitializeResult();
log::Debug("InitializeProvider: Providing response for method '", request.method, "' with id ", request.id);
return response;
}
inline std::string InitializeProvider::GetMethod() const
{
return "initialize";
}
inline std::string InitializeProvider::GetProviderName() const
{
return "InitializeProvider";
}
nlohmann::json InitializeProvider::BuildInitializeResult()
{
nlohmann::json result;
result["capabilities"] = BuildServerCapabilities();
result["serverInfo"] = BuildServerInfo();
return result;
}
nlohmann::json InitializeProvider::BuildServerCapabilities()
{
nlohmann::json capabilities;
capabilities["textDocumentSync"] = nlohmann::json();
capabilities["textDocumentSync"]["change"] = 2;
capabilities["textDocumentSync"]["openClose"] = true;
capabilities["textDocumentSync"]["save"] = true;
capabilities["completionProvider"] = nlohmann::json();
capabilities["completionProvider"]["resolveProvider"] = false;
return capabilities;
}
nlohmann::json InitializeProvider::BuildServerInfo()
{
nlohmann::json serverInfo;
serverInfo["name"] = "TSL Language Server";
serverInfo["version"] = "1.0.0";
return serverInfo;
}
}
@@ -0,0 +1,20 @@
#pragma once
#include "../base/provider_interface.hpp"
#include <nlohmann/json.hpp>
namespace lsp::providers::initialize
{
class InitializeProvider : public ILspProvider
{
public:
InitializeProvider() = default;
nlohmann::json ProvideResponse(const LspRequest& request) override;
std::string GetMethod() const override;
std::string GetProviderName() const override;
private:
nlohmann::json BuildServerCapabilities();
nlohmann::json BuildServerInfo();
nlohmann::json BuildInitializeResult();
};
}