diff options
Diffstat (limited to 'clang/lib/Format/Format.cpp')
-rw-r--r-- | clang/lib/Format/Format.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 6f7ee274e99..32d6bb855ad 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -1393,27 +1393,29 @@ tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code, } template <typename T> -static tooling::Replacements +static llvm::Expected<tooling::Replacements> processReplacements(T ProcessFunc, StringRef Code, const tooling::Replacements &Replaces, const FormatStyle &Style) { if (Replaces.empty()) return tooling::Replacements(); - std::string NewCode = applyAllReplacements(Code, Replaces); + auto NewCode = applyAllReplacements(Code, Replaces); + if (!NewCode) + return NewCode.takeError(); std::vector<tooling::Range> ChangedRanges = tooling::calculateChangedRanges(Replaces); StringRef FileName = Replaces.begin()->getFilePath(); tooling::Replacements FormatReplaces = - ProcessFunc(Style, NewCode, ChangedRanges, FileName); + ProcessFunc(Style, *NewCode, ChangedRanges, FileName); return mergeReplacements(Replaces, FormatReplaces); } -tooling::Replacements formatReplacements(StringRef Code, - const tooling::Replacements &Replaces, - const FormatStyle &Style) { +llvm::Expected<tooling::Replacements> +formatReplacements(StringRef Code, const tooling::Replacements &Replaces, + const FormatStyle &Style) { // We need to use lambda function here since there are two versions of // `sortIncludes`. auto SortIncludes = [](const FormatStyle &Style, StringRef Code, @@ -1421,8 +1423,10 @@ tooling::Replacements formatReplacements(StringRef Code, StringRef FileName) -> tooling::Replacements { return sortIncludes(Style, Code, Ranges, FileName); }; - tooling::Replacements SortedReplaces = + auto SortedReplaces = processReplacements(SortIncludes, Code, Replaces, Style); + if (!SortedReplaces) + return SortedReplaces.takeError(); // We need to use lambda function here since there are two versions of // `reformat`. @@ -1431,7 +1435,7 @@ tooling::Replacements formatReplacements(StringRef Code, StringRef FileName) -> tooling::Replacements { return reformat(Style, Code, Ranges, FileName); }; - return processReplacements(Reformat, Code, SortedReplaces, Style); + return processReplacements(Reformat, Code, *SortedReplaces, Style); } namespace { @@ -1591,7 +1595,7 @@ fixCppIncludeInsertions(StringRef Code, const tooling::Replacements &Replaces, } // anonymous namespace -tooling::Replacements +llvm::Expected<tooling::Replacements> cleanupAroundReplacements(StringRef Code, const tooling::Replacements &Replaces, const FormatStyle &Style) { // We need to use lambda function here since there are two versions of |