llvm-project/clang-tools-extra/clangd/index/remote
Aleksandr Platonov 91698fe45f [clangd] Take into account what is in the index (symbols, references, etc.) at indexes merge
Current indexes merge logic skip data from the static index if the file is in the dynamic index, but sometimes the dynamic index does not contain references (e.g. preamble (dynamic) index vs background (static) index).
This problem is masked with the fact, that the preamble index file list consists of file URI's and other indexes file lists consist of file paths.
This patch introduces the index contents (symbols, references, etc.), which makes indexes merge more flexible and makes it able to use URI's for the index file list.

Reviewed By: sammccall

Differential Revision: https://reviews.llvm.org/D94952
2021-02-05 13:35:07 +03:00
..
marshalling [clangd] Add symbol origin for remote index 2020-11-28 15:38:11 +01:00
server [clangd] Fix shared-lib builds 2020-11-24 13:05:20 +01:00
unimplemented [clangd] Cleanup dependencies around RemoteIndex 2020-11-04 16:58:11 +01:00
CMakeLists.txt [clangd] Fix shared-lib builds 2020-11-24 13:05:20 +01:00
Client.cpp [clangd] Take into account what is in the index (symbols, references, etc.) at indexes merge 2021-02-05 13:35:07 +03:00
Client.h [clangd] Implement path and URI translation for remote index 2020-07-09 12:52:55 +02:00
Index.proto [clangd] Separate final_result into a different message 2020-10-27 11:46:16 +01:00
README.md [clangd] Fix recommended gRPC version 2020-11-10 15:07:03 +03:00
Service.proto [clang] Split remote index service definition into a separate file. 2020-10-23 15:20:51 +02:00

README.md

Clangd remote index

Clangd uses a global index for project-wide code completion, navigation and other features. For large projects, building this can take many hours and keeping it loaded uses a lot of memory.

To relieve that burden, we're building remote index — a global index served on a different machine and shared between developers. This directory contains code that is used as Proof of Concept for the upcoming remote index feature.

Building

This feature uses gRPC and Protobuf libraries, so you will need to install them. There are two ways of doing that.

However you install dependencies, to enable this feature and build remote index tools you will need to set this CMake flag — -DCLANGD_ENABLE_REMOTE=On.

System-installed libraries

On Debian-like systems gRPC and Protobuf can be installed from apt:

apt install libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc

Building from sources

Another way of installing gRPC and Protobuf is building from sources using CMake (we need CMake config files to find necessary libraries in LLVM). The easiest way of doing that would be to choose a directory where you want to install so that the installation files are not copied to system root and you can easily uninstall gRPC or use different versions.

# Get source code.
$ git clone -b v1.33.2 https://github.com/grpc/grpc
$ cd grpc
$ git submodule update --init
# Choose directory where you want gRPC installation to live.
$ export GRPC_INSTALL_PATH=/where/you/want/grpc/to/be/installed
# Build and install gRPC to ${GRPC_INSTALL_PATH}
$ mkdir build; cd build
$ cmake -DgRPC_INSTALL=ON -DCMAKE_INSTALL_PREFIX=${GRPC_INSTALL_PATH} -DCMAKE_BUILD_TYPE=Release ..
$ make install

This guide goes into more detail on how to build gRPC from sources.

By default, CMake will look for system-installed libraries when building remote index tools so you will have to adjust LLVM's CMake invocation. The following flag will inform build system that you chose this option — -DGRPC_INSTALL_PATH=${GRPC_INSTALL_PATH}.

Running

You can run clangd-index-server and connect clangd instance to it using --remote-index-address and --project-root flags.