aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Tooling/CompilationDatabase.cpp
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2020-12-04 09:58:50 +0100
committerSam McCall <sam.mccall@gmail.com>2020-12-07 13:07:10 +0100
commita1cb9cbf5c4939e78a6c3b3677cf8e3dbdf51932 (patch)
tree316d4ad5197b5dbd38baad41528a6394dc012297 /clang/lib/Tooling/CompilationDatabase.cpp
parent347ea1af348e7b48341be4d85b10a7076483f59c (diff)
downloadllvm-a1cb9cbf5c4939e78a6c3b3677cf8e3dbdf51932.zip
llvm-a1cb9cbf5c4939e78a6c3b3677cf8e3dbdf51932.tar.gz
llvm-a1cb9cbf5c4939e78a6c3b3677cf8e3dbdf51932.tar.bz2
Add ability to load a FixedCompilationDatabase from a buffer.
Previously, loading one from a file meant allowing the library to do the IO. Clangd would prefer to do such IO itself (e.g. to allow caching). Differential Revision: https://reviews.llvm.org/D92640
Diffstat (limited to 'clang/lib/Tooling/CompilationDatabase.cpp')
-rw-r--r--clang/lib/Tooling/CompilationDatabase.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/clang/lib/Tooling/CompilationDatabase.cpp b/clang/lib/Tooling/CompilationDatabase.cpp
index 79bb8c0..d339fd0 100644
--- a/clang/lib/Tooling/CompilationDatabase.cpp
+++ b/clang/lib/Tooling/CompilationDatabase.cpp
@@ -348,16 +348,24 @@ FixedCompilationDatabase::loadFromFile(StringRef Path, std::string &ErrorMsg) {
ErrorMsg = "Error while opening fixed database: " + Result.message();
return nullptr;
}
+ return loadFromBuffer(llvm::sys::path::parent_path(Path),
+ (*File)->getBuffer(), ErrorMsg);
+}
+
+std::unique_ptr<FixedCompilationDatabase>
+FixedCompilationDatabase::loadFromBuffer(StringRef Directory, StringRef Data,
+ std::string &ErrorMsg) {
+ ErrorMsg.clear();
std::vector<std::string> Args;
- for (llvm::StringRef Line :
- llvm::make_range(llvm::line_iterator(**File), llvm::line_iterator())) {
+ StringRef Line;
+ while (!Data.empty()) {
+ std::tie(Line, Data) = Data.split('\n');
// Stray whitespace is almost certainly unintended.
Line = Line.trim();
if (!Line.empty())
Args.push_back(Line.str());
}
- return std::make_unique<FixedCompilationDatabase>(
- llvm::sys::path::parent_path(Path), std::move(Args));
+ return std::make_unique<FixedCompilationDatabase>(Directory, std::move(Args));
}
FixedCompilationDatabase::