forked from OSchip/llvm-project
Fix formatting of long declarations with const type.
Before (exceeding the column limit): LoooooooooooooooooooooooooooooooooooooooongType const LoooooooooooooooooooooooooooooooooooooooongVariable; After: LoooooooooooooooooooooooooooooooooooooooongType const LoooooooooooooooooooooooooooooooooooooooongVariable; llvm-svn: 185418
This commit is contained in:
parent
868bebf844
commit
dba1c5587c
|
@ -585,13 +585,7 @@ private:
|
|||
}
|
||||
|
||||
if (Current.Type == TT_Unknown) {
|
||||
if (Current.Previous && Current.is(tok::identifier) &&
|
||||
((Current.Previous->is(tok::identifier) &&
|
||||
Current.Previous->Tok.getIdentifierInfo()->getPPKeywordID() ==
|
||||
tok::pp_not_keyword) ||
|
||||
isSimpleTypeSpecifier(*Current.Previous) ||
|
||||
Current.Previous->Type == TT_PointerOrReference ||
|
||||
Current.Previous->Type == TT_TemplateCloser)) {
|
||||
if (isStartOfName(Current)) {
|
||||
Contexts.back().FirstStartOfName = &Current;
|
||||
Current.Type = TT_StartOfName;
|
||||
NameFound = true;
|
||||
|
@ -666,6 +660,33 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
/// \brief Take a guess at whether \p Tok starts a name of a function or
|
||||
/// variable declaration.
|
||||
///
|
||||
/// This is a heuristic based on whether \p Tok is an identifier following
|
||||
/// something that is likely a type.
|
||||
bool isStartOfName(const FormatToken &Tok) {
|
||||
if (Tok.isNot(tok::identifier) || Tok.Previous == NULL)
|
||||
return false;
|
||||
|
||||
// Skip "const" as it does not have an influence on whether this is a name.
|
||||
FormatToken *PreviousNotConst = Tok.Previous;
|
||||
while (PreviousNotConst != NULL && PreviousNotConst->is(tok::kw_const))
|
||||
PreviousNotConst = PreviousNotConst->Previous;
|
||||
|
||||
if (PreviousNotConst == NULL)
|
||||
return false;
|
||||
|
||||
bool IsPPKeyword =
|
||||
PreviousNotConst->is(tok::identifier) && PreviousNotConst->Previous &&
|
||||
PreviousNotConst->Previous->is(tok::hash);
|
||||
|
||||
return (!IsPPKeyword && PreviousNotConst->is(tok::identifier)) ||
|
||||
PreviousNotConst->Type == TT_PointerOrReference ||
|
||||
PreviousNotConst->Type == TT_TemplateCloser ||
|
||||
isSimpleTypeSpecifier(*PreviousNotConst);
|
||||
}
|
||||
|
||||
/// \brief Return the type of the given token assuming it is * or &.
|
||||
TokenType determineStarAmpUsage(const FormatToken &Tok, bool IsExpression) {
|
||||
const FormatToken *PrevToken = Tok.getPreviousNoneComment();
|
||||
|
|
|
@ -3451,11 +3451,16 @@ TEST_F(FormatTest, BreaksLongDeclarations) {
|
|||
verifyFormat("LoooooooooooooooooooooooooooooooooooooooongType\n"
|
||||
" LoooooooooooooooooooooooooooooooooooooooongVariable;",
|
||||
getGoogleStyle());
|
||||
verifyFormat("LoooooooooooooooooooooooooooooooooooooooongType const\n"
|
||||
" LoooooooooooooooooooooooooooooooooooooooongVariable;",
|
||||
getGoogleStyle());
|
||||
verifyFormat("LoooooooooooooooooooooooooooooooooooooooongReturnType\n"
|
||||
" LoooooooooooooooooooooooooooooooongFunctionDeclaration();",
|
||||
getGoogleStyle());
|
||||
verifyFormat("LoooooooooooooooooooooooooooooooooooooooongReturnType\n"
|
||||
"LooooooooooooooooooooooooooooooooooongFunctionDefinition() {}");
|
||||
verifyFormat("LoooooooooooooooooooooooooooooooooooooooongReturnType const\n"
|
||||
"LooooooooooooooooooooooooooooooooooongFunctionDefinition() {}");
|
||||
|
||||
// FIXME: Without the comment, this breaks after "(".
|
||||
verifyFormat("LoooooooooooooooooooooooooooooooooooooooongType // break\n"
|
||||
|
|
Loading…
Reference in New Issue