프로젝트 소개
gdstyle은 Godot 4.x 게임 엔진에서 사용되는 스크립팅 언어인 GDScript용 린터 및 포매터입니다. Rust로 작성되었으며 단일 정적 바이너리로 배포되므로 실행에 Python, Rust 툴체인 또는 Godot 설치가 필요하지 않습니다.
기능
이 도구는 GDScript 파일에서 스타일 위반, 명명 불일치 및 일반적인 코드 품질 문제를 확인하고, 공식 Godot 스타일 가이드를 따르도록 파일을 재포맷할 수 있습니다. 많은 규칙은 GDQuest의 GDScript 스타일 가이드에서 가져왔습니다. 5개 범주로 그룹화된 56개의 규칙이 포함되어 있습니다:
- 구문(1개 규칙): 종료되지 않은 문자열이나 잘못된 숫자와 같은 렉서 오류를 보고합니다.
- 명명(11개 규칙): 클래스와 열거형은 PascalCase, 함수, 변수, 시그널 및 파일 이름은 snake_case, 상수와 열거형 멤버는 SCREAMING_SNAKE_CASE, 과거형 시그널 이름, PascalCase 노드 경로를 강제합니다.
- 포맷(20개 규칙): 줄 길이, 후행 공백 및 새 줄, 탭 대 공백, 부울 연산자, 따옴표 스타일, 주석 간격, 괄호, 숫자 리터럴, 줄당 문, 빈 줄, 후행 쉼표, 연산자/콜론/쉼표/중괄호 간격, 호출 괄호, 부동 소수점 0, 큰 숫자 밑줄 및 열거형 레이아웃을 다룹니다.
- 순서(1개 규칙): 주석과 class_name부터 시그널, 열거형, 상수, 변수, 가상 메서드, 메서드 및 내부 클래스까지 표준 Godot 클래스 멤버 순서를 강제합니다.
- 품질(23개 규칙): 함수, 파일, 매개변수, 중첩, 반환, 분기, 지역 변수, 클래스 변수, 공용 메서드 및 내부 클래스 수에 대한 제한과 불필요한 pass, 자기 비교, 자기 할당, 중복 사전 키, 중복 load 호출, 도달할 수 없는 코드, 루프 내 await, 루프 내 할당, _process에서 노드 조회 등에 대한 검사를 포함합니다.
대부분의 규칙은 기본적으로 경고 심각도로 활성화됩니다. 일부 권고 규칙(타입 힌트, 빈 함수, 디버그 출력)은 기본적으로 꺼져 있으며 명시적으로 활성화해야 합니다.
포매터 및 자동 수정
fmt 하위 명령은 파일을 제자리에서 재포맷하며 멱등입니다. 들여쓰기, 공백, 빈 줄, 부울 연산자, 따옴표, 주석 간격, 구두점 간격, 숫자 리터럴 및 후행 새 줄을 정규화하고, 한 줄 열거형을 확장하며, 클래스 멤버를 재정렬하고, 구분 기호 내 쉼표, 조건의 and/or 및 주석의 단어 경계에서 긴 줄을 줄 바꿈합니다. 줄 바꿈 가능한 패턴이 없는 줄은 그대로 둡니다.
check 하위 명령은 안전한 수정을 위한 --fix와 이름 변경 및 재정렬을 위한 --unsafe-fix를 지원합니다. 비안전 이름 변경은 다른 .gd 파일 및 .tscn/.tres 장면 연결로 전파됩니다. 안전하게 다시 쓸 수 없는 것은 경고로 보고됩니다. 수정 사항은 백업이나 확인 없이 디스크에 기록되므로 README는 먼저 커밋하거나 스태시할 것을 권장합니다.
구성 및 억제
구성은 디렉터리 트리를 올라가며 발견되는 gdstyle.toml 또는 .gdstyle.toml에 있거나 --config로 전달됩니다. 설정에는 줄 길이, 탭 사용, 다양한 크기 제한, 제외/포함 패턴 및 규칙별 심각도 재정의(off, warn, error)가 포함됩니다. 구성에서 알 수 없는 규칙 이름은 stderr에 보고됩니다. 진단은 # gdstyle:ignore 및 # gdstyle:ignore-file 주석으로 줄 또는 파일별로 무음 처리할 수 있으며, 선택적으로 특정 규칙 ID로 좁힐 수 있습니다. 멤버 순서 규칙을 무시하면 멤버가 고정되어 포매터가 이동하지 않습니다.
통합
출력은 텍스트 또는 JSON일 수 있으며, 종료 코드는 깨끗한 실행, 린트 오류 또는 초과된 경고 상한 및 구성 오류를 구분합니다. README는 GitHub Actions 사용법, pre-commit 훅(gdstyle 및 gdstyle-fmt) 및 최소한의 raw git 훅을 문서화합니다. 선택적 Godot 편집기 플러그인은 클릭 가능한 진단, 원클릭 수정 및 저장 시 린트/포맷 기능이 있는 하단 패널을 제공하며, 가능한 경우 GDExtension을 사용하고 그렇지 않으면 CLI 바이너리로 대체합니다. 이 크레이트는 Rust 라이브러리로도 사용할 수 있습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.