إعداد 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)