diff options
author | Daniel Jasper <djasper@google.com> | 2017-11-10 17:11:18 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2017-11-10 17:11:18 +0000 |
commit | 028d815e2847d7056b37eb938b5fdaca7aa3636e (patch) | |
tree | 20f0f06173ad9f4cc338ca9f594afe256f440c30 /clang | |
parent | c77d00e327d4997c5bb34e39ee6e16ca339237ca (diff) | |
download | bcm5719-llvm-028d815e2847d7056b37eb938b5fdaca7aa3636e.tar.gz bcm5719-llvm-028d815e2847d7056b37eb938b5fdaca7aa3636e.zip |
[clang-format] Handle leading comments in using declaration
This fixes clang-format internal assertion for the following code:
/* override */ using std::string;
Patch by Igor Sugak. Thank you.
llvm-svn: 317901
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Format/UsingDeclarationsSorter.cpp | 10 | ||||
-rw-r--r-- | clang/unittests/Format/UsingDeclarationsSorterTest.cpp | 7 |
2 files changed, 13 insertions, 4 deletions
diff --git a/clang/lib/Format/UsingDeclarationsSorter.cpp b/clang/lib/Format/UsingDeclarationsSorter.cpp index 72151137eed..2c124ec78b1 100644 --- a/clang/lib/Format/UsingDeclarationsSorter.cpp +++ b/clang/lib/Format/UsingDeclarationsSorter.cpp @@ -172,15 +172,17 @@ std::pair<tooling::Replacements, unsigned> UsingDeclarationsSorter::analyze( tooling::Replacements Fixes; SmallVector<UsingDeclaration, 4> UsingDeclarations; for (size_t I = 0, E = AnnotatedLines.size(); I != E; ++I) { + const auto *FirstTok = AnnotatedLines[I]->First; if (AnnotatedLines[I]->InPPDirective || - !AnnotatedLines[I]->startsWith(tok::kw_using) || - AnnotatedLines[I]->First->Finalized) { + !AnnotatedLines[I]->startsWith(tok::kw_using) || FirstTok->Finalized) { endUsingDeclarationBlock(&UsingDeclarations, SourceMgr, &Fixes); continue; } - if (AnnotatedLines[I]->First->NewlinesBefore > 1) + if (FirstTok->NewlinesBefore > 1) endUsingDeclarationBlock(&UsingDeclarations, SourceMgr, &Fixes); - std::string Label = computeUsingDeclarationLabel(AnnotatedLines[I]->First); + const auto *UsingTok = + FirstTok->is(tok::comment) ? FirstTok->getNextNonComment() : FirstTok; + std::string Label = computeUsingDeclarationLabel(UsingTok); if (Label.empty()) { endUsingDeclarationBlock(&UsingDeclarations, SourceMgr, &Fixes); continue; diff --git a/clang/unittests/Format/UsingDeclarationsSorterTest.cpp b/clang/unittests/Format/UsingDeclarationsSorterTest.cpp index e72076a8e31..37427a51f82 100644 --- a/clang/unittests/Format/UsingDeclarationsSorterTest.cpp +++ b/clang/unittests/Format/UsingDeclarationsSorterTest.cpp @@ -348,6 +348,13 @@ TEST_F(UsingDeclarationsSorterTest, SortsPartialRangeOfUsingDeclarations) { {tooling::Range(19, 1)})); } +TEST_F(UsingDeclarationsSorterTest, SortsUsingDeclarationsWithLeadingkComments) { + EXPECT_EQ("/* comment */ using a;\n" + "/* comment */ using b;", + sortUsingDeclarations("/* comment */ using b;\n" + "/* comment */ using a;")); +} + } // end namespace } // end namespace format } // end namespace clang |