متوفر أيضًا بلغات أخرى: English · Español · Português · Français
مولّد ملف .editorconfig
ولّد ملف .editorconfig وجرّبه: ألصق مسارًا وشاهد أي قسم يقدّم كل إعداد، وأيها جرى تجاوزه.
ما ملف .editorconfig؟
ملف .editorconfig يطلب من كل محرر في المشروع أن يتفق على الأمور المملة: جدولات أم مسافات، وكم عددها، وأي نهاية سطر، وهل تُقصّ المسافات الزائدة. يقيم في مستودعك، وتقرؤه أكثر المحررات بلا إضافة، ويحسم خلافات كانت ستُعاد في كل مراجعة شفرة.
والصيغة صغيرة عن قصد. فعنوان القسم نمط بين قوسين معقوفين، والأسطر تحته إسنادات خصائص، والملف الذي في جذر مشروعك يعلّم نفسه بـ root = true ليتوقف البحث عنده. هذا كل شيء تقريبًا، ولذلك يكتب الناس واحدًا في دقيقة ثم يقضون ساعة يتساءلون لماذا لا يلتقط ملف بعينه الإعدادات التي توقعوها.
وتؤدي هذه الأداة النصفين. تحرّر الملف في الأعلى، وتعطيها في الأسفل مسارًا فتخبرك بالضبط أي قسم يقدّم كل خاصية، لأن هذا هو السؤال الذي لا يجيب عنه ملف .editorconfig بمجرد قراءته.
كيفية الاستخدام
- ابدأ من الملف المعروض. هو منطلق معقول يحمل الخصائص التي تريدها أكثر المشاريع. حرّره مباشرة: أضف أقسامًا، وغيّر قيمًا، واحذف ما لا تحتاجه.
- اكتب مسارًا لتجربته. نسبةً إلى موضع ملف .editorconfig، بشرطات مائلة أمامية. جرّب أحد ملفاتك العصية: ذاك الذي تشك في أنه لا يتلقى ما ضبطته.
- اقرأ أي قسم فاز. تظهر كل خاصية مطبَّقة ومعها النمط الذي قدّمها، ويظهر كل قسم مطابِق ومعه كم من خصائصه نجا. وما يخرج عن المواصفة يُنبَّه عليه أسفل ذلك.
يفوز الأخير، والتحديد لا يساوي شيئًا
هذه هي القاعدة التي تكلّف كثيرين عصر يوم كامل. فحين يطابق قسمان ملفًا واحدًا، يكون القسم المكتوب أسفلَ هو من يقدّم القيمة. ومدى ما يبدو عليه النمط من تحديد لا يؤثر البتة: لا تنقيط، ولا مطابقة أكثر تحديدًا، ولا شيء من الآلية التي عوّدك عليها CSS أو جداول التوجيه.
وعليه فإن قسمًا عامًا في آخر الملف يتجاوز صامتًا الأقسامَ المتقنة الخاصة بكل لغة فوقه. فإن أضفت قاعدة ترتيب عامة إلى نهاية ملف .editorconfig طويل، فقد غيّرت للتو سلوك كل ما قبلها في أي خاصية تضبطها. والفاحص في هذه الصفحة يعرض ذلك بعينه: فكل قسم مطابِق يذكر كم من خصائصه بلغ الإجابة النهائية فعلًا.
أما بين الملفات فالاتجاه ينعكس، ويستحق أن تحفظه على حدة. فالمحرر يبدأ من الملف الذي تحرّره ويصعد في شجرة المجلدات، يقرأ الأقرب أخيرًا كي يفوز، ويتوقف حالما يبلغ ملفًا يعلن root = true. وإن نسيت ذلك السطر ظلّ ملف .editorconfig في مجلد أعلى — أو في مجلدك الشخصي — يُطبَّق على مشروعك.
صيغة الأنماط ليست صيغة gitignore
تشبه الأنماط أنماط gitignore وليست هي، وهذا ثاني مصدر موثوق للمفاجأة. فإلى جانب النجمة وعلامة الاستفهام المعتادتين، وهما تتوقفان عند فاصل المجلدات بينما النجمة المزدوجة تتجاوزه، يملك EditorConfig تناوبًا بالأقواس المعقوفة وشيئًا لم يملكه gitignore قط: مدى أعداد صحيحة. فالنمط file{1..3}.txt يطابق file2.txt ولا يطابق file4.txt، ويجوز أن يكون أي من الحدّين سالبًا.
ولهذا المدى فخّ يفشل صامتًا. إذ يجب أن يكون العدد الأول أصغر من الثاني، فـ {3..1} ليس مدى ويطابق تلك المحارف الخمسة حرفيًا. ولا شيء ينبّهك. والفخ نفسه في قوس معقوف بعنصر واحد: فـ {s1} يطابق ملفًا اسمه فعلًا {s1} لا ملفًا اسمه s1، وتقول المواصفة ذلك في جملة اعتراضية يسهل تخطّيها في القراءة.
والأقواس المعقوفة أشدّ مما تبدو، وهذه الحالة أوقعت التنفيذ المرجعي أيضًا. تقول المواصفة إن كل محرف داخل القوسين حرفي، فـ [a-c] مجموعة من ثلاثة محارف هي a والشرطة وc، ولا تطابق b. وتكاد كل لغات الأنماط الأخرى في العالم تقرأ a-c مدىً، ولهذا بالضبط يستحق أن تعرف أنها هنا ليست كذلك.
وأخيرًا، وجود شرطة مائلة في النمط هو ما يقرر مداه. فما فيه شرطة يُقاس من المجلد الذي يضم ملف .editorconfig، وما ليس فيه قد يطابق على أي عمق تحته. ولهذا يغطي [*.py] شجرتك كلها بينما يغطي [src/*.py] مجلدًا واحدًا بالضبط.
حدود معلنة
تنفّذ هذه الصفحة المواصفة، والمحررات لا تنفّذها على نحو موحّد. والخصائص السبع هنا هي ما تعرّفه المواصفة وما يُعوَّل على دعمه إلى حد معقول، لكن للمحرر أن يتجاهل أيًا منها، وعدة محررات شائعة تحتاج إضافة قبل أن تقرأ الملف أصلًا. فإن لم يُحدث إعداد أثرًا، فتأكد أن محررك يدعم تلك الخاصية قبل أن تفترض أن الملف خطأ.
ويعمل الفاحص كذلك على الملف الذي أمامه. فقد تحوي المشاريع الحقيقية عدة ملفات .editorconfig على أعماق مختلفة، والإجابة عن مسار تتوقف عليها جميعًا وعلى موضع توقف البحث. وما يُنمذَج هنا ملف واحد والقواعد داخله، وهناك يسكن الجزء المربك في الغالب الأعم.
وثمة أمر ظهر أثناء البناء يستحق النقل: يختلف التنفيذ المرجعي مع هذه الأداة في تعابير الأقواس المعقوفة التي تحوي محارف أنماط، والمواصفة تقف مع الأداة. بل إن المثال المحلول في المواصفة نفسها نمط يخطئ فيه التنفيذ المرجعي. وهو ركن لا يكتبه أحد قصدًا، لكنه تذكير بأن الحالات الحدّية لصيغة إعداد يقررها ما يصادف أن يحمله محررك.
لماذا هي مجانية؟
كل شيء يعمل داخل متصفحك. ومطابقة مسار بنمط لا تكلّف شيئًا على جهازك أنت، فلا خادم يُدفع ثمنه ولا سبب يدعو لطلب حساب منك.
لا يُرفع شيء مما تكتبه ولا يُخزَّن ولا يُسجَّل. فبنية المجلدات وأسماء الملفات تقول الكثير عن شفرة خاصة، والطريقة الموثوقة لإبقاء ذلك خاصًا ألا تُرسله إلى أي مكان.