הגדרה של 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 מופעלות בדיקות נוספות כדי לוודא שכל היעדים מפרטים בצורה נכונה את כל התלות בקובצי ה-BUILD, שלא מופעלים כברירת מחדל ב-OSS Bazel CI. הפעלת הפקודות הבאות לפני שליחת בקשת משיכה לצוות XLA תזרז מאוד את הזמן שיידרש למיזוג בקשת המשיכה, כי אחרת תצטרכו שמישהו ב-Google יבצע את התיקונים האלה באופן פנימי, או שתצטרכו לעבור עוד כמה סבבים של בדיקת בקשת המשיכה כדי לתקן אותם על סמך המשוב של עובדי Google.
בדיקת שכבות
השימוש ב---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)