37 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_PROJECTAWARE_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_PROJECTAWARE_H11 12#include "Config.h"13#include "index/Index.h"14#include "support/Threading.h"15#include <functional>16#include <memory>17namespace clang {18namespace clangd {19 20/// A functor to create an index for an external index specification. Functor21/// should perform any high latency operation in a separate thread through22/// AsyncTaskRunner, if set.23/// Spec is never `None`.24using IndexFactory = std::function<std::unique_ptr<SymbolIndex>(25 const Config::ExternalIndexSpec &, AsyncTaskRunner *)>;26 27/// Returns an index that answers queries using external indices. IndexFactory28/// specifies how to generate an index from an external source. If \p Sync is29/// set, index won't own any asnyc task runner.30/// IndexFactory must be injected because this code cannot depend on the remote31/// index client.32std::unique_ptr<SymbolIndex> createProjectAwareIndex(IndexFactory, bool Sync);33} // namespace clangd34} // namespace clang35 36#endif37