From 6636617b4dc5ec228f501bec2637f3cf887a7154 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Thu, 28 Dec 2017 15:21:40 -0800 Subject: [PATCH] [comments] Import mpark/variant and make MarkedString a variant (#200) --- src/language_server_api.h | 8 +++++--- src/messages/text_document_hover.cc | 5 ++--- src/serializer.h | 20 ++++++++++++++------ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/language_server_api.h b/src/language_server_api.h index 18863c71..2ada49b8 100644 --- a/src/language_server_api.h +++ b/src/language_server_api.h @@ -5,7 +5,8 @@ #include "serializer.h" #include "utils.h" -#include +#include "optional.h" +#include "variant.h" #include #include @@ -982,11 +983,12 @@ MAKE_REFLECT_STRUCT(Out_TextDocumentPublishDiagnostics::Params, // // Note that markdown strings will be sanitized - that means html will be // escaped. -struct lsMarkedString { +struct lsMarkedString1 { std::string language; std::string value; }; -MAKE_REFLECT_STRUCT(lsMarkedString, language, value); +using lsMarkedString = std::variant; +MAKE_REFLECT_STRUCT(lsMarkedString1, language, value); struct lsTextDocumentContentChangeEvent { // The range of the document that changed. diff --git a/src/messages/text_document_hover.cc b/src/messages/text_document_hover.cc index 79dee73a..8e5e12a3 100644 --- a/src/messages/text_document_hover.cc +++ b/src/messages/text_document_hover.cc @@ -98,12 +98,11 @@ struct TextDocumentHoverHandler : BaseMessageHandler { if (comments_hover.first || comments_hover.second.size()) { out.result = Out_TextDocumentHover::Result(); if (comments_hover.first) { - out.result->contents.emplace_back( - lsMarkedString{"text", *comments_hover.first}); + out.result->contents.emplace_back(*comments_hover.first); } if (comments_hover.second.size()) { out.result->contents.emplace_back( - lsMarkedString{file->def->language, comments_hover.second}); + lsMarkedString1{file->def->language, comments_hover.second}); } out.result->range = *ls_range; break; diff --git a/src/serializer.h b/src/serializer.h index 1dbc5981..08feb282 100644 --- a/src/serializer.h +++ b/src/serializer.h @@ -1,14 +1,15 @@ #pragma once -#include -#include -#include -#include - #include #include #include +#include "macro_map.h" +#include "optional.h" +#include "variant.h" +#include "rapidjson/document.h" +#include "rapidjson/prettywriter.h" + using std::experimental::nullopt; using std::experimental::optional; @@ -112,10 +113,17 @@ void Reflect(Writer& visitor, std::vector& values) { visitor.EndArray(); } template -void Reflect(Writer& visitor, optional value) { +void Reflect(Writer& visitor, optional& value) { if (value) Reflect(visitor, value.value()); } +template +void Reflect(Writer& visitor, std::variant& value) { + if (value.index() == 0) + Reflect(visitor, std::get<0>(value)); + else + Reflect(visitor, std::get<1>(value)); +} inline void DefaultReflectMemberStart(Writer& visitor) { visitor.StartObject(); }