diff options
author | Sam McCall <sam.mccall@gmail.com> | 2020-12-04 09:58:50 +0100 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2020-12-07 13:07:10 +0100 |
commit | a1cb9cbf5c4939e78a6c3b3677cf8e3dbdf51932 (patch) | |
tree | 316d4ad5197b5dbd38baad41528a6394dc012297 /clang/lib/Tooling/CompilationDatabase.cpp | |
parent | 347ea1af348e7b48341be4d85b10a7076483f59c (diff) | |
download | llvm-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.cpp | 16 |
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:: |