[utilities/kate] /: lspclient: support additional search path in configuration
Mark Nauwelaerts
null at kde.org
Tue Jun 15 22:53:24 BST 2021
Git commit 45362eaa64ede7b0dbb172a5c154859c76fd6231 by Mark Nauwelaerts.
Committed on 15/06/2021 at 21:53.
Pushed by mnauwelaerts into branch 'master'.
lspclient: support additional search path in configuration
M +20 -0 addons/lspclient/lspclientservermanager.cpp
M +1 -0 addons/lspclient/settings.json
M +10 -0 doc/kate/plugins.docbook
https://invent.kde.org/utilities/kate/commit/45362eaa64ede7b0dbb172a5c154859c76fd6231
diff --git a/addons/lspclient/lspclientservermanager.cpp b/addons/lspclient/lspclientservermanager.cpp
index 8218b054c..aad24f9d3 100644
--- a/addons/lspclient/lspclientservermanager.cpp
+++ b/addons/lspclient/lspclientservermanager.cpp
@@ -27,6 +27,7 @@
#include <QJsonObject>
#include <QJsonParseError>
#include <QRegularExpression>
+#include <QStandardPaths>
#include <QThread>
#include <QTime>
#include <QTimer>
@@ -606,12 +607,31 @@ private:
}
if (cmdline.length() > 0) {
+ // optionally search in supplied path(s)
+ auto vpath = serverConfig.value(QStringLiteral("path")).toArray();
+ if (vpath.size() > 0) {
+ auto cmd = QStandardPaths::findExecutable(cmdline[0]);
+ if (cmd.isEmpty()) {
+ // collect and expand in case home dir or other (environment) variable reference is used
+ QStringList path;
+ for (const auto &e : vpath) {
+ auto p = e.toString();
+ editor->expandText(p, view, p);
+ path.push_back(p);
+ }
+ cmd = QStandardPaths::findExecutable(cmdline[0], path);
+ if (!cmd.isEmpty()) {
+ cmdline[0] = cmd;
+ }
+ }
+ }
server.reset(new LSPClientServer(cmdline, root, realLangId, serverConfig.value(QStringLiteral("initializationOptions"))));
connect(server.data(), &LSPClientServer::stateChanged, this, &self_type::onStateChanged, Qt::UniqueConnection);
if (!server->start()) {
showMessage(i18n("Failed to start server: %1", cmdline.join(QLatin1Char(' '))), KTextEditor::Message::Error);
auto url = serverConfig.value(QStringLiteral("url")).toString();
if (!url.isEmpty()) {
+ showMessage(i18n("Please check your PATH for the binary"), KTextEditor::Message::Error);
showMessage(i18n("See also %1 for installation or details", url), KTextEditor::Message::Error);
}
} else {
diff --git a/addons/lspclient/settings.json b/addons/lspclient/settings.json
index a2a3d2deb..02def28f3 100644
--- a/addons/lspclient/settings.json
+++ b/addons/lspclient/settings.json
@@ -84,6 +84,7 @@
},
"rust": {
"command": ["rls"],
+ "path": ["%{ENV:HOME}/.cargo/bin", "%{ENV:USERPROFILE}/.cargo/bin"],
"rootIndicationFileNames": ["Cargo.lock", "Cargo.toml"],
"url": "https://github.com/rust-lang/rls",
"highlightingModeRegex": "^Rust$"
diff --git a/doc/kate/plugins.docbook b/doc/kate/plugins.docbook
index c250791eb..c90bda3e9 100644
--- a/doc/kate/plugins.docbook
+++ b/doc/kate/plugins.docbook
@@ -2523,6 +2523,7 @@ To aid in the explanation below, an excerpt of that configuration is given here:
},
"rust": {
"command": ["rls"],
+ "path": ["%{ENV:HOME}/.cargo/bin", "%{ENV:USERPROFILE}/.cargo/bin"],
"rootIndicationFileNames": ["Cargo.lock", "Cargo.toml"],
"url": "https://github.com/rust-lang/rls",
"highlightingModeRegex": "^Rust$"
@@ -2540,6 +2541,15 @@ To aid in the explanation below, an excerpt of that configuration is given here:
Note that each "command" may be an array or a string (in which case it is
split into an array). Also, a top-level "global" entry (next to "server") is
considered as well (see further below).
+The specified binary is searched for in the usual way, e.g. using <literal>PATH</literal>.
+If it is installed in some custom location, then the latter may have to be
+extended. Or alternatively, a (sym)link or wrapper script may be used in a location
+that is within the usual <literal>PATH</literal>. As illustrated above,
+one may also specify a "path" that will be searched for after the standard locations.
+</para>
+
+<para>
+All of the entries in "command", "root" and "path" are subject to variable expansion.
</para>
<para>
More information about the kde-doc-english
mailing list