summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2016-07-11 13:53:21 +0000
committerEric Liu <ioeric@google.com>2016-07-11 13:53:21 +0000
commita452db4d0ffa4cf6c2a861ef5806f30caebe2bf9 (patch)
treeedcff3cce2c241736b3b329e45b5d3dc21bd742a /clang-tools-extra
parent4f8d99433da80161f85988052f96bc7dc621c4eb (diff)
downloadbcm5719-llvm-a452db4d0ffa4cf6c2a861ef5806f30caebe2bf9.tar.gz
bcm5719-llvm-a452db4d0ffa4cf6c2a861ef5806f30caebe2bf9.zip
Changes related to tooling::applyAllReplacements interface change in D21601.
Summary: this patch contains changes related to the interface change from http://reviews.llvm.org/D21601. Only submit this patch after D21601 is submitted. Reviewers: djasper, klimek Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D21602 llvm-svn: 275063
Diffstat (limited to 'clang-tools-extra')
-rw-r--r--clang-tools-extra/include-fixer/IncludeFixer.cpp8
-rw-r--r--clang-tools-extra/include-fixer/IncludeFixer.h5
-rw-r--r--clang-tools-extra/include-fixer/tool/ClangIncludeFixer.cpp48
-rw-r--r--clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h9
-rw-r--r--clang-tools-extra/unittests/include-fixer/IncludeFixerTest.cpp13
5 files changed, 56 insertions, 27 deletions
diff --git a/clang-tools-extra/include-fixer/IncludeFixer.cpp b/clang-tools-extra/include-fixer/IncludeFixer.cpp
index 64844d26681..24265618966 100644
--- a/clang-tools-extra/include-fixer/IncludeFixer.cpp
+++ b/clang-tools-extra/include-fixer/IncludeFixer.cpp
@@ -349,7 +349,7 @@ bool IncludeFixerActionFactory::runInvocation(
return !Compiler.getDiagnostics().hasFatalErrorOccurred();
}
-tooling::Replacements
+llvm::Expected<tooling::Replacements>
createInsertHeaderReplacements(StringRef Code, StringRef FilePath,
StringRef Header,
const clang::format::FormatStyle &Style) {
@@ -360,8 +360,10 @@ createInsertHeaderReplacements(StringRef Code, StringRef FilePath,
clang::tooling::Replacements Insertions = {
tooling::Replacement(FilePath, UINT_MAX, 0, IncludeName)};
- return formatReplacements(
- Code, cleanupAroundReplacements(Code, Insertions, Style), Style);
+ auto CleanReplaces = cleanupAroundReplacements(Code, Insertions, Style);
+ if (!CleanReplaces)
+ return CleanReplaces;
+ return formatReplacements(Code, *CleanReplaces, Style);
}
} // namespace include_fixer
diff --git a/clang-tools-extra/include-fixer/IncludeFixer.h b/clang-tools-extra/include-fixer/IncludeFixer.h
index 4c21285ce7c..e1cb52c9c93 100644
--- a/clang-tools-extra/include-fixer/IncludeFixer.h
+++ b/clang-tools-extra/include-fixer/IncludeFixer.h
@@ -68,8 +68,9 @@ private:
/// \param Header The header being inserted.
/// \param Style clang-format style being used.
///
-/// \return Replacements for inserting and sorting headers.
-tooling::Replacements createInsertHeaderReplacements(
+/// \return Replacements for inserting and sorting headers on success;
+/// otherwise, an llvm::Error carrying llvm::StringError is returned.
+llvm::Expected<tooling::Replacements> createInsertHeaderReplacements(
StringRef Code, StringRef FilePath, StringRef Header,
const clang::format::FormatStyle &Style = clang::format::getLLVMStyle());
diff --git a/clang-tools-extra/include-fixer/tool/ClangIncludeFixer.cpp b/clang-tools-extra/include-fixer/tool/ClangIncludeFixer.cpp
index 7bccb4d9e56..98df22025de 100644
--- a/clang-tools-extra/include-fixer/tool/ClangIncludeFixer.cpp
+++ b/clang-tools-extra/include-fixer/tool/ClangIncludeFixer.cpp
@@ -209,13 +209,20 @@ int includeFixerMain(int argc, const char **argv) {
return 1;
}
- tooling::Replacements Replacements =
- clang::include_fixer::createInsertHeaderReplacements(
- Code->getBuffer(), FilePath, Context.getHeaders().front(),
- InsertStyle);
- std::string ChangedCode =
- tooling::applyAllReplacements(Code->getBuffer(), Replacements);
- llvm::outs() << ChangedCode;
+ auto Replacements = clang::include_fixer::createInsertHeaderReplacements(
+ Code->getBuffer(), FilePath, Context.getHeaders().front(), InsertStyle);
+ if (!Replacements) {
+ errs() << "Failed to create header insertion replacement: "
+ << llvm::toString(Replacements.takeError()) << "\n";
+ return 1;
+ }
+ auto ChangedCode =
+ tooling::applyAllReplacements(Code->getBuffer(), *Replacements);
+ if (!ChangedCode) {
+ llvm::errs() << llvm::toString(ChangedCode.takeError()) << "\n";
+ return 1;
+ }
+ llvm::outs() << *ChangedCode;
return 0;
}
@@ -250,17 +257,22 @@ int includeFixerMain(int argc, const char **argv) {
return 1;
}
- tooling::Replacements Replacements =
- clang::include_fixer::createInsertHeaderReplacements(
- /*Code=*/Buffer.get()->getBuffer(), FilePath,
- Context.getHeaders().front(), InsertStyle);
+ // FIXME: Rank the results and pick the best one instead of the first one.
+ auto Replacements = clang::include_fixer::createInsertHeaderReplacements(
+ /*Code=*/Buffer.get()->getBuffer(), FilePath,
+ Context.getHeaders().front(), InsertStyle);
+ if (!Replacements) {
+ errs() << "Failed to create header insertion replacement: "
+ << llvm::toString(Replacements.takeError()) << "\n";
+ return 1;
+ }
if (!Quiet)
llvm::errs() << "Added #include" << Context.getHeaders().front();
// Add missing namespace qualifiers to the unidentified symbol.
if (Context.getSymbolRange().getLength() > 0)
- Replacements.insert(Context.createSymbolReplacement(FilePath, 0));
+ Replacements->insert(Context.createSymbolReplacement(FilePath, 0));
// Set up a new source manager for applying the resulting replacements.
IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts(new DiagnosticOptions);
@@ -270,15 +282,19 @@ int includeFixerMain(int argc, const char **argv) {
Diagnostics.setClient(&DiagnosticPrinter, false);
if (STDINMode) {
- std::string ChangedCode =
- tooling::applyAllReplacements(Code->getBuffer(), Replacements);
- llvm::outs() << ChangedCode;
+ auto ChangedCode =
+ tooling::applyAllReplacements(Code->getBuffer(), *Replacements);
+ if (!ChangedCode) {
+ llvm::errs() << llvm::toString(ChangedCode.takeError()) << "\n";
+ return 1;
+ }
+ llvm::outs() << *ChangedCode;
return 0;
}
// Write replacements to disk.
Rewriter Rewrites(SM, LangOptions());
- tooling::applyAllReplacements(Replacements, Rewrites);
+ tooling::applyAllReplacements(*Replacements, Rewrites);
return Rewrites.overwriteChangedFiles();
}
diff --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h
index 0cbd955278f..b9725469199 100644
--- a/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h
+++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyTest.h
@@ -17,6 +17,7 @@
#include "clang/Frontend/FrontendActions.h"
#include "clang/Tooling/Refactoring.h"
#include "clang/Tooling/Tooling.h"
+#include "llvm/ADT/Optional.h"
#include <map>
#include <memory>
@@ -121,7 +122,13 @@ runCheckOnCode(StringRef Code, std::vector<ClangTidyError> *Errors = nullptr,
Fixes.insert(Error.Fix.begin(), Error.Fix.end());
if (Errors)
*Errors = Context.getErrors();
- return tooling::applyAllReplacements(Code, Fixes);
+ auto Result = tooling::applyAllReplacements(Code, Fixes);
+ if (!Result) {
+ // FIXME: propogate the error.
+ llvm::consumeError(Result.takeError());
+ return "";
+ }
+ return *Result;
}
#define EXPECT_NO_CHANGES(Check, Code) \
diff --git a/clang-tools-extra/unittests/include-fixer/IncludeFixerTest.cpp b/clang-tools-extra/unittests/include-fixer/IncludeFixerTest.cpp
index 85c3160e730..40a25018ed0 100644
--- a/clang-tools-extra/unittests/include-fixer/IncludeFixerTest.cpp
+++ b/clang-tools-extra/unittests/include-fixer/IncludeFixerTest.cpp
@@ -86,14 +86,17 @@ static std::string runIncludeFixer(
runOnCode(&Factory, Code, FakeFileName, ExtraArgs);
if (FixerContext.getMatchedSymbols().empty())
return Code;
- tooling::Replacements Replacements =
- clang::include_fixer::createInsertHeaderReplacements(
- Code, FakeFileName, FixerContext.getHeaders().front());
+ auto Replaces = clang::include_fixer::createInsertHeaderReplacements(
+ Code, FakeFileName, FixerContext.getHeaders().front());
+ EXPECT_TRUE(static_cast<bool>(Replaces))
+ << llvm::toString(Replaces.takeError()) << "\n";
+ if (!Replaces)
+ return "";
clang::RewriterTestContext Context;
clang::FileID ID = Context.createInMemoryFile(FakeFileName, Code);
if (FixerContext.getSymbolRange().getLength() > 0)
- Replacements.insert(FixerContext.createSymbolReplacement(FakeFileName, 0));
- clang::tooling::applyAllReplacements(Replacements, Context.Rewrite);
+ Replaces->insert(FixerContext.createSymbolReplacement(FakeFileName, 0));
+ clang::tooling::applyAllReplacements(*Replaces, Context.Rewrite);
return Context.getRewrittenText(ID);
}
OpenPOWER on IntegriCloud