การตั้งค่า LSP ด้วย clangd
ฉากหลัง
โปรแกรมแก้ไข เช่น Emacs, Vim หรือ VS Code รองรับฟีเจอร์ต่างๆ เช่น การไปยังส่วนต่างๆ ของโค้ด
การเติมโค้ดอัตโนมัติ ข้อความแสดงข้อผิดพลาดของคอมไพเลอร์ในบรรทัด และอื่นๆ ผ่าน
LSP ซึ่งเป็นโปรโตคอลเซิร์ฟเวอร์ภาษา เซิร์ฟเวอร์ภาษาทั่วไปที่รองรับ LSP คือ clangd ซึ่งอาศัยการมีอยู่ของ compile_commands.json ซึ่งเป็นไฟล์ JSON ที่มีบันทึกคำสั่งคอมไพล์สำหรับแต่ละไฟล์ในโปรเจ็กต์
ฉันจะสร้าง compile_commands.json สำหรับซอร์สโค้ด XLA ได้อย่างไร
ใช้สคริปต์
build_tools/lint/generate_compile_commands.py
การเรียกใช้ต่อไปนี้จากรูทของที่เก็บ XLA จะสร้างไฟล์ compile_commands.json ในตำแหน่ง bazel aquery "mnemonic(CppCompile,
//xla/...)" --output=jsonproto | python3
build_tools/lint/generate_compile_commands.py
Build Cleaner
XLA CI ภายใน Google จะทำการตรวจสอบเพิ่มเติมเพื่อยืนยันว่าเป้าหมายทั้งหมดแสดงรายการทรัพยากร Dependency ทั้งหมดอย่างถูกต้องในไฟล์ BUILD ซึ่งไม่ได้เปิดใช้โดยค่าเริ่มต้นใน OSS Bazel CI การเรียกใช้คำสั่งต่อไปนี้ก่อนส่ง PR ไปยังทีม XLA จะช่วยเร่งเวลาในการผสาน PR ได้อย่างมาก เนื่องจากคุณจะต้องขอให้ Googler แก้ไขให้คุณภายใน หรือต้องมีการตรวจสอบ PR อีก 2-3 รอบเพื่อแก้ไขตามความคิดเห็นของ Googler
การตรวจสอบการวางเลเยอร์
การสร้างด้วย --features=layering_check ช่วยให้มั่นใจว่าคุณจะไม่รวมส่วนหัวผ่านการอ้างอิงแบบทรานซิทีฟโดยไม่ได้ตั้งใจ
โดยไม่ต้องระบุไว้ในการอ้างอิงเป้าหมาย
นำการอ้างอิงที่ไม่ได้ใช้ออกจากไฟล์ BUILD
ติดตั้งเครื่องมือ 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
ติดตั้งเครื่องมือ 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
ใช้ bant เพื่อสร้างคำสั่ง buildozer เพื่อนำการอ้างอิงที่ไม่ได้ใช้ออก
bant dwyu //xla/core/collectives:symmetric_memory
หากคุณมั่นใจ คุณก็เรียกใช้คำสั่งเหล่านี้ได้โดยตรง
. <(bant dwyu //xla/core/collectives:symmetric_memory)