ClangFormat وتكامل المفكرة ++

ClangFormat هي واحدة من أفضل الأدوات لتنسيق رموز المصدر تلقائيًا في C و C ++ و Java و JavaScript و Objective-C و C #. هناك مكونات إضافية لبيئات التطوير الشائعة (IDEs) ، ولكن غالبًا ما تحتاج إلى تنسيق ملف أو جزء من ملف مصدر بسرعة دون تشغيل IDE مرهق ، وتجربة إعدادات التنسيق وإصدارات مختلفة من ClangFormat مع إمكانية التراجع عن التغييرات بسرعة. استخدام إصدار وحدة التحكم من ClangFormat لهذا الغرض غير مريح. أحد الحلول الممكنة هو استدعاء ClangFormat من محرر نصوص. يصف الموقع الرسمي طرق التكامل مع Vim و Emacs وبعضها الآخر ، ولكن لا توجد معلومات حول التكامل مع Notepad ++. التالي هو تعليمة بسيطة لـ Notepad ++ (لنظام Windows).

المتطلبات الأولية


  • تنسيق ملف مفتوح في Notepad ++ مع ClangFormat ؛
  • تنسيق الجزء المحدد في الملف ؛
  • تجاهل التغييرات ؛
  • تبديل نمط (مجموعة من القواعد) التنسيق ؛
  • التبديل إلى إصدار آخر من ClangFormat
  • استخدم الأدوات القياسية كلما كان ذلك ممكنًا ، دون إعادة إنشاء ClangFormat ودون كتابة مكون إضافي لـ Notepad ++.

التثبيت والإعداد


1. إذا لم يكن Notepad ++ مثبتًا بالفعل ، فقم بتنزيله وتثبيته


https://notepad-plus-plus.org

2. في Notepad ++ ، قم بتثبيت المكون الإضافي NppExec


يسمح لك NppExec بالاتصال بتطبيقات الطرف الثالث من Notepad ++ والتفاعل مع مكونات مكتبة Scintilla ، بناءً على كتابة Notepad ++.

Plugins –> Plugin Admin... –> NppExec –> Install
سيتم إعادة تشغيل برنامج Notepad ++ ، وبعد ذلك يظهر دليل <Notepad++>/plugins/NppExec/ و Plugins –> NppExec عنصر قائمة Plugins –> NppExec

3. قم بتنزيل ClangFormat القابل للتنفيذ


للقيام بذلك ، على الصفحة https://llvm.org/builds/ ، نجد ملف التثبيت لنظام Windows وتنزيله ، على سبيل المثال LLVM-XXX-rYYYYYY-win64.exe . لا يمكنك تثبيت الحزمة بأكملها ، فقط قم باستخراج ملف clang-format.exe بواسطة clang-format.exe . يمكنك استخدام 7-zip: حذف ملحق .exe من .exe ، وفتح الملف باستخدام 7-zip واستخراج clang-format.exe من bin/ subdirectory. clang-format.exe في <Notepad++>/plugins/NppExec/clang-format/ directory.

4. إضافة ملفات التكوين ل ClangFormat


يجب تسمية ملفات التكوين .clang-format أو _clang-format . أنها تحتوي على مجموعة من قواعد التنسيق (الأنماط) ، يتم وصف التنسيق الخاص بها في دليل خيارات نمط ClangFormat .

على سبيل المثال ، نستخدم ملفات من مشروعات Linux Kernel و Qt .

يتم .clang-format ملفات .clang-format تنزيلها من GitHub في الدلائل المناسبة:
<Notepad++>/plugins/NppExec/clang-format/LINUX_KERNEL/
<Notepad++>/plugins/NppExec/clang-format/QT/


5. إنشاء برنامج نصي ل NppExec


افتح النافذة لتحرير وتشغيل البرامج النصية NppExec Plugins –> NppExec –> Execute... أو اضغط F6 . انسخ نص البرنامج النصي والصقه أدناه في النافذة واحفظ البرنامج النصي المسمى clang-format مع زر Save...

