إذا كان حفظ ملف مُنشأ تلقائياً في VS Code على جهاز Mac يؤدي باستمرار إلى تغيير محتوياته، فحدد أولاً أداة التنسيق (formatter) التي تعمل. يطبق إعداد editor.formatOnSave في VS Code التنسيق عند حفظ الملف، لكن VS Code لا يوفر نمط مسار مدمج لاستثناء ملفات محددة من هذا الإعداد. بالنسبة لأداة تنسيق مثل Prettier، استخدم ملف التجاهل الخاص بها؛ وإلا، فقم بإيقاف تشغيل التنسيق عند الحفظ على نطاق يناسب الملفات التي تحتاج إلى حمايتها.
تحديد ما الذي يقوم بتغيير الملف
يمكن لـ VS Code التنسيق عند الحفظ من خلال editor.formatOnSave، كما يمكن لامتدادات اللغات (language extensions) توفير أدوات تنسيق. يُعد إجراء الشيفرة البرمجية عند الحفظ (save-time Code Action)، مثل تنظيم عمليات الاستيراد (organizing imports)، إعداداً منفصلاً ويمكنه أيضاً تعديل محتويات الملف. توضح وثائق التحرير في VS Code ميزة التنسيق عند الحفظ؛ بينما يغطي دليل إجراءات الشيفرة البرمجية عند الحفظ (Code Actions on Save) الإجراءات التي تتم أثناء الحفظ.
لتحديد السبب بدقة، افتح الملف المُنشأ تلقائياً، وتحقق من وضع اللغة الخاص به في شريط الحالة (status bar)، وابحث في الإعدادات (Settings) عن formatOnSave وcodeActionsOnSave. يمكن لفلتر @modified في الإعدادات المساعدة في إظهار القيم التي تم تكوينها. إذا تغير الملف على الرغم من إيقاف تشغيل التنسيق، فافحص الامتدادات المثبتة ونصوص المشروع البرمجية (project scripts): فقد تكون أداة التوليد (generator) أو إجراء حفظ آخر هو المسؤول. إن تعطيل التنسيق لن يمنع أداة مستقلة من إعادة كتابة الملف.
استثناء المسارات المُنشأة تلقائياً عند استخدام Prettier
إذا كانت أداة Prettier هي أداة التنسيق، فأضف المسار المُنشأ إلى ملف .prettierignore في جذر المشروع (project root). على سبيل المثال، لتخطي الملفات المُنشأة تلقائياً ضمن src/generated، استخدم هذا المدخل:
src/generated/
توثق Prettier ملف .prettierignore باعتباره آلية استبعاد الملفات الخاصة بها، وتذكر أن عمليات تكامل محررات النصوص يمكنها استخدامه. تستخدم أنماطه نفس بناء جملة (syntax) ملفات Git-ignore. هذا هو الخيار الأكثر دقة وتحديداً عندما تريد استمرار عمل التنسيق عند الحفظ للملفات الأخرى التي تديرها Prettier. تأكد من أن أداة التنسيق المحددة لهذا الملف هي بالفعل Prettier؛ فقد تستخدم أداة تنسيق أخرى قواعد مختلفة أو عناصر تحكم أخرى للتجاهل. Prettier: تجاهل الشيفرة البرمجية (Ignoring Code)
تعطيل التنسيق على نطاق مناسب في VS Code
على نظام Mac، اضغط على ⇧⌘P وشغّل Preferences: Open User Settings (JSON) لإجراء تغيير شامل (global)، أو Preferences: Open Workspace Settings (JSON) للتأثير على المشروع الحالي فقط. يُخزن ملف مساحة العمل (workspace) في مجلد .vscode الخاص بالمشروع. يوثق VS Code كلا نطاقي الإعدادات وأوامر نظام Mac الخاصة بهما في إعدادات المستخدم ومساحة العمل (User and workspace settings).
لإيقاف التنسيق عند الحفظ في مساحة العمل هذه فقط، أضف الإعداد الموضح أدناه إلى كائن JSON الموجود بها. احتفظ بالإعدادات الأخرى الموجودة بالفعل، وأضف فاصلة (comma) حيث يلزم:
{
"editor.formatOnSave": false
}
لإنشاء استثناء على مستوى لغة برمجية بالكامل، اجعل الإعداد مقتصراً على تلك اللغة بدلاً من ذلك. استبدل typescript بمعرف لغة VS Code الفعلي للملف، والذي يمكنك فحصه من شريط الحالة:
{
"[typescript]": {
"editor.formatOnSave": false
}
}
يؤدي هذا إلى تعطيل التنسيق عند الحفظ لكل ملف بتلك اللغة في النطاق المحدد، وليس فقط للمسارات المُنشأة تلقائياً. يمكن أيضاً تجاوز الإعدادات من خلال نطاقات أكثر تحديداً، فإذا استمر الملف في التغير، فابحث عن @modified وافحص إعدادات المستخدم ومساحة العمل بالإضافة إلى أي كتل مخصصة للغات معينة (language-specific blocks). يوثق مرجع إعدادات VS Code الإعدادات الخاصة باللغة وترتيب الأسبقية.
فحص إجراءات وقت الحفظ بشكل منفصل
إذا كان التنسيق معطلاً بالفعل ولكن الحفظ لا يزال يعيد ترتيب عمليات الاستيراد أو يطبق الإصلاحات، فابحث عن editor.codeActionsOnSave. يتحكم هذا الإعداد في إجراءات مثل تنظيم الاستيراد والإصلاح الشامل (fix-all). قم بإزالة أو تغيير الإجراء المسبب لإعادة الكتابة فقط؛ حيث إن تعطيل هذا الإعداد بالكامل قد يؤدي أيضاً إلى إزالة سلوكيات مفيدة وقت الحفظ. تشرح وثائق إجراءات الشيفرة البرمجية عند الحفظ في VS Code عناصر التحكم المدعومة.
لا تستخدم files.exclude كإجراء وقائي ضد التنسيق: إذ يوضح توثيق VS Code أنه إعداد مخصص لمدى الرؤية في مستكشف الملفات (Explorer)، وليس أداة تحكم فيما إذا كانت أداة التنسيق ستعدل ملفاً أم لا. إذا لم تكن أداة التنسيق تدعم ميزة التجاهل المستندة إلى المسار ولم يتأثر سوى عدد قليل من الملفات المُنشأة، فإن الخيار العملي في VS Code هو تعطيل التنسيق عند الحفظ للغتها أو لمساحة العمل الخاصة بها، ثم تنسيق الملفات العادية يدوياً باستخدام Format Document (⇧⌥F) عند الحاجة. يوثق VS Code هذا الأمر في التحرير الأساسي (Basic editing).
بالنسبة للملفات المُنشأة تلقائياً والتي يجب أن تظل ثابتة ومطابقة تماماً بايت ببايت، يفضل استخدام آلية التجاهل الموثقة الخاصة بأداة التنسيق نفسها عند توفرها. وإلا، فاستخدم أضيق نطاق إعدادات متاح في VS Code، ثم احفظ ملفاً نموذجياً من الملفات المُنشأة وافحص الفروقات (diff) لتأكيد السلوك المسؤول عن التغيير.
المصادر
التحرير الأساسي (Basic editing) — Visual Studio Code
إجراءات الشيفرة البرمجية عند الحفظ (Code Actions on Save) — Visual Studio Code
إعدادات المستخدم ومساحة العمل (User and workspace settings) — Visual Studio Code
تجاهل الشيفرة البرمجية (Ignoring Code) — Prettier