diff options
Diffstat (limited to 'clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp')
-rw-r--r-- | clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp b/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp index 81e65ed..c26fc21 100644 --- a/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp +++ b/clang-tools-extra/clangd/unittests/tweaks/TweakTesting.cpp @@ -162,5 +162,37 @@ std::string TweakTest::decorate(llvm::StringRef Code, .str(); } +// TODO: Reuse more code between TweakTest::apply() and +// TweakWorkspaceTest::apply(). +TweakResult +TweakWorkspaceTest::apply(StringRef InvocationFile, + llvm::Annotations::Range InvocationRange) { + auto AST = Workspace.openFile(InvocationFile); + if (!AST) { + ADD_FAILURE() << "No file '" << InvocationFile << "' in workspace"; + return TweakResult{"failed to setup"}; + } + + auto Index = Workspace.index(); + auto Result = applyTweak( + *AST, InvocationRange, TweakID, Index.get(), + &AST->getSourceManager().getFileManager().getVirtualFileSystem()); + if (!Result) + return TweakResult{"unavailable"}; + if (!*Result) + return TweakResult{"fail: " + llvm::toString(Result->takeError())}; + const auto &Effect = **Result; + if ((*Result)->ShowMessage) + return TweakResult{"message:\n" + *Effect.ShowMessage}; + + TweakResult Retval{"success"}; + for (auto &It : Effect.ApplyEdits) { + auto NewText = It.second.apply(); + if (!NewText) + return TweakResult{"bad edits: " + llvm::toString(NewText.takeError())}; + Retval.EditedFiles.insert_or_assign(It.first(), *NewText); + } + return Retval; +} } // namespace clangd } // namespace clang |