diff options
author | Daniel Jasper <djasper@google.com> | 2013-01-30 09:46:12 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2013-01-30 09:46:12 +0000 |
commit | 7b038a23819c391d0ba649db8755d3da5cda9ec2 (patch) | |
tree | 371db27d782a5e14d09dccccbf4226bc193a4a39 | |
parent | 5fbfafcd8c25f40508687d367182c73d633e6b89 (diff) | |
download | bcm5719-llvm-7b038a23819c391d0ba649db8755d3da5cda9ec2.tar.gz bcm5719-llvm-7b038a23819c391d0ba649db8755d3da5cda9ec2.zip |
Don't generate no-op replacements.
No functional changes.
llvm-svn: 173916
-rw-r--r-- | clang/lib/Format/Format.cpp | 5 | ||||
-rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 16 |
2 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 9dfde34e8b5..08ea8e97de5 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -194,6 +194,11 @@ private: /// \brief Stores \p Text as the replacement for the whitespace in front of /// \p Tok. void storeReplacement(const FormatToken &Tok, const std::string Text) { + // Don't create a replacement, if it does not change anything. + if (StringRef(SourceMgr.getCharacterData(Tok.WhiteSpaceStart), + Tok.WhiteSpaceLength) == Text) + return; + Replaces.insert(tooling::Replacement(SourceMgr, Tok.WhiteSpaceStart, Tok.WhiteSpaceLength, Text)); } diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 32b2ff7f750..97358982cf6 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -38,6 +38,7 @@ protected: tooling::Replacements Replace = reformat(Style, Lex, Context.Sources, Ranges, new IgnoringDiagConsumer()); + ReplacementCount = Replace.size(); EXPECT_TRUE(applyAllReplacements(Replace, Context.Rewrite)); DEBUG(llvm::errs() << "\n" << Context.getRewrittenText(ID) << "\n\n"); return Context.getRewrittenText(ID); @@ -105,6 +106,8 @@ protected: verifyFormat(text); verifyFormat(llvm::Twine("void f() { " + text + " }").str()); } + + int ReplacementCount; }; TEST_F(FormatTest, MessUp) { @@ -148,6 +151,19 @@ TEST_F(FormatTest, ImportantSpaces) { verifyFormat("vector< ::Type> v;"); } +TEST_F(FormatTest, OnlyGeneratesNecessaryReplacements) { + EXPECT_EQ("if (a) {\n" + " f();\n" + "}", format("if(a){f();}")); + EXPECT_EQ(4, ReplacementCount); + EXPECT_EQ("if (a) {\n" + " f();\n" + "}", format("if (a) {\n" + " f();\n" + "}")); + EXPECT_EQ(0, ReplacementCount); +} + //===----------------------------------------------------------------------===// // Tests for control statements. //===----------------------------------------------------------------------===// |