لقد قمت بتحسين شوكة JEDI Code Formatter CLI الخاصة بي من Bee Jay، والتي هي في حد ذاتها شوكة لـ Lazarus JCF، والتي قمت بتحسينها قليلاً من خلال مسافة بادئة أفضل ودعم مطلوب بشدة لإعلانات متغيرات دلفي الحديثة. لقد كان من الصعب حقًا التجول في الكود القديم والمعقد وغير الموثق بالكامل تقريبًا. ورغم ذلك تمكنت من تنفيذ ما أردت. من الصعب توسيعه أو تحسينه بشكل أكبر نظرًا لمدى صعوبة كود مصدر الإدخال ومدى صعوبة استهداف حالات الحافة الفردية في AST دون كسر شيء آخر في مكان ما. سيكون من الأفضل في المستقبل التبديل إلى منسق لا يتطلب تحليلًا عميقًا للمصدر.
(يتوفر أيضًا ملحق VSCode المحدث الذي يعمل مع هذا الإصدار، طلب سحب.)
تشمل التغييرات ما يلي:
دعم إعلانات دلفي المتغيرة المضمنة:
var I: Integer := 10 ;
مع استنتاج النوع:
var I := 42 ;
داخل for
:
for var I := Low (myArray) to High (myArray) do
لم تعد الملفات المصدر ذات المتغيرات المضمنة تتسبب في فشل المنسق.
خيار جديد IndentCaseLabels
للتحكم في المسافة البادئة لبيانات تسمية case
بشكل مستقل عن كتلة case
بأكملها. على سبيل المثال، مع تعيين IndentCaseLabels
على True
(افتراضي):
case i of
1 .. 9 :
for i := 1 to i do write(i, ' , ' );
10 : begin
writeln;
writeln;
end ;
else
myProcedure;
end ;
مع تعيين IndentCaseLabels
على False
:
case i of
1 .. 9 :
for i := 1 to i do write(i, ' , ' );
10 : begin
writeln;
writeln;
end ;
else
myProcedure;
end ;
خيار جديد IndentMethodParams
، لذلك من الممكن كتابة معلمات الطريقة مثل هذا (تم تعيين IndentMethodParams
على False
):
function myFunction (aParam: string
; aParam2: real): boolean;
وتجنب وضع مسافة بادئة للسطر الثاني. بخلاف ذلك (اضبط على True
):
function myFunction (aParam: string
; aParam2: real): boolean;
خيار جديد IndentInterfaceGuid
لمنع وضع مسافة بادئة للمعرف الفريد العمومي (GUID) للواجهة. تعيين على True
:
IFace = interface
[ ' {5E3C2BCA-56C8-46DE-959F-338AF5F69C1A} ' ]
procedure proc ;
end ;
تعيين على False
:
IFace = interface
[ ' {5E3C2BCA-56C8-46DE-959F-338AF5F69C1A} ' ]
procedure proc ;
end ;
يقوم Formatter الآن بمعالجة نهايات الأسطر داخل التعليقات بشكل صحيح ويتجنب أيضًا تنسيق عبارات التحكم مع التعليقات الموجودة بينها.
تمت معالجة كود مصدر المنسق من خلال المنسق نفسه للتحقق من صحة الوظيفة الصحيحة "في البرية".
ما لم أكن قد نسيت شيئًا ما، فسيتم "وضع علامة" على جميع تغييراتي باستخدام // fix:
التعليقات.
الثنائيات متوفرة. إصدار Windows 64 بت هو من FPC. تم إنشاء إصدار Windows 32 بت باستخدام دلفي. يجب أن يتم إنشاء أنظمة التشغيل الأخرى مع تغييرات طفيفة أو معدومة.
كيفية الاختبار:
pascal-format -config=pascal-format.new.cfg -out test.fmt.pas test.pas
المهام: مع إزالة واجهة المستخدم الرسومية الآن، أصبح تصحيح أخطاء AST التي تم تحليلها أمرًا مستحيلًا، إلا إذا تم ذلك عن طريق التجربة والخطأ. يحتاج عرض AST إلى إعادة كتابته ليخرج في شكل نصي، أو الأفضل من ذلك، إعادة صياغته ببساطة في LCL (ولكن بدون دعم دلفي). يجب أن يكون القيام بذلك أمرًا بسيطًا إلى حد ما نظرًا لأنه في الأساس مجرد عرض شجرة على نموذج فارغ.
إذن هذا هو الحال إذا أراد شخص آخر إضاعة وقته والاستمرار في محاولة جعل هذا الشيء أكثر ذكاءً.
يتبع الوصف الأصلي.
أنا (Bee Jay) أخذت Jedi Code Formatter (JCF) من مستودع Lazarus IDE وجعلته إصدار CLI (واجهة سطر الأوامر) عن طريق إزالة جميع أجزاء واجهة المستخدم الرسومية (GUI) من إصدار واجهة المستخدم الرسومية الأصلي. يمكن استخدام إصدار CLI كمنسق كود Pascal في Visual Studio Code، أو كمحرك خلفي لمُجمِّل كود Pascal عبر الإنترنت.
الأصل: نسخة (معدلة أحيانًا) من شجرة r823 jcf2 svn: https://jedicodeformat.svn.sourceforge.net/svnroot/jedicodeformat/trunk/CodeFormat/Jcf2
المؤلف الأصلي: أنتوني ستيل.
الترخيص الأصلي: MPL 1.1.
jcf-pascal-format
في المجلد الخاص بك.pascal_format.lpi
داخل مجلد jcf-pascal-format/App
.pascal-format
القابل للتنفيذ من المجلد jcf-pascal-format
مع ملف التكوين pascal-format.cfg
../pascal-format -?
يأمر. يجب أن يظهر دليل الاستخدام. jcf-pascal-format
في المجلد الخاص بك.pascal_format.lpi
داخل مجلد jcf-pascal-format/App
.test.pas
من المجلد jcf-pascal-format
.JCF
باستخدام المهام → تشغيل المهمة... → تنسيق باسكال: قائمة برنامج اختبار CLI وسترى النتيجة في ملف test.pas
. pascal-format
و pascal-format.cfg
إلى مجلد مساحة عمل Pascal الخاص بك.tasks.json
إذا كان لديك واحدة بالفعل.tasks.json
الخاص بك. {
"label" : " JCF: Beautify Code " ,
"type" : " shell " ,
"command" : " ./pascal-format " ,
"args" : [
" ${file} " ,
" -clarify " ,
" -inplace " ,
" -config=pascal-format.xml "
],
"presentation" : {
"reveal" : " never "
},
"problemMatcher" : []
},
-clarify
arg إلى -obfuscate
.tasks.json
الخاصة بك.json . الآن يجب أن يكون لديك مهام جديدة بتنسيق باسكال في قائمة المهام الخاصة بك. على الرغم من أن JCF هو منسق جيد لرموز Pascal، إلا أنه يعاني من مشكلة واحدة مزعجة للغاية. يتطلب JCF أن تكون التعليمات البرمجية قابلة للتجميع مما يعني أنه يجب أن يكون برنامجًا كاملاً وصحيحًا من الناحية النحوية. سوف يفشل JCF في مقتطفات التعليمات البرمجية أو التعليمات البرمجية الخاطئة. لكي يعمل على مقتطف التعليمات البرمجية، يجب وضعه بين زوج begin..end
وأن يحتوي على رأس program
صحيح، مثل هذا:
program test;
begin
// put code snippet here
end .
إليك JCF CLI أثناء العمل داخل VS Code (مع OmniPascal):
ملاحظة: إذا كنت مهتمًا أيضًا بمهامتي الأخرى الموضحة في العرض التوضيحي، فاطلع على جوهرها هنا.
آمل أن يكون مفيدًا لزملاء باسكال الآخرين هناك. استمتع! ؟