Como configurar o LSP com clangd
Contexto
Editores como Emacs, Vim ou VS Code oferecem suporte a recursos como navegação e preenchimento automático de código, mensagens de erro do compilador inline e outros, usando o LSP (em inglês), o protocolo do servidor de linguagem. Um servidor de linguagem comum com suporte a LSP é o
clangd, que depende da presença de
compile_commands.json, um arquivo JSON com um registro dos comandos de compilação para
cada arquivo em um projeto.
Como gerar compile_commands.json para o código-fonte XLA?
Use o script build_tools/lint/generate_compile_commands.py. A seguinte invocação da raiz do repositório XLA gera um
arquivo compile_commands.json no lugar: bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Build Cleaner
A CI do XLA no Google executa outras verificações para verificar se todas as metas listam corretamente todas as dependências nos arquivos BUILD, que não são ativadas por padrão na CI do Bazel OSS. Executar os comandos a seguir antes de enviar a solicitação de pull (PR, na sigla em inglês) à equipe do XLA vai acelerar muito o tempo necessário para mesclar a PR. Caso contrário, você precisará que um Googler faça essas correções internamente ou mais algumas rodadas de revisões de PR para corrigir com base no feedback dos Googlers.
Verificação de camadas
Ao criar com --features=layering_check, você garante que não vai incluir acidentalmente um cabeçalho por uma dependência transitiva sem listá-lo nas dependências de destino.
Remover dependências não utilizadas dos arquivos BUILD
Instale a ferramenta 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
Instale a ferramenta 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
Use bant para gerar comandos do buildozer e remover dependências não usadas:
bant dwyu //xla/core/collectives:symmetric_memory
Se você estiver com sorte, execute-os diretamente:
. <(bant dwyu //xla/core/collectives:symmetric_memory)