diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1784,9 +1784,9 @@ namespace { -class BracesRemover : public TokenAnalyzer { +class BracesInserter : public TokenAnalyzer { public: - BracesRemover(const Environment &Env, const FormatStyle &Style) + BracesInserter(const Environment &Env, const FormatStyle &Style) : TokenAnalyzer(Env, Style) {} std::pair @@ -1795,40 +1795,40 @@ FormatTokenLexer &Tokens) override { AffectedRangeMgr.computeAffectedLines(AnnotatedLines); tooling::Replacements Result; - removeBraces(AnnotatedLines, Result); + insertBraces(AnnotatedLines, Result); return {Result, 0}; } private: - void removeBraces(SmallVectorImpl &Lines, + void insertBraces(SmallVectorImpl &Lines, tooling::Replacements &Result) { const auto &SourceMgr = Env.getSourceManager(); for (AnnotatedLine *Line : Lines) { - removeBraces(Line->Children, Result); + insertBraces(Line->Children, Result); if (!Line->Affected) continue; for (FormatToken *Token = Line->First; Token && !Token->Finalized; Token = Token->Next) { - if (!Token->Optional) + if (Token->BraceCount == 0) continue; - assert(Token->isOneOf(tok::l_brace, tok::r_brace)); - assert(Token->Next || Token == Line->Last); - const auto Start = - Token == Line->Last || (Token->Next->is(tok::kw_else) && - Token->Next->NewlinesBefore > 0) - ? Token->WhitespaceRange.getBegin() - : Token->Tok.getLocation(); - const auto Range = - CharSourceRange::getCharRange(Start, Token->Tok.getEndLoc()); - cantFail(Result.add(tooling::Replacement(SourceMgr, Range, ""))); + std::string Brace; + if (Token->BraceCount < 0) { + assert(Token->BraceCount == -1); + Brace = '{'; + } else { + Brace = '\n' + std::string(Token->BraceCount, '}'); + } + Token->BraceCount = 0; + const auto Start = Token->Tok.getEndLoc(); + cantFail(Result.add(tooling::Replacement(SourceMgr, Start, 0, Brace))); } } } }; -class BracesInserter : public TokenAnalyzer { +class BracesRemover : public TokenAnalyzer { public: - BracesInserter(const Environment &Env, const FormatStyle &Style) + BracesRemover(const Environment &Env, const FormatStyle &Style) : TokenAnalyzer(Env, Style) {} std::pair @@ -1837,32 +1837,32 @@ FormatTokenLexer &Tokens) override { AffectedRangeMgr.computeAffectedLines(AnnotatedLines); tooling::Replacements Result; - insertBraces(AnnotatedLines, Result); + removeBraces(AnnotatedLines, Result); return {Result, 0}; } private: - void insertBraces(SmallVectorImpl &Lines, + void removeBraces(SmallVectorImpl &Lines, tooling::Replacements &Result) { const auto &SourceMgr = Env.getSourceManager(); for (AnnotatedLine *Line : Lines) { - insertBraces(Line->Children, Result); + removeBraces(Line->Children, Result); if (!Line->Affected) continue; for (FormatToken *Token = Line->First; Token && !Token->Finalized; Token = Token->Next) { - if (Token->BraceCount == 0) + if (!Token->Optional) continue; - std::string Brace; - if (Token->BraceCount < 0) { - assert(Token->BraceCount == -1); - Brace = '{'; - } else { - Brace = '\n' + std::string(Token->BraceCount, '}'); - } - Token->BraceCount = 0; - const auto Start = Token->Tok.getEndLoc(); - cantFail(Result.add(tooling::Replacement(SourceMgr, Start, 0, Brace))); + assert(Token->isOneOf(tok::l_brace, tok::r_brace)); + assert(Token->Next || Token == Line->Last); + const auto Start = + Token == Line->Last || (Token->Next->is(tok::kw_else) && + Token->Next->NewlinesBefore > 0) + ? Token->WhitespaceRange.getBegin() + : Token->Tok.getLocation(); + const auto Range = + CharSourceRange::getCharRange(Start, Token->Tok.getEndLoc()); + cantFail(Result.add(tooling::Replacement(SourceMgr, Range, ""))); } } } @@ -3169,18 +3169,18 @@ typedef std::function( const Environment &)> AnalyzerPass; - SmallVector Passes; - - if (Style.isCpp() && Style.QualifierAlignment != FormatStyle::QAS_Leave) { - Passes.emplace_back([&](const Environment &Env) { - return QualifierAlignmentFixer(Env, Expanded, Code, Ranges, - FirstStartColumn, NextStartColumn, - LastStartColumn, FileName) - .process(); - }); - } + SmallVector Passes; if (Style.isCpp()) { + if (Style.QualifierAlignment != FormatStyle::QAS_Leave) { + Passes.emplace_back([&](const Environment &Env) { + return QualifierAlignmentFixer(Env, Expanded, Code, Ranges, + FirstStartColumn, NextStartColumn, + LastStartColumn, FileName) + .process(); + }); + } + if (Style.InsertBraces) Passes.emplace_back([&](const Environment &Env) { return BracesInserter(Env, Expanded).process();