مولد EditorConfig
يخبر ملف .editorconfig في جذر المستودع كل بيئة تطوير حديثة بكيفية تنسيق هذا المشروع لملفاته، فيحسم جدال علامات التبويب مقابل المسافات ملفًا بملف. والجزء الصعب ليس الكتلة العامة، بل أقسام كل لغة على حدة: فلغة YAML لا تقبل المسافة البادئة بعلامات التبويب إطلاقًا، وmake يرفض سطر وصفة يبدأ بمسافة، وسكربت الصدفة المحفوظ بنهايات أسطر CRLF لا يعمل. اختر اللغات الموجودة في مستودعك، وسيكتب هذا المولّد القسم الذي تحتاجه كل واحدة منها، مع ملاحظة بجانبه تشرح سبب وجوده.
كيف تبني ملف .editorconfig
-
1
اختر اللغات الموجودة في مستودعك
JavaScript، وJSON، وHTML وCSS، وYAML، وPython، وPHP، وGo، وRust، وRuby، وJava، وMarkdown، وMakefile، وسكربتات الصدفة، وملفات الأوامر الدفعية في ويندوز. كل خيار تحدده يضيف قسمًا واحدًا.
-
2
اضبط القواعد التي يرثها كل ملف
نمط المسافة البادئة وحجمها، ونهاية السطر، ومجموعة الأحرف، والسطر الجديد الختامي، والمسافات الطرفية، وحد طول السطر. تذهب هذه كلها إلى كتلة `[*]` في الأعلى، ولا يتجاوزها أي قسم أدناه إلا فيما تحتاجه لغته فعلًا.
-
3
اقرأ سبب وجود كل قسم
يشرح الجدول المجاور للملف كل قسم كتبه المولّد، كي تحذف ما لا يريده فريقك قبل الإيداع.
-
4
انسخه إلى جذر المستودع
احفظه باسم `.editorconfig` بجوار ملف `.gitignore` عندك. تلتقطه المحررات مع أول ملف تفتحه بعد ذلك، بلا خطوة بناء ولا إعداد إضافات.
ما الذي يفعله ملف .editorconfig
ملف باسم .editorconfig في جذر المشروع يُعلن أعراف التنسيق فيه. والمحررات التي تدعم EditorConfig (كل بيئات التطوير المتكاملة الكبرى ومعظم محررات النص الحديثة) تطبّق هذه القواعد عند فتح أي ملف. ويصعد البحث في شجرة المجلدات انطلاقًا من الملف الذي تحرّره، ويتوقف عند أول ملف يحمل السطر root = true.
مثال على الناتج
بالإعدادات الافتراضية (مسافات، ومسافة بادئة بحجم 4، وLF، وutf-8) ومع القسمين المحدَّدين لك مسبقًا، يُخرج المولّد ما يلي:
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
[*.{md,markdown}]
trim_trailing_whitespace = false
[{Makefile,makefile,GNUmakefile,*.mk}]
indent_style = tab
حدِّد Python أو Go أو YAML ليظهر القسم المقابل أسفل الملف، حاملًا مسبقًا العرف الذي تفرضه أداة التنسيق في تلك البيئة.
التوجيهات الرئيسية
| التوجيه | القيم المقبولة | ملاحظات |
|---|---|---|
| root | true | اضبطه في جذر المشروع كي يتوقف البحث عنده |
| charset | latin1، utf-8، utf-8-bom، utf-16be، utf-16le | utf-8 هو الخيار المعتاد. والمواصفة لا تنصح بعلامة ترتيب البايتات، كما أن زوج utf-16 يسري على كل ملف، وهو ما لا تستطيع معظم أدوات البناء قراءته |
| end_of_line | lf، crlf، cr | استخدم lf للعمل عبر المنصات، وcrlf للمستودعات الخاصة بويندوز وحدها |
| indent_style | space، tab | |
| indent_size | عدد صحيح، أو tab | مع indent_style = tab لا تُهمَل القيمة: يرجع tab_width إليها، فتحدد عرض علامة التبويب على الشاشة |
| tab_width | عدد صحيح | نادرًا ما يلزم، لأن قيمته الافتراضية هي indent_size |
| insert_final_newline | true، false | يُبقي الملفات متوافقة مع POSIX ويجعل الفروق أهدأ |
| trim_trailing_whitespace | true، false | عطّله في Markdown، حيث تعني المسافات الطرفية فاصل سطر |
| max_line_length | عدد صحيح موجب، أو unset | ليس في المواصفة الأساسية، بل في ويكي الخصائص. وللإبقاء بلا حد، احذف السطر بدل كتابة 0 |
ثلاث قواعد تُعطّل البناء، لا مجرد أعراف أسلوب
معظم مدخلات ملف .editorconfig تفضيلات شخصية. أما هذه الثلاث فليست كذلك، وهي السبب الذي يجعل تخصيص قسم لكل لغة أمرًا يستحق العناء:
- لا يقبل YAML محرف التبويب في المسافة البادئة إطلاقًا. هذا خطأ في التحليل، لا تحذير من مدقّق. فإن كان مشروعك يستخدم علامات التبويب ولديك ملفات سير عمل في GitHub Actions أو ملفات Docker Compose أو بيانات Kubernetes، فعلى قسم YAML أن يعيد فرض المسافات.
- تحتاج
makeإلى علامة تبويب حقيقية في بداية كل سطر وصفة. أما المسافة فتُنتجmissing separator. Stop. ويتوقف البناء. ولهذا يسرد [{Makefile,makefile,GNUmakefile,*.mk}]عدة طرق لكتابة الاسم: إذ يطابق EditorConfig أسماء الملفات بحساسية لحالة الأحرف، والمستودعات تحويMakefileوmakefileمعًا. - سكربت الصدفة المحفوظ بنهايات أسطر CRLF لا يعمل. تقرأ النواة محرف الإرجاع على أنه جزء من مسار المفسّر، فتُبلغ بشيء مثل
/bin/bash^M: bad interpreter: No such file or directory. وملفات الأوامر الدفعية في ويندوز تعاني المشكلة المعاكسة: يبحثcmd.exeعنgotoوعنcall :labelبحسب موضع البايت، فملف .batمحفوظ بنهايات LF وحدها قد يقفز إلى السطر الخطأ أو يتوقف في منتصف الطريق دون أي رسالة خطأ.
اثنتان من هذه القواعد قد تتسبب فيهما الكتلة العامة بدل أن تعالجهما، ولهذا يراقبهما هذا المولّد. فإن اخترت علامات التبويب ولم تضف قسم YAML، أو اخترت CRLF ولم تضف قسم سكربتات الصدفة، فسيكسر الملف الذي يكتبه تلك الملفات وإن لم تُذكر فيه أبدًا. ويخبرك المولّد بذلك فوق الناتج بدل أن يدعك تكتشفه من فشل في مسار البناء. والأمر نفسه ينطبق على ترميزَي utf-16: فهما يسريان على كل ملف في المشروع، ولا تستطيع make ولا مفسّرات الصدفة ولا Python قراءة شيفرة محفوظة بهذا الترميز.
أعراف اللغات التي يكتبها هذا المولّد
| اللغة أو الملف | القسم | ما الذي يضبطه ولماذا |
|---|---|---|
| JavaScript وTypeScript | *.{js,jsx,mjs,cjs,ts,tsx} |
مسافتان، وهو الإعداد الافتراضي في Prettier |
| JSON | *.{json,jsonc} |
مسافتان، وهو العرض الذي تكتب به npm ملف package.json |
| HTML وCSS والقوالب | *.{html,htm,css,scss,sass,less,vue,svelte} |
مسافتان، وصيغة Sass المعتمدة على المسافة البادئة تحتاجهما كي يمكن تحليلها |
| YAML | *.{yml,yaml} |
مسافتان، ومسافات دائمًا حتى لو استخدم المشروع علامات التبويب |
| Python | *.{py,pyi} |
4 مسافات، وفق PEP 8 وBlack |
| PHP | *.php |
4 مسافات، وفق PSR-12. أما WordPress فيستخدم علامات التبويب، وDrupal مسافتين |
| Go | {*.go,go.mod} |
علامات تبويب، لأن gofmt يستخدمها في المسافة البادئة |
| Rust | *.rs |
4 مسافات، وهو الإعداد الافتراضي في rustfmt |
| Ruby | {*.rb,*.rake,Gemfile,Rakefile} |
مسافتان، وهو الإعداد الافتراضي في RuboCop |
| Java | *.java |
4 مسافات، وفق أعراف Oracle. أما أسلوب Google لكتابة Java فيستخدم مسافتين |
| Markdown | *.{md,markdown} |
يُبقي المسافات الطرفية، فهي طريقة Markdown في كتابة فاصل السطر |
| Makefile | {Makefile,makefile,GNUmakefile,*.mk} |
علامات تبويب، وهي ما تتطلبه make |
| سكربتات الصدفة | *.{sh,bash,zsh} |
LF، مهما استخدم بقية المشروع |
| أوامر ويندوز الدفعية | *.{bat,cmd} |
CRLF، لأن cmd.exe يبحث عن التسميات بحسب موضع البايت |
لاحظ ما ليس في هذا الجدول: أطوال الأسطر. فمواصفة PEP 8 تقول 79، وBlack يقول 88، وPSR-12 يقول 120 كحد مرن، وrustfmt يقول 100. وكتابة أي من هذه الأرقام في قسم لغة بعينها كانت ستتجاوز بصمت الحد الذي اخترته للمشروع كله، ولهذا يُبقي المولّد max_line_length في كتلة [*] وحدها، ويترك هذه الأرقام هنا حيث يمكنك تطبيقها عن قصد.
هل يدعمه محرّرك؟
الدعم الأصلي متوفر في VS Code، وعائلة JetBrains IntelliJ، وVisual Studio، وSublime Text، وXcode، وNotepad++. أما Vim وEmacs وNeovim وقلة غيرها فتحتاج إلى إضافة صغيرة. والملف بصيغة INI بسيطة، فتستطيع أدوات التدقيق والتنسيق قراءته أيضًا، وبهذا تبقى Prettier وبعض خوادم اللغة متوافقة معه.
الأسئلة الشائعة
في جذر المشروع، مع السطر root = true في أعلاه. ويمكنك إضافة ملفات .editorconfig أخرى في مجلدات فرعية لتجاوز مسارات بعينها، إذ يصعد البحث في الشجرة انطلاقًا من الملف الذي تحرّره ويتوقف عند أول root = true يجده.
اضبط الحقل على 0 فيحذف المولّد max_line_length من الملف. القيم الموثّقة لهذه الخاصية هي الأعداد الموجبة، إضافة إلى الكلمة unset المتاحة في المواصفة كلها، وهي موجودة لإلغاء قيمة موروثة من ملف أعلى. وهذا هو الملف الأعلى نفسه، فلا شيء هنا لإلغائه، وغياب السطر يقول الشيء ذاته. أما ما ينبغي ألا تكتبه فهو max_line_length = 0، وهو ما كانت هذه الأداة تفعله: تطلب المواصفة من الإضافات تجاهل القيم غير المدعومة، فالحد صفر ليس حدًا بصفر، بل سطر لا يفعل شيئًا في صمت.
لا. يغطي EditorConfig المسافات ونهايات الأسطر في كل المحررات، بما فيها تلك التي يستخدمها زملاؤك ولا تستخدمها أنت. أما Prettier وأدوات التدقيق الخاصة بكل لغة فتتولى قواعد الأسلوب الأعمق مثل علامات الاقتباس والفواصل المنقوطة والفواصل اللاحقة. وكل منهما يكمّل الآخر، بل إن Prettier يقرأ ملف .editorconfig عندك ليأخذ منه الأساسيات.
لأن YAML لا يسمح بمحرف التبويب في المسافة البادئة إطلاقًا. فملف سير عمل أو ملف compose مكتوب بمسافة بادئة من علامات التبويب يفشل تحليله قبل أن تراه أي أداة. يُبقي المولّد علامات التبويب في كل مكان آخر، ولا يتجاوزها إلا في قسم YAML، وينبّهك إلى ذلك فوق الملف حين يفعل.
اضبط end_of_line = crlf إن كانت أدوات ويندوز في المستودع تتطلب ذلك فعلًا. الخيار الأفضل عادةً هو lf هنا، مع ملف .gitattributes يحتوي على * text=auto، فيوحّد git نهايات الأسطر عند الإيداع، بينما تبقى نسخة العمل مناسبة لكل نظام تشغيل.
تُستخدم خياراتك لبناء الملف، وتنتقل ضمن رابط الصفحة بين الخطوات كي تتمكن من مشاركة إعداد معين أو حفظه في المفضلة. ولا يُخزَّن شيء على خوادمنا بعد توليد الصفحة.
أدوات ذات صلة
مرجع جدول ASCII
جدول ASCII كامل من 0 إلى 127 مع التمثيل العشري والست عشري والثماني والثنائي والمرجع الرقمي في HTML لكل محرف، بما في ذلك أكواد التحكم مثل NUL وLF وDEL.
مرجع أحرف HTML
قائمة قابلة للبحث بكيانات HTML، مع رموزها المسمّاة والرقمية، بالإضافة إلى خيار النسخ بنقرة واحدة للأحرف والرموز الخاصة.
أداة إزالة التشفير في لغة جافا سكريبت (JavaScript Deobfuscator)
إزالة التشفير من كود جافا سكريبت مُصغَّر أو مُعبَّأ باستخدام إعادة تسمية المتغيرات، وفك ترميز السلاسل النصية ومصفوفات البيانات، بالإضافة إلى عكس تسطيح تدفق التحكم وتحسين هيكله.
مولد تراخيص
قم بإنشاء النص الكامل لترخيصات المصدر المفتوح مع إدخال اسمك والسنة المقابلة، ويشمل ذلك تراخيص MIT وApache 2.0 وGPLv3 وBSD-3 وMPL-2.0 وCC.
مولّد إعدادات Nginx
أنشئ كتل server في Nginx مع TLS وHTTP/2 وgzip والتخزين المؤقت في المتصفح وقواعد الوكيل العكسي، انطلاقًا من نموذج بسيط.
مولد ملف tsconfig.json
أنشئ ملف tsconfig.json نظيفا باختيار target وmodule وmoduleResolution وJSX وأعلام الصرامة الشائعة، ثم انسخ الإعداد المولّد إلى مشروعك.
الأداة متاحة بلغات أخرى
- EditorConfig ジェネレーター [JA]
- EditorConfig-generator [NL]
- EditorConfig 생성기 [KO]
- Generator EditorConfig [ID]
- Generator EditorConfig [PL]
- Générateur EditorConfig [FR]
- Gerador de EditorConfig [PT]
- EditorConfig-Generator [DE]
- Generador de EditorConfig [ES]
- EditorConfig-generator [SV]
- Trình tạo EditorConfig [VI]
- เครื่องมือสร้าง EditorConfig [TH]
- EditorConfig Generator [EN]
- Generatore EditorConfig [IT]
- Генератор EditorConfig [RU]
- EditorConfig Oluşturucu [TR]
- EditorConfig 生成器 [ZH]