Cómo configurar LSP con clangd
Fondo
Los editores como Emacs, Vim o VS Code admiten funciones como la navegación por el código, la finalización de código, los mensajes de error del compilador intercalados y otros, a través de LSP, el protocolo de servidor de lenguajes. Un servidor de lenguaje común con compatibilidad con LSP es clangd, que se basa en la presencia de compile_commands.json, un archivo JSON con un registro de los comandos de compilación para cada archivo de un proyecto.
¿Cómo genero compile_commands.json para el código fuente de XLA?
Usa la secuencia de comandos build_tools/lint/generate_compile_commands.py. La siguiente invocación desde la raíz del repo de XLA genera un archivo compile_commands.json en su lugar: bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Limpiador de compilaciones
La CI de XLA dentro de Google ejecuta verificaciones adicionales para comprobar que todos los destinos enumeren correctamente todas las dependencias en los archivos BUILD, que no están habilitados de forma predeterminada en la CI de Bazel de OSS. Ejecutar los siguientes comandos antes de enviar la PR al equipo de XLA acelerará en gran medida el tiempo que lleva combinar la PR, ya que, de lo contrario, necesitarás que algún Googler realice estas correcciones de forma interna o algunas rondas más de revisiones de la PR para corregirlas según los comentarios de los Googlers.
Verificación de capas
Compilar con --features=layering_check garantiza que no incluyas accidentalmente un encabezado a través de una dependencia transitiva sin incluirlo en las dependencias de destino.
Quita las dependencias sin usar de los archivos BUILD
Instala la herramienta Buildozer:
sudo curl -fsSL -o /usr/bin/buildozer https://github.com/bazelbuild/buildtools/releases/download/6.0.0/buildozer-linux-amd64
sudo chmod 755 /usr/bin/buildozer
Instala la herramienta Bant:
# To some writable directory that does not require root access
bazel build -c opt //bant && install -D --strip bazel-bin/bant/bant ~/bin/bant
# For a system directory that requires root-access
sudo install -D --strip bazel-bin/bant/bant /usr/local/bin/bant
Usa bant para generar comandos de buildozer que quiten las dependencias sin usar:
bant dwyu //xla/core/collectives:symmetric_memory
Si te sientes con suerte, puedes ejecutarlos directamente:
. <(bant dwyu //xla/core/collectives:symmetric_memory)