mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
01c70368e3
* lsp: json-rpc example is working, a decent place to start... * lsp: vendor library * lsp: cleanup and time to get started * lsp: commit what i got so far * lsp: example `initialize` payload * lsp: switch to `stdio` * stash * modularize the lsp implementation * lsp: implement first actual LSP feature - function names in outline * lsp: produce document diagnostics * lsp: remove unused third-party lib * lsp: support hovering MIPS instructions in IR files * lsp: basic go-to all-types definition * stash * lsp: cleanup code, just need to add it to the release artifacts * fix some project configuration * fix linux build * lsp: add lsp to PR artifacts and release assets * lsp: address feedback
75 lines
2.3 KiB
C++
75 lines
2.3 KiB
C++
#include "document_diagnostics.h"
|
|
|
|
void LSPSpec::to_json(json& j, const CodeDescription& obj) {
|
|
j = json{{"href", obj.m_href}};
|
|
}
|
|
|
|
void LSPSpec::from_json(const json& j, CodeDescription& obj) {
|
|
j.at("href").get_to(obj.m_href);
|
|
}
|
|
|
|
void LSPSpec::to_json(json& j, const DiangosticRelatedInformation& obj) {
|
|
j = json{{"location", obj.m_location}, {"message", obj.m_message}};
|
|
}
|
|
|
|
void LSPSpec::from_json(const json& j, DiangosticRelatedInformation& obj) {
|
|
j.at("location").get_to(obj.m_location);
|
|
j.at("message").get_to(obj.m_message);
|
|
}
|
|
|
|
void LSPSpec::to_json(json& j, const Diagnostic& obj) {
|
|
j = json{{"range", obj.m_range}, {"severity", obj.m_severity}, {"message", obj.m_message}};
|
|
if (obj.m_code) {
|
|
j["code"] = obj.m_code.value();
|
|
}
|
|
if (obj.m_codeDescription) {
|
|
j["codeDescription"] = obj.m_codeDescription.value();
|
|
}
|
|
if (obj.m_source) {
|
|
j["source"] = obj.m_source.value();
|
|
}
|
|
if (obj.m_tags) {
|
|
j["tags"] = obj.m_tags.value();
|
|
}
|
|
if (obj.m_relatedInformation) {
|
|
j["relatedInformation"] = obj.m_relatedInformation.value();
|
|
}
|
|
}
|
|
|
|
void LSPSpec::from_json(const json& j, Diagnostic& obj) {
|
|
j.at("range").get_to(obj.m_range);
|
|
j.at("severity").get_to(obj.m_severity);
|
|
j.at("message").get_to(obj.m_message);
|
|
if (j.contains("code")) {
|
|
obj.m_code = std::make_optional(j.at("code").get<std::string>());
|
|
}
|
|
if (j.contains("codeDescription")) {
|
|
obj.m_codeDescription = std::make_optional(j.at("codeDescription").get<CodeDescription>());
|
|
}
|
|
if (j.contains("source")) {
|
|
obj.m_source = std::make_optional(j.at("source").get<std::string>());
|
|
}
|
|
if (j.contains("tags")) {
|
|
obj.m_tags = std::make_optional(j.at("tags").get<std::vector<DiagnosticTag>>());
|
|
}
|
|
if (j.contains("relatedInformation")) {
|
|
obj.m_relatedInformation = std::make_optional(
|
|
j.at("relatedInformation").get<std::vector<DiangosticRelatedInformation>>());
|
|
}
|
|
}
|
|
|
|
void LSPSpec::to_json(json& j, const PublishDiagnosticParams& obj) {
|
|
j = json{{"uri", obj.m_uri}, {"diagnostics", obj.m_diagnostics}};
|
|
if (obj.m_version) {
|
|
j["version"] = obj.m_version.value();
|
|
}
|
|
}
|
|
|
|
void LSPSpec::from_json(const json& j, PublishDiagnosticParams& obj) {
|
|
j.at("uri").get_to(obj.m_uri);
|
|
j.at("diagnostics").get_to(obj.m_diagnostics);
|
|
if (j.contains("version")) {
|
|
obj.m_version = std::make_optional(j.at("version").get<int32_t>());
|
|
}
|
|
}
|