[utilities/kate/release/22.12] /: lspclient: add rootfile pattern to detect rootpath
Git commit d2658e90832083544cc7738a3e63da7595ea42fa by Christoph Cullmann, on behalf of Eric Armbruster. Committed on 06/11/2022 at 20:05. Pushed by cullmann into branch 'release/22.12'. lspclient: add rootfile pattern to detect rootpath This makes it possible to use file patterns to detect the rootpath. (cherry picked from commit 2239a2aa6c20f1268072e5fed76babc911bb03f1) M +33 -17 addons/lspclient/lspclientservermanager.cpp M +2-1doc/kate/plugins.docbook https://invent.kde.org/utilities/kate/commit/d2658e90832083544cc7738a3e63da7595ea42fa diff --git a/addons/lspclient/lspclientservermanager.cpp b/addons/lspclient/lspclientservermanager.cpp index 538c40aaa..68d6521e5 100644 --- a/addons/lspclient/lspclientservermanager.cpp +++ b/addons/lspclient/lspclientservermanager.cpp @@ -40,8 +40,8 @@ typedef QMap QStringMap; Q_DECLARE_METATYPE(QStringMap) -// helper to find a proper root dir for the given document & file name that indicate the root dir -static QString rootForDocumentAndRootIndicationFileName(KTextEditor::Document *document, const QString &rootIndicationFileName) +// helper to find a proper root dir for the given document & file name/pattern that indicates the root dir +static QString findRootForDocument(KTextEditor::Document *document, const QStringList &rootIndicationFileNames, const QStringList &rootIndicationFilePatterns) { // search only feasible if document is local file if (!document->url().isLocalFile()) { @@ -56,7 +56,15 @@ static QString rootForDocumentAndRootIndicationFileName(KTextEditor::Document *d seenDirectories.insert(dir.absolutePath()); // the file that indicates the root dir is there => all fine -if (dir.exists(rootIndicationFileName)) { +for (const auto &fileName : rootIndicationFileNames) { +if (dir.exists(fileName)) { +return dir.absolutePath(); +} +} + +// look for matching file patterns +dir.setNameFilters(rootIndicationFilePatterns); +if (!dir.entryList().isEmpty()) { return dir.absolutePath(); } @@ -70,6 +78,22 @@ static QString rootForDocumentAndRootIndicationFileName(KTextEditor::Document *d return QString(); } +static QStringList indicationDataToStringList(const QJsonValue &indicationData) +{ +if (indicationData.isArray()) { +QStringList indications; +for (auto indication : indicationData.toArray()) { +if (indication.isString()) { +indications << indication.toString(); +} +} + +return indications; +} + +return {}; +}; + #include // helper guard to handle revision (un)lock @@ -624,20 +648,12 @@ private: * clangd does */ if (!rootpath) { -const auto fileNamesForDetection = serverConfig.value(QStringLiteral("rootIndicationFileNames")); -if (fileNamesForDetection.isArray()) { -// we try each file name alternative in the listed order -// this allows to have preferences -const auto fileNames = fileNamesForDetection.toArray(); -for (auto name : fileNames) { -if (name.isString()) { -auto root = rootForDocumentAndRootIndicationFileName(document, name.toString()); -if (!root.isEmpty()) { -rootpath = root; -break; -} -} -} +const auto fileNamesForDetection = indicationDataToStringList(serverConfig.value(QStringLiteral("rootIndicationFileNames"))); +const auto filePatternsForDetection = indicationDataToStringList(serverConfig.value(QStringLiteral("rootIndicationFilePatterns"))); + +auto root = findRootForDocument(document, fileNamesForDetection, filePatternsForDetection); +if (!root.isEmpty()) { +rootpath = root; } } diff --git a/doc/kate/plugins.docbook b/doc/kate/plugins.docbook index b03998268..ab950b333 100644 --- a/doc/kate/plugins.docbook +++ b/doc/kate/plugins.docbook @@ -2686,7 +2686,8 @@ to the projectBase (as determined by the Project plugin) if applicable, or otherwise relative to the document's directory. If not specified and "rootIndicationFileNames" is an array as filenames, then a parent directory of -current document containing such a file is selected. As a last fallback, the +current document containing such a file is selected. Alternatively, if "root" is not specified and +"rootIndicationFilePatterns" is an array of file patterns, then a parent directory of the current document matching the file pattern is selected. As a last fallback, the home directory is selected as "root". For any document, the resulting "root" then determines whether or not a separate instance is needed. If so, the "root" is pas
[utilities/kate] /: lspclient: add rootfile pattern to detect rootpath
Git commit 2239a2aa6c20f1268072e5fed76babc911bb03f1 by Christoph Cullmann, on behalf of Eric Armbruster. Committed on 06/11/2022 at 19:52. Pushed by cullmann into branch 'master'. lspclient: add rootfile pattern to detect rootpath This makes it possible to use file patterns to detect the rootpath. M +33 -17 addons/lspclient/lspclientservermanager.cpp M +2-1doc/kate/plugins.docbook https://invent.kde.org/utilities/kate/commit/2239a2aa6c20f1268072e5fed76babc911bb03f1 diff --git a/addons/lspclient/lspclientservermanager.cpp b/addons/lspclient/lspclientservermanager.cpp index 538c40aaa..68d6521e5 100644 --- a/addons/lspclient/lspclientservermanager.cpp +++ b/addons/lspclient/lspclientservermanager.cpp @@ -40,8 +40,8 @@ typedef QMap QStringMap; Q_DECLARE_METATYPE(QStringMap) -// helper to find a proper root dir for the given document & file name that indicate the root dir -static QString rootForDocumentAndRootIndicationFileName(KTextEditor::Document *document, const QString &rootIndicationFileName) +// helper to find a proper root dir for the given document & file name/pattern that indicates the root dir +static QString findRootForDocument(KTextEditor::Document *document, const QStringList &rootIndicationFileNames, const QStringList &rootIndicationFilePatterns) { // search only feasible if document is local file if (!document->url().isLocalFile()) { @@ -56,7 +56,15 @@ static QString rootForDocumentAndRootIndicationFileName(KTextEditor::Document *d seenDirectories.insert(dir.absolutePath()); // the file that indicates the root dir is there => all fine -if (dir.exists(rootIndicationFileName)) { +for (const auto &fileName : rootIndicationFileNames) { +if (dir.exists(fileName)) { +return dir.absolutePath(); +} +} + +// look for matching file patterns +dir.setNameFilters(rootIndicationFilePatterns); +if (!dir.entryList().isEmpty()) { return dir.absolutePath(); } @@ -70,6 +78,22 @@ static QString rootForDocumentAndRootIndicationFileName(KTextEditor::Document *d return QString(); } +static QStringList indicationDataToStringList(const QJsonValue &indicationData) +{ +if (indicationData.isArray()) { +QStringList indications; +for (auto indication : indicationData.toArray()) { +if (indication.isString()) { +indications << indication.toString(); +} +} + +return indications; +} + +return {}; +}; + #include // helper guard to handle revision (un)lock @@ -624,20 +648,12 @@ private: * clangd does */ if (!rootpath) { -const auto fileNamesForDetection = serverConfig.value(QStringLiteral("rootIndicationFileNames")); -if (fileNamesForDetection.isArray()) { -// we try each file name alternative in the listed order -// this allows to have preferences -const auto fileNames = fileNamesForDetection.toArray(); -for (auto name : fileNames) { -if (name.isString()) { -auto root = rootForDocumentAndRootIndicationFileName(document, name.toString()); -if (!root.isEmpty()) { -rootpath = root; -break; -} -} -} +const auto fileNamesForDetection = indicationDataToStringList(serverConfig.value(QStringLiteral("rootIndicationFileNames"))); +const auto filePatternsForDetection = indicationDataToStringList(serverConfig.value(QStringLiteral("rootIndicationFilePatterns"))); + +auto root = findRootForDocument(document, fileNamesForDetection, filePatternsForDetection); +if (!root.isEmpty()) { +rootpath = root; } } diff --git a/doc/kate/plugins.docbook b/doc/kate/plugins.docbook index b03998268..ab950b333 100644 --- a/doc/kate/plugins.docbook +++ b/doc/kate/plugins.docbook @@ -2686,7 +2686,8 @@ to the projectBase (as determined by the Project plugin) if applicable, or otherwise relative to the document's directory. If not specified and "rootIndicationFileNames" is an array as filenames, then a parent directory of -current document containing such a file is selected. As a last fallback, the +current document containing such a file is selected. Alternatively, if "root" is not specified and +"rootIndicationFilePatterns" is an array of file patterns, then a parent directory of the current document matching the file pattern is selected. As a last fallback, the home directory is selected as "root". For any document, the resulting "root" then determines whether or not a separate instance is needed. If so, the "root" is passed as rootUri/rootPath.
[khelpcenter] [Bug 461468] Crash when pressing particular sequence of function keys
https://bugs.kde.org/show_bug.cgi?id=461468 Albert Astals Cid changed: What|Removed |Added CC||aa...@kde.org --- Comment #4 from Albert Astals Cid --- That's a KHTML shortcut, may have to do with the khelpcenter<->khtml or khtml itself is broken -- You are receiving this mail because: You are the assignee for the bug.