forked from OSchip/llvm-project
Make DeletedLines local variables in checkEmptyNamespace.
Summary: Patch by Sam McCall! Reviewers: djasper Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D25162 llvm-svn: 283332
This commit is contained in:
parent
67be6ff839
commit
7956c4004d
|
@ -1041,11 +1041,12 @@ private:
|
|||
|
||||
// Iterate through all lines and remove any empty (nested) namespaces.
|
||||
void checkEmptyNamespace(SmallVectorImpl<AnnotatedLine *> &AnnotatedLines) {
|
||||
std::set<unsigned> DeletedLines;
|
||||
for (unsigned i = 0, e = AnnotatedLines.size(); i != e; ++i) {
|
||||
auto &Line = *AnnotatedLines[i];
|
||||
if (Line.startsWith(tok::kw_namespace) ||
|
||||
Line.startsWith(tok::kw_inline, tok::kw_namespace)) {
|
||||
checkEmptyNamespace(AnnotatedLines, i, i);
|
||||
checkEmptyNamespace(AnnotatedLines, i, i, DeletedLines);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1063,7 +1064,8 @@ private:
|
|||
// sets \p NewLine to the last line checked.
|
||||
// Returns true if the current namespace is empty.
|
||||
bool checkEmptyNamespace(SmallVectorImpl<AnnotatedLine *> &AnnotatedLines,
|
||||
unsigned CurrentLine, unsigned &NewLine) {
|
||||
unsigned CurrentLine, unsigned &NewLine,
|
||||
std::set<unsigned> &DeletedLines) {
|
||||
unsigned InitLine = CurrentLine, End = AnnotatedLines.size();
|
||||
if (Style.BraceWrapping.AfterNamespace) {
|
||||
// If the left brace is in a new line, we should consume it first so that
|
||||
|
@ -1083,7 +1085,8 @@ private:
|
|||
if (AnnotatedLines[CurrentLine]->startsWith(tok::kw_namespace) ||
|
||||
AnnotatedLines[CurrentLine]->startsWith(tok::kw_inline,
|
||||
tok::kw_namespace)) {
|
||||
if (!checkEmptyNamespace(AnnotatedLines, CurrentLine, NewLine))
|
||||
if (!checkEmptyNamespace(AnnotatedLines, CurrentLine, NewLine,
|
||||
DeletedLines))
|
||||
return false;
|
||||
CurrentLine = NewLine;
|
||||
continue;
|
||||
|
@ -1208,8 +1211,6 @@ private:
|
|||
|
||||
// Tokens to be deleted.
|
||||
std::set<FormatToken *, FormatTokenLess> DeletedTokens;
|
||||
// The line numbers of lines to be deleted.
|
||||
std::set<unsigned> DeletedLines;
|
||||
};
|
||||
|
||||
struct IncludeDirective {
|
||||
|
|
|
@ -119,6 +119,24 @@ TEST_F(CleanupTest, EmptyNamespaceWithCommentsBreakBeforeBrace) {
|
|||
EXPECT_EQ(Expected, Result);
|
||||
}
|
||||
|
||||
TEST_F(CleanupTest, EmptyNamespaceAroundConditionalCompilation) {
|
||||
std::string Code = "#ifdef A\n"
|
||||
"int a;\n"
|
||||
"int b;\n"
|
||||
"#else\n"
|
||||
"#endif\n"
|
||||
"namespace {}";
|
||||
std::string Expected = "#ifdef A\n"
|
||||
"int a;\n"
|
||||
"int b;\n"
|
||||
"#else\n"
|
||||
"#endif\n";
|
||||
std::vector<tooling::Range> Ranges(1, tooling::Range(0, Code.size()));
|
||||
FormatStyle Style = getLLVMStyle();
|
||||
std::string Result = cleanup(Code, Ranges, Style);
|
||||
EXPECT_EQ(Expected, Result);
|
||||
}
|
||||
|
||||
TEST_F(CleanupTest, CtorInitializationSimpleRedundantComma) {
|
||||
std::string Code = "class A {\nA() : , {} };";
|
||||
std::string Expected = "class A {\nA() {} };";
|
||||
|
|
Loading…
Reference in New Issue