From f697a0d46ca2e0f6b9a6e5aa8da6f967cbd4f9a1 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 19 Nov 2020 15:04:11 +0100 Subject: [PATCH] ClangCodeModel: Fix sorting of includes when auto-completing ... by treating the directory separator specially. Fixes: QTCREATORBUG-21490 Change-Id: Iad6f51f39516a88bd14ba1eddcf2c6656490ee5b Reviewed-by: David Schulz --- .../clangcompletionassistprocessor.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 5dbfd4e94d8..98f50831747 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -60,6 +60,7 @@ #include #include +#include #include namespace ClangCodeModel { @@ -512,11 +513,17 @@ bool ClangCompletionAssistProcessor::completeInclude(const QTextCursor &cursor) completeIncludePath(realPath, suffixes); } - auto includesCompare = [](AssistProposalItemInterface *first, - AssistProposalItemInterface *second) { - return first->text() < second->text(); - }; - std::sort(m_completions.begin(), m_completions.end(), includesCompare); + QList> completionsForSorting; + for (AssistProposalItemInterface * const item : qAsConst(m_completions)) { + QString s = item->text(); + s.replace('/', QChar(0)); // The dir separator should compare less than anything else. + completionsForSorting << qMakePair(item, s); + } + Utils::sort(completionsForSorting, [](const auto &left, const auto &right) { + return left.second < right.second; + }); + for (int i = 0; i < completionsForSorting.count(); ++i) + m_completions[i] = completionsForSorting[i].first; return !m_completions.isEmpty(); }