This revision was automatically updated to reflect the committed changes. Closed by commit rL336909: [clangd] Extract FileSystemProvider into a separate header. NFC (authored by sammccall, committed by ). Herald added a subscriber: llvm-commits.
Changed prior to commit: https://reviews.llvm.org/D49142?vs=154823&id=155178#toc Repository: rL LLVM https://reviews.llvm.org/D49142 Files: clang-tools-extra/trunk/clangd/ClangdServer.cpp clang-tools-extra/trunk/clangd/ClangdServer.h clang-tools-extra/trunk/clangd/FSProvider.h Index: clang-tools-extra/trunk/clangd/FSProvider.h =================================================================== --- clang-tools-extra/trunk/clangd/FSProvider.h +++ clang-tools-extra/trunk/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 Index: clang-tools-extra/trunk/clangd/ClangdServer.cpp =================================================================== --- clang-tools-extra/trunk/clangd/ClangdServer.cpp +++ clang-tools-extra/trunk/clangd/ClangdServer.cpp @@ -68,10 +68,6 @@ } // 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! Index: clang-tools-extra/trunk/clangd/ClangdServer.h =================================================================== --- clang-tools-extra/trunk/clangd/ClangdServer.h +++ clang-tools-extra/trunk/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 @@ 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
Index: clang-tools-extra/trunk/clangd/FSProvider.h =================================================================== --- clang-tools-extra/trunk/clangd/FSProvider.h +++ clang-tools-extra/trunk/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 Index: clang-tools-extra/trunk/clangd/ClangdServer.cpp =================================================================== --- clang-tools-extra/trunk/clangd/ClangdServer.cpp +++ clang-tools-extra/trunk/clangd/ClangdServer.cpp @@ -68,10 +68,6 @@ } // 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! Index: clang-tools-extra/trunk/clangd/ClangdServer.h =================================================================== --- clang-tools-extra/trunk/clangd/ClangdServer.h +++ clang-tools-extra/trunk/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 @@ 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
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits