ฮาร์ดฟอร์คของฉันของ JEDI Code Formatter CLI จาก Bee Jay ซึ่งเป็นทางแยกของ Lazarus JCF ซึ่งฉันปรับปรุงเล็กน้อยด้วยการเยื้องที่ดีขึ้นและการสนับสนุนที่จำเป็นมากสำหรับการประกาศตัวแปร Delphi สมัยใหม่ เป็นเรื่องยากมากที่จะใช้งานโค้ดที่เก่าแก่ ซับซ้อน และแทบไม่มีเอกสารใดๆ ถึงกระนั้น ฉันก็สามารถจัดการสิ่งที่ฉันต้องการได้สำเร็จ แทบจะไม่สามารถขยายหรือปรับปรุงเพิ่มเติมได้อีก เมื่อพิจารณาถึงความยุ่งยากของซอร์สโค้ดอินพุต และความยากลำบากในการกำหนดเป้าหมายแต่ละกรณี Edge ใน AST โดยไม่ทำลายสิ่งอื่นใด ในอนาคต จะดีกว่าหากเปลี่ยนไปใช้ฟอร์แมตเตอร์ที่ไม่ต้องแยกวิเคราะห์แหล่งที่มาแบบละเอียด
(ส่วนขยาย VSCode ที่อัปเดตซึ่งใช้งานได้กับเวอร์ชันนี้ก็มีให้ใช้งานเช่นกัน คำขอดึง)
การเปลี่ยนแปลงได้แก่:
รองรับการประกาศตัวแปรอินไลน์ Delphi:
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 ;
ตอนนี้ตัวจัดรูปแบบประมวลผลการสิ้นสุดบรรทัดภายในความคิดเห็นได้อย่างถูกต้อง และยังหลีกเลี่ยงการจัดรูปแบบคำสั่งควบคุมที่มีความคิดเห็นอยู่ระหว่างนั้นด้วย
ซอร์สโค้ดของฟอร์แมตเตอร์ได้รับการประมวลผลผ่านตัวฟอร์แมตเตอร์เองเพื่อตรวจสอบฟังก์ชันที่ถูกต้อง "ในป่า"
เว้นแต่ฉันจะลืมบางสิ่งบางอย่าง การเปลี่ยนแปลงทั้งหมดของฉันจะถูก "แท็ก" ด้วย // fix:
comment
ไบนารี่มีอยู่ Windows รุ่น 64 บิตมาจาก FPC Windows เวอร์ชัน 32 บิตสร้างด้วย Delphi ระบบปฏิบัติการอื่นๆ ควรสร้างโดยไม่มีการเปลี่ยนแปลงเพียงเล็กน้อยหรือไม่มีเลย
วิธีทดสอบ:
pascal-format -config=pascal-format.new.cfg -out test.fmt.pas test.pas
สิ่งที่ต้องทำ: เมื่อนำ GUI ออกแล้ว การดีบัก AST ที่แยกวิเคราะห์แล้วจึงเป็นไปไม่ได้ เว้นแต่จะทำโดยการลองผิดลองถูก มุมมอง AST จำเป็นต้องเขียนใหม่เป็นเอาต์พุตในรูปแบบข้อความ หรือที่ดีไปกว่านั้นคือสร้างใหม่ใน LCL (แต่ไม่รองรับ Delphi) ควรทำค่อนข้างง่ายเนื่องจากโดยพื้นฐานแล้วเป็นเพียงมุมมองแบบต้นไม้ในรูปแบบว่าง
ในกรณีนี้ เผื่อว่ามีใครอยากจะเสียเวลาและพยายามทำให้สิ่งนี้ฉลาดขึ้นต่อไป
คำอธิบายต้นฉบับดังต่อไปนี้
ฉัน (Bee Jay) นำ Jedi Code Formatter (JCF) จากพื้นที่เก็บข้อมูล Lazarus IDE และทำให้เป็นเวอร์ชัน CLI (อินเทอร์เฟซบรรทัดคำสั่ง) โดยลบส่วน GUI (อินเทอร์เฟซผู้ใช้แบบกราฟิก) ทั้งหมดออกจากเวอร์ชัน GUI ดั้งเดิม เวอร์ชัน CLI สามารถใช้เป็นตัวจัดรูปแบบโค้ด Pascal ใน Visual Studio Code หรือเป็นเครื่องมือแบ็กเอนด์ของตัวปรับแต่งโค้ด Pascal ออนไลน์ได้
ต้นฉบับ: สำเนา (แก้ไขบางครั้ง) ของ r823 jcf2 svn tree: 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
โดยใช้ Tasks → Run Task... → pascal-format: ทดสอบเมนูโปรแกรม 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):
หมายเหตุ: หากคุณสนใจงานอื่นๆ ของฉันที่แสดงในตัวอย่าง โปรดดูส่วนสำคัญของฉันที่นี่
หวังว่าคงจะเป็นประโยชน์กับชาวปาสคาลคนอื่นๆ นะ มีความสุข! -