From 94a59f15c6c4c3b1263531d7e9dc1e0db2067a14 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 28 Sep 2021 13:28:05 +0200 Subject: [PATCH] ClangCodeModel: Replace a TODO item with a version check Change-Id: I22911b5bc5da3e905d1f31ac1bb19251058a5471 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 55d90060d12..72c80a75e9f 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2479,7 +2479,7 @@ static void semanticHighlighter(QFutureInterface &future, const QList &tokens, const QString &docContents, const AstNode &ast, const QPointer &widget, - int docRevision) + int docRevision, const QVersionNumber &clangdVersion) { if (future.isCanceled()) { future.reportFinished(); @@ -2513,7 +2513,8 @@ static void semanticHighlighter(QFutureInterface &future, return false; }; - const auto toResult = [&ast, &isOutputParameter](const ExpandedSemanticToken &token) { + const auto toResult = [&ast, &isOutputParameter, &clangdVersion] + (const ExpandedSemanticToken &token) { TextStyles styles; if (token.type == "variable") { if (token.modifiers.contains("functionScope")) { @@ -2532,11 +2533,10 @@ static void semanticHighlighter(QFutureInterface &future, if (path.length() > 1) { const AstNode declNode = path.at(path.length() - 2); if (declNode.kind() == "Function" || declNode.kind() == "CXXMethod") { - - // TODO: Remove this once we can assume clangd >= 14. - if (declNode.arcanaContains("' virtual")) + if (clangdVersion < QVersionNumber(14) + && declNode.arcanaContains("' virtual")) { styles.mainStyle = C_VIRTUAL_METHOD; - + } if (declNode.hasChildWithRole("statement")) styles.mixinStyles.push_back(C_FUNCTION_DEFINITION); } @@ -2640,8 +2640,9 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc, [doc](const IEditor *editor) { return editor->document() == doc; }); const auto editorWidget = TextEditorWidget::fromEditor(editor); const auto runner = [tokens, text = doc->document()->toPlainText(), ast, - w = QPointer(editorWidget), rev = doc->document()->revision()] { - return Utils::runAsync(semanticHighlighter, tokens, text, ast, w, rev); + w = QPointer(editorWidget), rev = doc->document()->revision(), + clangdVersion = q->versionNumber()] { + return Utils::runAsync(semanticHighlighter, tokens, text, ast, w, rev, clangdVersion); }; if (isTesting) {