1 //===--- ProjectAware.h ------------------------------------------*- C++-*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_PROJECT_AWARE_H 10 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_PROJECT_AWARE_H 11 12 #include "Config.h" 13 #include "index/Index.h" 14 #include "support/Threading.h" 15 #include <functional> 16 #include <memory> 17 namespace clang { 18 namespace clangd { 19 20 /// A functor to create an index for an external index specification. Functor 21 /// should perform any high latency operation in a separate thread through 22 /// AsyncTaskRunner. 23 using IndexFactory = std::function<std::unique_ptr<SymbolIndex>( 24 const Config::ExternalIndexSpec &, AsyncTaskRunner &)>; 25 26 /// Returns an index that answers queries using external indices. IndexFactory 27 /// specifies how to generate an index from an external source. 28 /// IndexFactory must be injected because this code cannot depend on the remote 29 /// index client. 30 std::unique_ptr<SymbolIndex> createProjectAwareIndex(IndexFactory); 31 } // namespace clangd 32 } // namespace clang 33 34 #endif 35