راه‌اندازی محیط توسعه‌دهنده

راه‌اندازی 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

تمیزکننده ساخت

XLA CI درون گوگل بررسی‌های بیشتری انجام می‌دهد تا تأیید کند که همه اهداف، تمام وابستگی‌های موجود در فایل‌های BUILD را که به طور پیش‌فرض در OSS Bazel CI فعال نیستند، به درستی فهرست می‌کنند. اجرای دستورات زیر قبل از ارسال PR به تیم XLA، زمان لازم برای ادغام PR را به میزان قابل توجهی افزایش می‌دهد، زیرا در غیر این صورت به یک متخصص گوگل نیاز خواهید داشت تا این اصلاحات را به صورت داخلی برای شما انجام دهد، یا چند دور دیگر بررسی PR برای رفع آنها بر اساس بازخورد گوگل.

بررسی لایه بندی

ساخت با --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 جهت حذف deps های استفاده نشده استفاده کنید:

bant dwyu //xla/core/collectives:symmetric_memory

اگر خوش شانس باشید، می‌توانید آنها را مستقیماً اجرا کنید:

. <(bant dwyu //xla/core/collectives:symmetric_memory)