[PATCH] D115967: [clang-format][NFC] Handle wrapping after => in mustBreakBefore()
Owen Pan via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 17 12:28:45 PST 2021
owenpan created this revision.
owenpan added reviewers: MyDeveloperDay, curdeius, HazardyKnusperkeks, peterstys.
owenpan added a project: clang-format.
owenpan requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Move the handling of brace wrapping after => from unwrapped line parser to token annotator and clean up the parser.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D115967
Files:
clang/lib/Format/TokenAnnotator.cpp
clang/lib/Format/UnwrappedLineParser.cpp
Index: clang/lib/Format/UnwrappedLineParser.cpp
===================================================================
--- clang/lib/Format/UnwrappedLineParser.cpp
+++ clang/lib/Format/UnwrappedLineParser.cpp
@@ -1638,19 +1638,8 @@
break;
}
case tok::equal:
- // Fat arrows (=>) have tok::TokenKind tok::equal but TokenType
- // TT_FatArrow. They always start an expression or a child block if
- // followed by a curly brace.
if (FormatTok->is(TT_FatArrow)) {
- nextToken();
- if (FormatTok->is(tok::l_brace)) {
- // C# may break after => if the next character is a newline.
- if (Style.isCSharp() && Style.BraceWrapping.AfterFunction == true) {
- // calling `addUnwrappedLine()` here causes odd parsing errors.
- FormatTok->MustBreakBefore = true;
- }
- parseChildBlock();
- }
+ tryToParseCSharpLambda();
break;
}
@@ -1726,7 +1715,7 @@
// Try to parse the property accessor:
// https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/properties
Tokens->setPosition(StoredPosition);
- if (!IsTrivialPropertyAccessor && Style.BraceWrapping.AfterFunction == true)
+ if (!IsTrivialPropertyAccessor && Style.BraceWrapping.AfterFunction)
addUnwrappedLine();
nextToken();
do {
@@ -1942,17 +1931,13 @@
}
bool UnwrappedLineParser::tryToParseCSharpLambda() {
- // Fat arrows (=>) have tok::TokenKind tok::equal but TokenType
- // TT_FatArrow. They always start an expression or a child block if
- // followed by a curly brace.
+ assert(FormatTok->is(TT_FatArrow));
+ // Fat arrows (=>) have tok::TokenKind tok::equal but TokenType TT_FatArrow.
+ // They always start an expression or a child block if followed by a curly
+ // brace.
nextToken();
if (FormatTok->isNot(tok::l_brace))
return false;
- // C# may break after => if the next character is a newline.
- if (Style.BraceWrapping.AfterFunction) {
- // calling `addUnwrappedLine()` here causes odd parsing errors.
- FormatTok->MustBreakBefore = true;
- }
parseChildBlock();
return true;
}
@@ -1965,24 +1950,17 @@
// FIXME: Once we have an expression parser in the UnwrappedLineParser,
// replace this by using parseAssignmentExpression() inside.
do {
- if (Style.isCSharp() && FormatTok->is(TT_FatArrow))
- if (tryToParseCSharpLambda())
- continue;
+ if (Style.isCSharp() && FormatTok->is(TT_FatArrow) &&
+ tryToParseCSharpLambda())
+ continue;
if (Style.Language == FormatStyle::LK_JavaScript) {
if (FormatTok->is(Keywords.kw_function) ||
FormatTok->startsSequence(Keywords.kw_async, Keywords.kw_function)) {
tryToParseJSFunction();
continue;
}
- if (FormatTok->is(TT_FatArrow)) {
- nextToken();
- // Fat arrows can be followed by simple expressions or by child blocks
- // in curly braces.
- if (FormatTok->is(tok::l_brace)) {
- parseChildBlock();
- continue;
- }
- }
+ if (FormatTok->is(TT_FatArrow) && tryToParseCSharpLambda())
+ continue;
if (FormatTok->is(tok::l_brace)) {
// Could be a method inside of a braced list `{a() { return 1; }}`.
if (tryToParseBracedList())
Index: clang/lib/Format/TokenAnnotator.cpp
===================================================================
--- clang/lib/Format/TokenAnnotator.cpp
+++ clang/lib/Format/TokenAnnotator.cpp
@@ -3717,6 +3717,9 @@
return true;
if (Style.isCSharp()) {
+ if (Left.is(TT_FatArrow) && Right.is(tok::l_brace) &&
+ Style.BraceWrapping.AfterFunction)
+ return true;
if (Right.is(TT_CSharpNamedArgumentColon) ||
Left.is(TT_CSharpNamedArgumentColon))
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D115967.395197.patch
Type: text/x-patch
Size: 3837 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211217/c000b221/attachment.bin>
More information about the cfe-commits
mailing list