Hard fork saya dari JEDI Code Formatter CLI dari Bee Jay, yang merupakan fork dari Lazarus JCF, yang saya tingkatkan sedikit dengan lekukan yang lebih baik dan dukungan yang sangat dibutuhkan untuk deklarasi variabel Delphi modern. Sangat sulit untuk memahami kodenya yang kuno, rumit, dan hampir sepenuhnya tidak terdokumentasi. Tetap saja, saya berhasil menerapkan apa yang saya inginkan. Hal ini hampir tidak dapat diperluas atau ditingkatkan lebih lanjut mengingat betapa rumitnya kode sumber input dan betapa sulitnya menargetkan kasus edge individual di AST tanpa merusak sesuatu yang lain di suatu tempat. Di masa mendatang, akan lebih baik jika beralih ke pemformat yang tidak memerlukan penguraian sumber secara mendalam.
(Ekstensi VSCode yang diperbarui yang berfungsi dengan versi ini juga tersedia, tarik permintaan.)
Perubahannya meliputi:
Dukungan untuk deklarasi variabel inline Delphi:
var I: Integer := 10 ;
Dengan inferensi tipe:
var I := 42 ;
Di dalam for
pernyataan:
for var I := Low (myArray) to High (myArray) do
File sumber dengan variabel sebaris tidak lagi menyebabkan kegagalan formatter.
Opsi baru IndentCaseLabels
untuk mengontrol indentasi pernyataan label case
secara independen dari seluruh blok case
. Misalnya, dengan IndentCaseLabels
disetel ke True
(default):
case i of
1 .. 9 :
for i := 1 to i do write(i, ' , ' );
10 : begin
writeln;
writeln;
end ;
else
myProcedure;
end ;
Dengan IndentCaseLabels
disetel ke False
:
case i of
1 .. 9 :
for i := 1 to i do write(i, ' , ' );
10 : begin
writeln;
writeln;
end ;
else
myProcedure;
end ;
Opsi baru IndentMethodParams
, sehingga memungkinkan untuk menulis parameter metode seperti ini ( IndentMethodParams
disetel ke False
):
function myFunction (aParam: string
; aParam2: real): boolean;
Dan hindari baris kedua yang menjorok ke dalam. Jika tidak (setel ke True
):
function myFunction (aParam: string
; aParam2: real): boolean;
Opsi baru IndentInterfaceGuid
untuk mencegah antarmuka GUID diindentasi. Setel ke True
:
IFace = interface
[ ' {5E3C2BCA-56C8-46DE-959F-338AF5F69C1A} ' ]
procedure proc ;
end ;
Setel ke False
:
IFace = interface
[ ' {5E3C2BCA-56C8-46DE-959F-338AF5F69C1A} ' ]
procedure proc ;
end ;
Pemformat sekarang memproses akhir baris di dalam komentar dengan benar dan juga menghindari pemformatan pernyataan kontrol dengan komentar di antaranya.
Kode sumber formatter telah diproses melalui formatter itu sendiri untuk memvalidasi fungsi yang benar “di alam liar”.
Kecuali saya lupa sesuatu, semua perubahan saya “ditandai” dengan // fix:
comments.
Biner tersedia. Versi Windows 64-bit berasal dari FPC. Versi Windows 32-bit dibuat dengan Delphi. Sistem operasi lain harus dibuat dengan sedikit atau tanpa perubahan.
Cara menguji:
pascal-format -config=pascal-format.new.cfg -out test.fmt.pas test.pas
TODO: dengan GUI sekarang dihapus, debugging AST yang diurai tidak mungkin dilakukan, kecuali melakukannya dengan coba-coba. Tampilan AST perlu ditulis ulang menjadi keluaran dalam bentuk tekstual, atau, lebih baik lagi, dibuat ulang dalam LCL (tetapi tanpa dukungan Delphi). Seharusnya cukup mudah dilakukan mengingat pada dasarnya ini hanya tampilan pohon pada formulir kosong.
Jadi ini untuk berjaga-jaga jika ada orang lain yang ingin membuang waktunya dan terus berusaha menjadikan hal ini lebih pintar.
Deskripsi asli menyusul.
Saya (Bee Jay) mengambil Jedi Code Formatter (JCF) dari repositori Lazarus IDE dan menjadikannya sebagai versi CLI (antarmuka baris perintah) dengan menghapus semua bagian GUI (antarmuka pengguna grafis) dari versi GUI asli. Versi CLI dapat digunakan sebagai pemformat kode Pascal dalam Visual Studio Code, atau sebagai mesin backend percantik kode Pascal online.
Asli: salinan (terkadang dimodifikasi) dari pohon svn r823 jcf2: https://jedicodeformat.svn.sourceforge.net/svnroot/jedicodeformat/trunk/CodeFormat/Jcf2
Penulis asli: Anthony Steele.
Lisensi asli: MPL 1.1.
jcf-pascal-format
ini ke dalam folder Anda sendiri.pascal_format.lpi
dalam folder jcf-pascal-format/App
.pascal-format
yang dapat dieksekusi dari folder jcf-pascal-format
bersama dengan file konfigurasi pascal-format.cfg
../pascal-format -?
memerintah. Itu harus menunjukkan manual penggunaan. jcf-pascal-format
ini ke dalam folder Anda sendiri.pascal_format.lpi
dalam folder jcf-pascal-format/App
.test.pas
dari folder jcf-pascal-format
.JCF
menggunakan Tasks → Run Task... → pascal-format: Test CLI Program menu dan Anda akan melihat hasilnya di file test.pas
. pascal-format
dan pascal-format.cfg
ke folder ruang kerja Pascal Anda.tasks.json
jika Anda sudah memilikinya.tasks.json
Anda. {
"label" : " JCF: Beautify Code " ,
"type" : " shell " ,
"command" : " ./pascal-format " ,
"args" : [
" ${file} " ,
" -clarify " ,
" -inplace " ,
" -config=pascal-format.xml "
],
"presentation" : {
"reveal" : " never "
},
"problemMatcher" : []
},
-clarify
arg menjadi -obfuscate
.tasks.json
Anda. Sekarang Anda seharusnya memiliki tugas format pascal baru di daftar tugas Anda. Meskipun JCF adalah pemformat kode Pascal yang bagus, ia memiliki satu masalah yang cukup mengganggu. JCF mensyaratkan kode harus dapat dikompilasi yang berarti harus berupa program yang lengkap dan benar secara sintaksis. JCF akan gagal pada cuplikan kode atau kode yang salah. Agar dapat berfungsi pada cuplikan kode, ia harus diletakkan di antara pasangan begin..end
dan memiliki header program
yang benar, seperti ini:
program test;
begin
// put code snippet here
end .
Inilah JCF CLI yang beraksi dalam VS Code (dengan OmniPascal):
Catatan: Jika Anda juga tertarik dengan tugas saya yang lain yang ditampilkan di demo, lihat intisari saya di sini.
Semoga bermanfaat bagi rekan-rekan Pascal lainnya di luar sana. Selamat bersenang-senang! ?