자체적으로 Lazarus JCF의 포크인 Bee Jay의 JEDI Code Formatter CLI 하드 포크는 더 나은 들여쓰기와 최신 Delphi 변수 선언에 필요한 지원을 통해 약간 개선되었습니다. 오래되고 복잡하며 거의 완전히 문서화되지 않은 코드를 탐색하는 것은 정말 어려웠습니다. 그래도 내가 원하는 것을 구현하는 데 성공했습니다. 입력 소스 코드가 얼마나 까다롭고 어딘가 다른 것을 손상시키지 않고 AST에서 개별 엣지 케이스를 목표로 삼는 것이 얼마나 어려운지를 고려하면 더 이상 확장하거나 개선할 수 없습니다. 앞으로는 소스에 대한 심층 분석이 필요하지 않은 포맷터로 전환하는 것이 더 나을 것입니다.
(이 버전에서 작동하는 업데이트된 VSCode 확장도 사용 가능합니다. 끌어오기 요청입니다.)
변경 사항은 다음과 같습니다.
Delphi 인라인 변수 선언 지원:
var I: Integer := 10 ;
유형 추론을 사용하면 다음과 같습니다.
var I := 42 ;
for
문 내부:
for var I := Low (myArray) to High (myArray) do
인라인 변수가 있는 소스 파일로 인해 더 이상 포맷터가 실패하지 않습니다.
전체 case
블록과 독립적으로 case
레이블 문의 들여쓰기를 제어하는 새로운 옵션 IndentCaseLabels
. 예를 들어 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;
인터페이스 GUID가 들여쓰기되는 것을 방지하는 새로운 옵션 IndentInterfaceGuid
. True
로 설정:
IFace = interface
[ ' {5E3C2BCA-56C8-46DE-959F-338AF5F69C1A} ' ]
procedure proc ;
end ;
False
으로 설정:
IFace = interface
[ ' {5E3C2BCA-56C8-46DE-959F-338AF5F69C1A} ' ]
procedure proc ;
end ;
이제 포맷터는 주석 내부의 줄 끝을 올바르게 처리하고 제어문 사이에 주석이 포함된 서식 지정을 방지합니다.
포맷터 소스 코드는 "야생에서" 올바른 기능을 검증하기 위해 포맷터 자체를 통해 처리되었습니다.
내가 잊어버린 것이 없다면 모든 변경 사항은 // fix:
주석으로 "태그"됩니다.
바이너리를 사용할 수 있습니다. 64비트 Windows 빌드는 FPC에서 빌드되었습니다. 32비트 Windows 버전은 Delphi로 구축되었습니다. 다른 운영 체제는 변경 사항이 거의 또는 전혀 없이 구축되어야 합니다.
테스트 방법:
pascal-format -config=pascal-format.new.cfg -out test.fmt.pas test.pas
TODO: 이제 GUI가 제거되었으므로 시행착오를 거치지 않는 한 구문 분석된 AST를 디버깅하는 것이 불가능합니다. AST 뷰를 텍스트 형식으로 출력하려면 다시 작성해야 합니다. 또는 더 나은 방법은 간단히 LCL로 다시 작성하는 것입니다(그러나 Delphi는 지원하지 않음). 기본적으로 빈 양식의 트리 뷰라는 점을 고려하면 상당히 간단해야 합니다.
따라서 누군가가 시간을 낭비하고 이 일을 더 똑똑하게 만들려고 계속 노력하고 싶은 경우를 대비해 여기에 있습니다.
원래 설명은 다음과 같습니다.
나(Bee Jay)는 Lazarus IDE 저장소에서 JCF(Jedi Code Formatter)를 가져와 원래 GUI 버전에서 GUI(그래픽 사용자 인터페이스) 부분을 모두 제거하여 CLI(명령줄 인터페이스) 버전으로 만들었습니다. CLI 버전은 Visual Studio Code에서 Pascal 코드 포맷터로 사용하거나 온라인 Pascal Code Beautifier의 백엔드 엔진으로 사용할 수 있습니다.
원본: r823 jcf2 svn 트리의 복사본(때때로 수정됨): https://jedicodeformat.svn.sourceforge.net/svnroot/jedicodeformat/trunk/CodeFormat/Jcf2
원작자: 앤서니 스틸.
원본 라이센스: MPL 1.1.
jcf-pascal-format
GitHub 저장소를 자신의 폴더에 복제하거나 다운로드하세요.jcf-pascal-format/App
폴더에서 pascal_format.lpi
프로젝트를 엽니다.pascal-format.cfg
구성 파일과 함께 jcf-pascal-format
폴더에서 실행 가능한 pascal-format
파일을 가져옵니다../pascal-format -?
사용하여 터미널에서 테스트해 보세요. 명령. 사용 설명서가 표시되어야 합니다. jcf-pascal-format
GitHub 저장소를 자신의 폴더에 복제하거나 다운로드하세요.jcf-pascal-format/App
폴더 내에서 pascal_format.lpi
프로젝트를 엽니다.jcf-pascal-format
폴더에서 test.pas
파일을 엽니다.JCF
프로그램을 테스트하면 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
을 저장하세요. 이제 작업 목록에 새로운 pascal-format의 작업이 있어야 합니다. JCF는 훌륭한 Pascal 코드 포맷터이지만 매우 성가신 문제가 하나 있습니다. JCF에서는 코드가 컴파일 가능해야 하며 이는 완전한 프로그램이어야 하고 구문이 정확해야 함을 의미합니다. JCF는 코드 조각이나 잘못된 코드로 인해 실패합니다. 코드 조각에서 작동하게 하려면 다음과 같이 begin..end
끝 쌍 사이에 있어야 하며 올바른 program
헤더가 있어야 합니다.
program test;
begin
// put code snippet here
end .
다음은 VS Code(OmniPascal 사용) 내에서 작동하는 JCF CLI입니다.
참고: 데모에 표시된 다른 작업에도 관심이 있다면 여기에서 이에 대한 요점을 참조하세요.
다른 파스칼 동료들에게도 도움이 되기를 바랍니다. 재미있게 보내세요! ?