diff options
author | Sam McCall <sam.mccall@gmail.com> | 2018-07-12 14:49:52 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2018-07-12 14:49:52 +0000 |
commit | 6316e0d32293413a131b3124f31c0bbae4abd4ea (patch) | |
tree | 95e58b392f870994ac10fa46be225c7ba0c388e9 | |
parent | ac305e18a48d768831b972b088d01dc032962525 (diff) | |
download | bcm5719-llvm-6316e0d32293413a131b3124f31c0bbae4abd4ea.tar.gz bcm5719-llvm-6316e0d32293413a131b3124f31c0bbae4abd4ea.zip |
[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
-rw-r--r-- | clang-tools-extra/clangd/ClangdServer.cpp | 4 | ||||
-rw-r--r-- | clang-tools-extra/clangd/ClangdServer.h | 17 | ||||
-rw-r--r-- | clang-tools-extra/clangd/FSProvider.h | 42 |
3 files changed, 43 insertions, 20 deletions
diff --git a/clang-tools-extra/clangd/ClangdServer.cpp b/clang-tools-extra/clangd/ClangdServer.cpp index ed8cba5f1dd..01cc823947e 100644 --- a/clang-tools-extra/clangd/ClangdServer.cpp +++ b/clang-tools-extra/clangd/ClangdServer.cpp @@ -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! diff --git a/clang-tools-extra/clangd/ClangdServer.h b/clang-tools-extra/clangd/ClangdServer.h index 36dcd1cc3f9..d5351924e96 100644 --- a/clang-tools-extra/clangd/ClangdServer.h +++ b/clang-tools-extra/clangd/ClangdServer.h @@ -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 diff --git a/clang-tools-extra/clangd/FSProvider.h b/clang-tools-extra/clangd/FSProvider.h new file mode 100644 index 00000000000..70dfb441a00 --- /dev/null +++ b/clang-tools-extra/clangd/FSProvider.h @@ -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 |