Menyiapkan LSP dengan clangd
Latar belakang
Editor seperti Emacs, Vim, atau VS Code mendukung fitur seperti navigasi kode,
penyelesaian kode, pesan error compiler inline, dan lainnya, melalui
LSP, Language
Server Protocol. Server bahasa umum dengan dukungan LSP adalah
clangd, yang mengandalkan keberadaan
compile_commands.json, file JSON dengan catatan perintah kompilasi untuk
setiap file dalam project.
Bagaimana cara membuat compile_commands.json untuk kode sumber XLA?
Gunakan skrip
build_tools/lint/generate_compile_commands.py. Pemanggilan berikut dari root repo XLA akan menghasilkan file
compile_commands.json di tempat: bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Pembersih Build
CI XLA di dalam Google menjalankan pemeriksaan tambahan untuk memverifikasi bahwa semua target mencantumkan semua dependensi dengan benar dalam file BUILD, yang tidak diaktifkan secara default di CI Bazel OSS. Menjalankan perintah berikut sebelum mengirim PR ke tim XLA akan mempercepat waktu yang dibutuhkan untuk menggabungkan PR secara signifikan karena jika tidak, Anda akan memerlukan beberapa Googler untuk membuat perbaikan ini secara internal, atau beberapa putaran lagi peninjauan PR untuk memperbaikinya berdasarkan masukan dari Googler.
Pemeriksaan Pelapisan
Membangun dengan --features=layering_check memastikan Anda tidak secara tidak sengaja menyertakan header melalui dependensi transitif tanpa mencantumkannya dalam dependensi target
Menghapus dependensi yang tidak digunakan dari file BUILD
Instal alat 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
Instal alat 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
Gunakan bant untuk membuat perintah buildozer guna menghapus dependensi yang tidak digunakan:
bant dwyu //xla/core/collectives:symmetric_memory
Jika beruntung, Anda dapat langsung mengeksekusinya:
. <(bant dwyu //xla/core/collectives:symmetric_memory)