Clang: Avoid multi-line display name for completion items

These come directly from clang. If converting for display in the
completion list widget, skip new line chunks.

Fixes: QTCREATORBUG-21600
Change-Id: I83749ed73fa68658ec073d97177768f59a87cebf
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Nikolai Kosjar
2018-12-03 16:09:08 +01:00
parent 57715c7f66
commit 9e17bd1bf0
3 changed files with 32 additions and 1 deletions

View File

@@ -25,6 +25,8 @@
#include "clangcompletionchunkstotextconverter.h"
#include <QtGlobal>
#include <algorithm>
#include <functional>
@@ -70,6 +72,11 @@ void CompletionChunksToTextConverter::setAddSpaces(bool addSpaces)
m_addSpaces = addSpaces;
}
void CompletionChunksToTextConverter::setHonorVerticalSpace(bool honor)
{
m_honorVerticalSpace = honor;
}
void CompletionChunksToTextConverter::setAddExtraVerticalSpaceBetweenBraces(
bool addExtraVerticalSpaceBetweenBraces)
{
@@ -145,6 +152,8 @@ QString CompletionChunksToTextConverter::convertToName(
{
CompletionChunksToTextConverter converter;
converter.setHonorVerticalSpace(false);
converter.parseChunks(codeCompletionChunks);
return converter.text();
@@ -183,6 +192,10 @@ void CompletionChunksToTextConverter::parse(
parsePlaceHolder(codeCompletionChunk); break;
case CodeCompletionChunk::LeftParen: parseLeftParen(codeCompletionChunk); break;
case CodeCompletionChunk::LeftBrace: parseLeftBrace(codeCompletionChunk); break;
case CodeCompletionChunk::VerticalSpace:
if (!m_honorVerticalSpace)
break;
Q_FALLTHROUGH();
default: parseText(codeCompletionChunk.text); break;
}
}

View File

@@ -50,6 +50,7 @@ public:
void setAddPlaceHolderPositions(bool addPlaceHolderPositions);
void setAddResultType(bool addResultType);
void setAddSpaces(bool addSpaces);
void setHonorVerticalSpace(bool honor);
void setAddExtraVerticalSpaceBetweenBraces(bool addExtraVerticalSpaceBetweenBraces);
void setEmphasizeOptional(bool emphasizeOptional); // Only for Html format
void setAddOptional(bool addOptional);
@@ -103,6 +104,7 @@ private:
bool m_addPlaceHolderPositions = false;
bool m_addResultType = false;
bool m_addSpaces = false;
bool m_honorVerticalSpace = true;
bool m_addExtraVerticalSpaceBetweenBraces = false;
bool m_emphasizeOptional = false;
bool m_addOptional = false;

View File

@@ -256,7 +256,7 @@ TEST_F(CompletionChunksToTextConverter, Enumeration)
ASSERT_THAT(converter.text(), QStringLiteral("Class"));
}
TEST_F(CompletionChunksToTextConverter, Switch)
TEST_F(CompletionChunksToTextConverter, SwitchAsKeyword)
{
CodeCompletionChunks completionChunks({switchName,
leftParen,
@@ -273,6 +273,22 @@ TEST_F(CompletionChunksToTextConverter, Switch)
ASSERT_THAT(converter.placeholderPositions().at(0), 8);
}
TEST_F(CompletionChunksToTextConverter, SwitchAsName)
{
CodeCompletionChunks completionChunks({switchName,
leftParen,
condition,
rightParen,
leftBrace,
verticalSpace,
rightBrace});
const QString text = ClangCodeModel::Internal::CompletionChunksToTextConverter::convertToName(
completionChunks);
ASSERT_THAT(text, QStringLiteral("switch(){}"));
}
TEST_F(CompletionChunksToTextConverter, For)
{
CodeCompletionChunks completionChunks({forName,