From 36a8515d051fa401c20e268566daa7673647aaf2 Mon Sep 17 00:00:00 2001 From: eidheim Date: Tue, 25 May 2021 11:34:49 +0200 Subject: [PATCH] Now also searches for rust-analyzer executable in $PATH --- src/notebook.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/notebook.cpp b/src/notebook.cpp index 19b432e..123809e 100644 --- a/src/notebook.cpp +++ b/src/notebook.cpp @@ -170,19 +170,25 @@ bool Notebook::open(const boost::filesystem::path &file_path_, Position position } } + size_t source_views_previous_size = source_views.size(); if(language && (language->get_id() == "chdr" || language->get_id() == "cpphdr" || language->get_id() == "c" || language->get_id() == "cpp" || language->get_id() == "objc")) source_views.emplace_back(new Source::ClangView(file_path, language)); else if(language && !language_protocol_language_id.empty() && !filesystem::find_executable(language_protocol_language_id + "-language-server").empty()) source_views.emplace_back(new Source::LanguageProtocolView(file_path, language, language_protocol_language_id, language_protocol_language_id + "-language-server")); - else if(language && language_protocol_language_id == "rust" && !filesystem::get_rust_sysroot_path().empty()) { - auto rust_analyzer = filesystem::get_rust_sysroot_path() / "bin" / "rust-analyzer"; - boost::system::error_code ec; - if(boost::filesystem::exists(rust_analyzer, ec)) - source_views.emplace_back(new Source::LanguageProtocolView(file_path, language, language_protocol_language_id, rust_analyzer.string())); - else - source_views.emplace_back(new Source::GenericView(file_path, language)); + else if(language && language_protocol_language_id == "rust") { + if(!filesystem::find_executable("rust-analyzer").empty()) + source_views.emplace_back(new Source::LanguageProtocolView(file_path, language, language_protocol_language_id, "rust-analyzer")); + else { + auto sysroot = filesystem::get_rust_sysroot_path(); + if(!sysroot.empty()) { + auto rust_analyzer = sysroot / "bin" / "rust-analyzer"; + boost::system::error_code ec; + if(boost::filesystem::exists(rust_analyzer, ec)) + source_views.emplace_back(new Source::LanguageProtocolView(file_path, language, language_protocol_language_id, rust_analyzer.string())); + } + } } - else { + if(source_views_previous_size == source_views.size()) { if(language) { static std::set shown; std::string language_id = language->get_id();