From c53e3f489337bd8b82335e75de68ebe6989e575d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 22 Nov 2021 13:53:59 +0100 Subject: [PATCH] ClangCodeModel: Treat function-like macros like functions ... when completing with clangd. Change-Id: I8ffc0ff7a4a0f819f2ae48aabbb16609eb178178 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 5d4e7acbbd6..46e80e750a3 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2938,8 +2938,12 @@ void ClangdCompletionItem::apply(TextDocumentManipulatorInterface &manipulator, const auto kind = static_cast( item.kind().value_or(CompletionItemKind::Text)); + const bool isMacroCall = kind == CompletionItemKind::Text && item.label().contains('(') + && item.label().contains(')'); // Heuristic const bool isFunctionLike = kind == CompletionItemKind::Function - || kind == CompletionItemKind::Method || kind == CompletionItemKind::Constructor; + || kind == CompletionItemKind::Method || kind == CompletionItemKind::Constructor + || isMacroCall; + QString rawInsertText = edit->newText(); // Some preparation for our magic involving (non-)insertion of parentheses and @@ -2981,8 +2985,8 @@ void ClangdCompletionItem::apply(TextDocumentManipulatorInterface &manipulator, } if (!abandonParen) abandonParen = isAtUsingDeclaration(manipulator, rangeStart); - if (!abandonParen && matchPreviousWord(manipulator, cursor, detail)) // function definition? - abandonParen = true; + if (!abandonParen && !isMacroCall && matchPreviousWord(manipulator, cursor, detail)) + abandonParen = true; // function definition if (!abandonParen) { if (completionSettings.m_spaceAfterFunctionName) extraCharacters += ' ';