10 #include "llvm/ADT/STLExtras.h" 11 #include "llvm/ADT/SmallString.h" 12 #include "llvm/ADT/StringRef.h" 13 #include "llvm/Support/Path.h" 14 #include "llvm/Support/VirtualFileSystem.h" 26 class VolatileFileSystem :
public llvm::vfs::ProxyFileSystem {
28 explicit VolatileFileSystem(llvm::IntrusiveRefCntPtr<FileSystem>
FS)
29 : ProxyFileSystem(std::move(FS)) {}
31 llvm::ErrorOr<std::unique_ptr<llvm::vfs::File>>
32 openFileForRead(
const llvm::Twine &InPath)
override {
33 llvm::SmallString<128>
Path;
34 InPath.toVector(Path);
36 auto File = getUnderlyingFS().openFileForRead(Path);
41 llvm::StringRef
FileName = llvm::sys::path::filename(Path);
42 if (FileName.startswith(
"preamble-") && FileName.endswith(
".pch"))
44 return std::unique_ptr<VolatileFile>(
new VolatileFile(std::move(*
File)));
48 class VolatileFile :
public llvm::vfs::File {
50 VolatileFile(std::unique_ptr<llvm::vfs::File> Wrapped)
51 : Wrapped(std::move(Wrapped)) {
52 assert(this->Wrapped);
55 virtual llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
56 getBuffer(
const llvm::Twine &
Name, int64_t FileSize,
57 bool RequiresNullTerminator,
bool )
override {
58 return Wrapped->getBuffer(Name, FileSize, RequiresNullTerminator,
62 llvm::ErrorOr<llvm::vfs::Status> status()
override {
63 return Wrapped->status();
65 llvm::ErrorOr<std::string> getName()
override {
return Wrapped->getName(); }
66 std::error_code close()
override {
return Wrapped->close(); }
69 std::unique_ptr<File> Wrapped;
74 llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>
79 return new VolatileFileSystem(
80 llvm::vfs::createPhysicalFileSystem().release());
std::string Path
A typedef to represent a file path.
static constexpr llvm::StringLiteral Name
===– Representation.cpp - ClangDoc Representation --------—*- C++ -*-===//
llvm::IntrusiveRefCntPtr< llvm::vfs::FileSystem > getFileSystem() const override
Called by ClangdServer to obtain a vfs::FileSystem to be used for parsing.