From 807ac96ee99249c2fad5c12e96f7568194ecebaa Mon Sep 17 00:00:00 2001 From: eidheim Date: Thu, 1 Feb 2018 10:26:32 +0100 Subject: [PATCH] Language server process is now started in root_uri path due to some servers require this it seems. Also added yet another hover result value retrieve method due to so many different result structures from different server implementations. --- src/source_language_protocol.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/source_language_protocol.cc b/src/source_language_protocol.cc index 2eb3fd6..0233ddf 100644 --- a/src/source_language_protocol.cc +++ b/src/source_language_protocol.cc @@ -14,7 +14,7 @@ const bool output_messages_and_errors=false; LanguageProtocol::Client::Client(std::string root_uri_, std::string language_id_) : root_uri(std::move(root_uri_)), language_id(std::move(language_id_)) { - process = std::make_unique(language_id+"-language-server", "", + process = std::make_unique(language_id+"-language-server", root_uri, [this](const char *bytes, size_t n) { server_message_stream.write(bytes, n); parse_server_message(); @@ -900,6 +900,7 @@ void Source::LanguageProtocolView::show_type_tooltips(const Gdk::Rectangle &rect auto offset=iter.get_offset(); client->write_request("textDocument/hover", "\"textDocument\": {\"uri\":\"file://"+file_path.string()+"\"}, \"position\": {\"line\": "+std::to_string(iter.get_line())+", \"character\": "+std::to_string(iter.get_line_offset())+"}", [this, offset](const boost::property_tree::ptree &result, bool error) { if(!error) { + // hover result structure vary significantly from the different language servers std::string content; { auto contents_pt=result.get_child("contents", boost::property_tree::ptree()); @@ -911,6 +912,8 @@ void Source::LanguageProtocolView::show_type_tooltips(const Gdk::Rectangle &rect auto contents_it=result.find("contents"); if(contents_it!=result.not_found()) content=contents_it->second.get_value(""); + if(content.empty()) + content=contents_it->second.get("value", ""); } if(!content.empty()) { dispatcher.post([this, offset, content=std::move(content)] {