Author: ioeric Date: Mon Jul 11 08:53:21 2016 New Revision: 275063 URL: http://llvm.org/viewvc/llvm-project?rev=275063&view=rev Log: 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 Modified: clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp clang-tools-extra/trunk/include-fixer/IncludeFixer.h clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp clang-tools-extra/trunk/unittests/clang-tidy/ClangTidyTest.h clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp Modified: clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp?rev=275063&r1=275062&r2=275063&view=diff ============================================================================== --- clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp (original) +++ clang-tools-extra/trunk/include-fixer/IncludeFixer.cpp Mon Jul 11 08:53:21 2016 @@ -349,7 +349,7 @@ bool IncludeFixerActionFactory::runInvoc 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 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 Modified: clang-tools-extra/trunk/include-fixer/IncludeFixer.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/IncludeFixer.h?rev=275063&r1=275062&r2=275063&view=diff ============================================================================== --- clang-tools-extra/trunk/include-fixer/IncludeFixer.h (original) +++ clang-tools-extra/trunk/include-fixer/IncludeFixer.h Mon Jul 11 08:53:21 2016 @@ -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()); Modified: clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp?rev=275063&r1=275062&r2=275063&view=diff ============================================================================== --- clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp (original) +++ clang-tools-extra/trunk/include-fixer/tool/ClangIncludeFixer.cpp Mon Jul 11 08:53:21 2016 @@ -209,13 +209,20 @@ int includeFixerMain(int argc, const cha 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 cha 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 cha 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(); } Modified: clang-tools-extra/trunk/unittests/clang-tidy/ClangTidyTest.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-tidy/ClangTidyTest.h?rev=275063&r1=275062&r2=275063&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clang-tidy/ClangTidyTest.h (original) +++ clang-tools-extra/trunk/unittests/clang-tidy/ClangTidyTest.h Mon Jul 11 08:53:21 2016 @@ -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::vect 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) \ Modified: clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp?rev=275063&r1=275062&r2=275063&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp (original) +++ clang-tools-extra/trunk/unittests/include-fixer/IncludeFixerTest.cpp Mon Jul 11 08:53:21 2016 @@ -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); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits