forked from OSchip/llvm-project
[clang-format] extern with new line brace without indentation
https://github.com/llvm/llvm-project/issues/49804 Interaction between IndentExternBlock and AfterExternBlock means you cannot have AfterExternBlock = true and IndentExternBlock = NoIndent/Indent This patch resolves that ``` BraceWrapping: AfterExternBlock: true IndentExternBlock: AfterExternBlock ``` Fixes: #49804 Reviewed By: HazardyKnusperkeks, curdeius, owenpan Differential Revision: https://reviews.llvm.org/D115879
This commit is contained in:
parent
ff94bd1bc9
commit
3362fa59ec
|
@ -1279,17 +1279,18 @@ void UnwrappedLineParser::parseStructuralElement(bool IsTopLevel) {
|
|||
if (FormatTok->Tok.is(tok::string_literal)) {
|
||||
nextToken();
|
||||
if (FormatTok->Tok.is(tok::l_brace)) {
|
||||
if (!Style.IndentExternBlock) {
|
||||
if (Style.BraceWrapping.AfterExternBlock) {
|
||||
if (Style.BraceWrapping.AfterExternBlock)
|
||||
addUnwrappedLine();
|
||||
}
|
||||
unsigned AddLevels = Style.BraceWrapping.AfterExternBlock ? 1u : 0u;
|
||||
parseBlock(/*MustBeDeclaration=*/true, AddLevels);
|
||||
} else {
|
||||
// Either we indent or for backwards compatibility we follow the
|
||||
// AfterExternBlock style.
|
||||
unsigned AddLevels =
|
||||
Style.IndentExternBlock == FormatStyle::IEBS_Indent ? 1u : 0u;
|
||||
(Style.IndentExternBlock == FormatStyle::IEBS_Indent) ||
|
||||
(Style.BraceWrapping.AfterExternBlock &&
|
||||
Style.IndentExternBlock ==
|
||||
FormatStyle::IEBS_AfterExternBlock)
|
||||
? 1u
|
||||
: 0u;
|
||||
parseBlock(/*MustBeDeclaration=*/true, AddLevels);
|
||||
}
|
||||
addUnwrappedLine();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -3835,36 +3835,66 @@ TEST_F(FormatTest, IndentExternBlockStyle) {
|
|||
Style.IndentWidth = 2;
|
||||
|
||||
Style.IndentExternBlock = FormatStyle::IEBS_Indent;
|
||||
verifyFormat("extern \"C\" { /*9*/\n}", Style);
|
||||
verifyFormat("extern \"C\" { /*9*/\n"
|
||||
"}",
|
||||
Style);
|
||||
verifyFormat("extern \"C\" {\n"
|
||||
" int foo10();\n"
|
||||
"}",
|
||||
Style);
|
||||
|
||||
Style.IndentExternBlock = FormatStyle::IEBS_NoIndent;
|
||||
verifyFormat("extern \"C\" { /*11*/\n}", Style);
|
||||
verifyFormat("extern \"C\" { /*11*/\n"
|
||||
"}",
|
||||
Style);
|
||||
verifyFormat("extern \"C\" {\n"
|
||||
"int foo12();\n"
|
||||
"}",
|
||||
Style);
|
||||
|
||||
Style.IndentExternBlock = FormatStyle::IEBS_AfterExternBlock;
|
||||
Style.BreakBeforeBraces = FormatStyle::BS_Custom;
|
||||
Style.BraceWrapping.AfterExternBlock = true;
|
||||
verifyFormat("extern \"C\"\n{ /*13*/\n}", Style);
|
||||
Style.IndentExternBlock = FormatStyle::IEBS_Indent;
|
||||
verifyFormat("extern \"C\"\n"
|
||||
"{ /*13*/\n"
|
||||
"}",
|
||||
Style);
|
||||
verifyFormat("extern \"C\"\n{\n"
|
||||
" int foo14();\n"
|
||||
"}",
|
||||
Style);
|
||||
|
||||
Style.IndentExternBlock = FormatStyle::IEBS_AfterExternBlock;
|
||||
Style.BreakBeforeBraces = FormatStyle::BS_Custom;
|
||||
Style.BraceWrapping.AfterExternBlock = false;
|
||||
verifyFormat("extern \"C\" { /*15*/\n}", Style);
|
||||
Style.IndentExternBlock = FormatStyle::IEBS_NoIndent;
|
||||
verifyFormat("extern \"C\" { /*15*/\n"
|
||||
"}",
|
||||
Style);
|
||||
verifyFormat("extern \"C\" {\n"
|
||||
"int foo16();\n"
|
||||
"}",
|
||||
Style);
|
||||
|
||||
Style.BraceWrapping.AfterExternBlock = true;
|
||||
verifyFormat("extern \"C\"\n"
|
||||
"{ /*13*/\n"
|
||||
"}",
|
||||
Style);
|
||||
verifyFormat("extern \"C\"\n"
|
||||
"{\n"
|
||||
"int foo14();\n"
|
||||
"}",
|
||||
Style);
|
||||
|
||||
Style.IndentExternBlock = FormatStyle::IEBS_Indent;
|
||||
verifyFormat("extern \"C\"\n"
|
||||
"{ /*13*/\n"
|
||||
"}",
|
||||
Style);
|
||||
verifyFormat("extern \"C\"\n"
|
||||
"{\n"
|
||||
" int foo14();\n"
|
||||
"}",
|
||||
Style);
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, FormatsInlineASM) {
|
||||
|
|
Loading…
Reference in New Issue