البرنامج النصي NppExec
 // Hide console NPP_CONSOLE 0 //------------------------------------------------------------------------------ // Uncomment a line to select a style //set style = LINUX_KERNEL set style = QT //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ set clangformatexe = $(CWD)\plugins\NppExec\clang-format\clang-format.exe set clangformatcfgdir = $(CWD)\plugins\NppExec\clang-format set tmpdir = $(SYS.TEMP) set clangformatcfgfile = $(clangformatcfgdir)\$(style)\.clang-format set srcfiletmp = $(tmpdir)\~src.tmp //------------------------------------------------------------------------------ cmd.exe /c if exist "$(clangformatexe)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatexe)" not found exit endif cmd.exe /c if exist "$(clangformatcfgfile)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatcfgfile)" not found exit endif // Copy $(clangformatcfgfile) to $(tmpdir)\.clang-format if their temestamps are different cmd.exe /v /c " for %i in ("$(clangformatcfgfile)") do set date1="%~ti" && for %i in ("$(tmpdir)\.clang-format") do set date2="%~ti" && if not "!date1!"=="!date2!" ( echo !date1! != !date2! && echo COPYING $(clangformatcfgfile) to $(tmpdir)\ && copy "$(clangformatcfgfile)" "$(tmpdir)\" /Y )" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR copying "$(clangformatcfgfile)" to "$(tmpdir)" exit endif // Get selected text length sci_sendmsg SCI_GETSELTEXT // If nothing is selected - select the current line if $(MSG_RESULT) == 1 then sci_sendmsg SCI_VCHOMEWRAP sci_sendmsg SCI_LINEENDWRAPEXTEND endif // Save selected text to $(srcfiletmp) sel_saveto "$(srcfiletmp)" :a cmd.exe /c if exist "$(srcfiletmp)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(srcfiletmp)" not found exit endif // Run ClangFormat $(clangformatexe) -i -style=file "$(srcfiletmp)" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR running "$(clangformatexe)" exit endif // Replace selected text with $(srcfiletmp) sel_loadfrom "$(srcfiletmp)" // Delete $(srcfiletmp) file cmd.exe /c del "$(srcfiletmp)" 


بعد بدء البرنامج النصي ، استنادًا إلى نمط التنسيق المحدد في متغير style ، يحدد ملف .clang-format المطلوب ، .clang-format تاريخ تغييره ، وإذا لزم الأمر ، .clang-format إلى دليل مؤقت. هناك ، يتم نسخ جزء التعليمات البرمجية المصدر المحدد إلى الملف المؤقت ، وبعد ذلك clang-format.exe . يتم نسخ الجزء المنسق مرة أخرى إلى إطار Notepad ++. ثم يتم حذف الملف المؤقت.

في ClangFormat لا توجد طريقة لتحديد المسار إلى ملف التكوين .clang-format . سيبحث ClangFormat عن ذلك في دليل الملف المنسق ، وإذا لم يعثر عليه ، فسيبحث في الأدلة الأصل. بعد .clang-format البرنامج النصي .clang-format ملف .clang-format في الدليل المؤقت حتى لا يتم نسخه في كل مرة يتم فيها بدء التنسيق.

في جميع مراحل البرنامج النصي ، يتم فحص الأخطاء ، وعند حدوثها ، يتم فتح نافذة وحدة التحكم NppExec ، حيث يتم عرض رسالة.

6. في Notepad ++ ، قم بإضافة عنصر قائمة جديد لتشغيل البرنامج النصي


افتح Plugins –> NppExec –> Advanced Options... ، في القائمة المنسدلة Associated script ، حدد اسم البرنامج النصي clang-format وانقر على زر " Add/Modify .

نقوم بإعادة تشغيل برنامج Notepad ++ ، وبعد ذلك Plugins –> NppExec –> clang-format عنصر القائمة Plugins –> NppExec –> clang-format .

صورة

7. في Notepad ++ ، قم بتكوين اختصار لوحة المفاتيح لتشغيل البرنامج النصي


سوف نستخدم المجموعة Ctrl + I عن طريق القياس مع QtCreator. افتح Settings –> Shortcut Mapper .

بشكل افتراضي ، تكون المجموعة Ctrl + I مشغولة ، لذلك تحتاج إلى تحريرها باستخدام الزر " Clear في علامة تبويب " Main Menu (السطر 38 Split Lines في الإصدار الحالي من Notepad ++). بعد ذلك ، في علامة تبويب Plugin commands ، قم بتعيين المجموعة Ctrl + I إلى البرنامج النصي clang-format .

انتهى ، يمكننا استخدامه!

تعليمات للاستخدام


افتح الملف المصدر في Notepad ++ ، وحدد الجزء المطلوب أو كل النص واضغط على Ctrl + I إذا لم يتم تحديد أي شيء ، فسيتم تنسيق السطر الحالي.

صورة

للتراجع عن التغييرات ، استخدم أدوات المحرر القياسية ( Ctrl + Z ).
لتغيير قواعد التنسيق ، قم بتحرير ملفات تكوين .clang-format في دليل <Notepad++>/plugins/NppExec/clang-format/ directory
إذا كنت بحاجة إلى استخدام إصدار آخر من ClangFormat ، فقم بتغيير المسار إلى الملف القابل للتنفيذ في البرنامج النصي
set clangformat = "\path\to\clang-format.exe"
لتحديد نمط تنسيق مختلف ، اضغط F6 وفي نص البرنامج النصي clang-format حدد النمط المرغوب بإلغاء أحد الخطوط
set style = STYLE_NAME .

جميع الملفات الضرورية موجودة في الأرشيف .

تنسيق جيد!

Source: https://habr.com/ru/post/ar457972/


All Articles