Configurazione di LSP con clangd
Sfondo
Editor come Emacs, Vim o VS Code supportano funzionalità come la navigazione nel codice, il completamento del codice, i messaggi di errore del compilatore in linea e altre ancora, tramite LSP, il protocollo Language Server. Un server di linguaggio comune con supporto LSP è
clangd, che si basa sulla presenza di
compile_commands.json, un file JSON con un record dei comandi di compilazione per
ogni file di un progetto.
Come faccio a generare compile_commands.json per il codice sorgente XLA?
Utilizza lo script
build_tools/lint/generate_compile_commands.py. La seguente chiamata dalla radice del repository XLA genera un file compile_commands.json in loco: bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Build Cleaner
XLA CI all'interno di Google esegue controlli aggiuntivi per verificare che tutti i target elenchino correttamente tutte le dipendenze nei file BUILD, che non sono abilitate per impostazione predefinita in OSS Bazel CI. L'esecuzione dei seguenti comandi prima dell'invio della richiesta di pull al team XLA velocizzerà notevolmente i tempi di unione della richiesta di pull, altrimenti dovrai chiedere a un Googler di apportare queste correzioni internamente oppure dovrai eseguire altri cicli di revisione della richiesta di pull per correggerle in base al feedback dei Googler.
Layering Check
La compilazione con --features=layering_check assicura di non includere accidentalmente
un'intestazione tramite dipendenza transitiva senza elencarla nelle dipendenze
di destinazione.
Rimuovere le dipendenze inutilizzate dai file BUILD
Installa lo strumento 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
Installa lo strumento 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
Utilizza bant per generare comandi buildozer per rimuovere le dipendenze inutilizzate:
bant dwyu //xla/core/collectives:symmetric_memory
Se ti senti fortunato, puoi eseguirli direttamente:
. <(bant dwyu //xla/core/collectives:symmetric_memory)