forked from OSchip/llvm-project
[clangd] Extract FileSystemProvider into a separate header. NFC
Reviewers: sammccall Reviewed By: sammccall Subscribers: mgorny, ioeric, MaskRay, jkorous, cfe-commits Differential Revision: https://reviews.llvm.org/D49142 llvm-svn: 336909
This commit is contained in:
parent
ac305e18a4
commit
6316e0d322
|
@ -68,10 +68,6 @@ public:
|
|||
|
||||
} // namespace
|
||||
|
||||
IntrusiveRefCntPtr<vfs::FileSystem> RealFileSystemProvider::getFileSystem() {
|
||||
return vfs::getRealFileSystem();
|
||||
}
|
||||
|
||||
ClangdServer::Options ClangdServer::optsForTest() {
|
||||
ClangdServer::Options Opts;
|
||||
Opts.UpdateDebounce = std::chrono::steady_clock::duration::zero(); // Faster!
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include "ClangdUnit.h"
|
||||
#include "CodeComplete.h"
|
||||
#include "FSProvider.h"
|
||||
#include "Function.h"
|
||||
#include "GlobalCompilationDatabase.h"
|
||||
#include "Protocol.h"
|
||||
|
@ -42,22 +43,6 @@ public:
|
|||
std::vector<Diag> Diagnostics) = 0;
|
||||
};
|
||||
|
||||
class FileSystemProvider {
|
||||
public:
|
||||
virtual ~FileSystemProvider() = default;
|
||||
/// Called by ClangdServer to obtain a vfs::FileSystem to be used for parsing.
|
||||
/// Context::current() will be the context passed to the clang entrypoint,
|
||||
/// such as addDocument(), and will also be propagated to result callbacks.
|
||||
/// Embedders may use this to isolate filesystem accesses.
|
||||
virtual IntrusiveRefCntPtr<vfs::FileSystem> getFileSystem() = 0;
|
||||
};
|
||||
|
||||
class RealFileSystemProvider : public FileSystemProvider {
|
||||
public:
|
||||
/// Returns getRealFileSystem().
|
||||
IntrusiveRefCntPtr<vfs::FileSystem> getFileSystem() override;
|
||||
};
|
||||
|
||||
/// Provides API to manage ASTs for a collection of C++ files and request
|
||||
/// various language features.
|
||||
/// Currently supports async diagnostics, code completion, formatting and goto
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
//===--- FSProvider.h - VFS provider for ClangdServer ------------*- C++-*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_FSPROVIDER_H
|
||||
#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_FSPROVIDER_H
|
||||
|
||||
#include "clang/Basic/VirtualFileSystem.h"
|
||||
#include "llvm/ADT/IntrusiveRefCntPtr.h"
|
||||
|
||||
namespace clang {
|
||||
namespace clangd {
|
||||
|
||||
// Wrapper for vfs::FileSystem for use in multithreaded programs like clangd.
|
||||
// As FileSystem is not threadsafe, concurrent threads must each obtain one.
|
||||
class FileSystemProvider {
|
||||
public:
|
||||
virtual ~FileSystemProvider() = default;
|
||||
/// Called by ClangdServer to obtain a vfs::FileSystem to be used for parsing.
|
||||
/// Context::current() will be the context passed to the clang entrypoint,
|
||||
/// such as addDocument(), and will also be propagated to result callbacks.
|
||||
/// Embedders may use this to isolate filesystem accesses.
|
||||
virtual IntrusiveRefCntPtr<vfs::FileSystem> getFileSystem() = 0;
|
||||
};
|
||||
|
||||
class RealFileSystemProvider : public FileSystemProvider {
|
||||
public:
|
||||
// FIXME: returns the single real FS instance, which is not threadsafe.
|
||||
IntrusiveRefCntPtr<vfs::FileSystem> getFileSystem() override {
|
||||
return vfs::getRealFileSystem();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace clangd
|
||||
} // namespace clang
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue