From 34a1971edea43bf999978bd1abc039139bb143dc Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 15 Jul 2021 11:39:56 +0200 Subject: [PATCH] Clangd: Allow more fine-grained logging Change-Id: Ia882575a3b6babd0945ef60be08b152428d3f39d Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index c180710a340..31d4b71ef08 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -72,6 +72,9 @@ namespace ClangCodeModel { namespace Internal { static Q_LOGGING_CATEGORY(clangdLog, "qtc.clangcodemodel.clangd", QtWarningMsg); +static Q_LOGGING_CATEGORY(clangdLogServer, "qtc.clangcodemodel.clangd.server", QtWarningMsg); +static Q_LOGGING_CATEGORY(clangdLogAst, "qtc.clangcodemodel.clangd.ast", QtWarningMsg); +static Q_LOGGING_CATEGORY(clangdLogHighlight, "qtc.clangcodemodel.clangd.highlight", QtWarningMsg); static QString indexingToken() { return "backgroundIndexProgress"; } class AstParams : public JsonObject @@ -438,7 +441,7 @@ static BaseClientInterface *clientInterface(Project *project, const Utils::FileP cmd.addArg("-j=" + QString::number(settings.workerThreadLimit())); if (!jsonDbDir.isEmpty()) cmd.addArg("--compile-commands-dir=" + jsonDbDir.toString()); - if (clangdLog().isDebugEnabled()) + if (clangdLogServer().isDebugEnabled()) cmd.addArgs({"--log=verbose", "--pretty"}); const auto interface = new StdIOClientInterface; interface->setCommandLine(cmd); @@ -1367,7 +1370,7 @@ void ClangdClient::gatherHelpItemForTooltip(const HoverRequest::Response &hoverR if (children && !children->isEmpty()) node = children->first(); } - if (clangdLog().isDebugEnabled()) + if (clangdLogAst().isDebugEnabled()) node.print(0); QString type = node.type(); @@ -1687,7 +1690,7 @@ void ClangdClient::Private::handleDeclDefSwitchReplies() // Find the function declaration or definition associated with the cursor. // For instance, the cursor could be somwehere inside a function body or // on a function return type, or ... - if (clangdLog().isDebugEnabled()) + if (clangdLogAst().isDebugEnabled()) switchDeclDefData->ast->print(0); const Utils::optional functionNode = switchDeclDefData->getFunctionNode(); if (!functionNode) { @@ -1760,7 +1763,7 @@ static void collectExtraResults(QFutureInterface return; const auto it = std::lower_bound(results.begin(), results.end(), result, lessThan); if (it == results.end() || *it != result) { - qCDebug(clangdLog) << "adding additional highlighting result" + qCDebug(clangdLogHighlight) << "adding additional highlighting result" << result.line << result.column << result.length; results.insert(it, result); return; @@ -2317,7 +2320,7 @@ static void semanticHighlighter(QFutureInterface styles.mixinStyles.push_back(TextEditor::C_DECLARATION); if (isOutputParameter(token)) styles.mixinStyles.push_back(TextEditor::C_OUTPUT_ARGUMENT); - qCDebug(clangdLog) << "adding highlighting result" + qCDebug(clangdLogHighlight) << "adding highlighting result" << token.line << token.column << token.length << int(styles.mainStyle); return TextEditor::HighlightingResult(token.line, token.column, token.length, styles); }; @@ -2350,7 +2353,8 @@ void ClangdClient::Private::handleSemanticTokens(TextEditor::TextDocument *doc, { qCDebug(clangdLog()) << "handling LSP tokens" << tokens.size(); for (const ExpandedSemanticToken &t : tokens) - qCDebug(clangdLog) << '\t' << t.line << t.column << t.length << t.type << t.modifiers; + qCDebug(clangdLogHighlight()) << '\t' << t.line << t.column << t.length << t.type + << t.modifiers; // TODO: Cache ASTs AstParams params(TextDocumentIdentifier(DocumentUri::fromFilePath(doc->filePath()))); @@ -2359,7 +2363,7 @@ void ClangdClient::Private::handleSemanticTokens(TextEditor::TextDocument *doc, if (!q->documentOpen(doc)) return; const Utils::optional ast = response.result(); - if (ast && clangdLog().isDebugEnabled()) + if (ast && clangdLogAst().isDebugEnabled()) ast->print(); const auto runner = [tokens, text = doc->document()->toPlainText(),