Steering Zig Fmt
3 days ago
5
- zig fmt는 파일에 이미 있는 구문 형태를 반영해 같은 코드도 여러 레이아웃으로 배치할 수 있는 조종 가능한 포매터로 쓰일 수 있음
- 함수 호출에서는 trailing comma 유무가 결과를 바꾸며, 쉼표가 없으면 한 줄로 합쳐지고 쉼표가 있으면 인자를 줄마다 배치함
- 실제 흐름은 원하는 코드 배치를 먼저 정하고 쉼표를 몇 개 추가한 뒤 포맷 단축키를 눌러 zig fmt가 나머지를 처리하게 하는 방식임
- 배열에서는 trailing comma뿐 아니라 첫 번째 줄바꿈 위치도 반영되어, 첫 줄바꿈이 세 번째 항목 뒤에 있으면 항목 3개씩 맞춰 정렬됨
- ++ 배열 연결을 신중히 쓰면 줄마다 항목 수를 다르게 배치할 수 있고, subprocess에 --key와 value 쌍을 넘길 때 고정 인자 배열과 옵션 쌍 배열을 연결해 정렬할 수 있음
zig fmt를 조종하는 방식
- zig fmt는 현재 파일에 이미 있는 구문 형태를 보고 같은 구문도 여러 방식으로 배치할 수 있어 조종 가능한 포매터로 쓰일 수 있음
- 함수 호출에서 trailing comma 유무가 레이아웃을 바꿈
f(1, 2,
3);
// -> zig fmt ->
f(1, 2, 3);
f(1, 2,
3,);
// -> zig fmt ->
f(
1,
2,
3,
);
- 실제 사용 흐름은 원하는 코드 배치를 먼저 정하고 ,를 몇 개 추가한 뒤, 포맷 단축키를 눌러 zig fmt가 나머지를 처리하게 하는 방식임
- 포매터가 레이아웃을 추측하게 하기보다, 사용자가 핵심 선택을 직접 남기는 방식이 더 잘 맞을 수 있음
- 좋은 포매팅의 90%는 논리 블록 사이의 빈 줄과 적절한 중간 변수 선택에 달려 있으므로, 이런 선택을 제거하기보다 활용하는 편이 낫다는 결론임
배열의 열 맞춤 레이아웃
- 배열에서는 trailing comma만으로 한 줄에 하나씩 배치되는 것이 아니라, 첫 번째 줄바꿈 위치도 zig fmt가 반영함
.{ 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, };
- 첫 줄바꿈이 세 번째 항목 뒤에 있으면, 결과도 항목 3개씩 맞춰 정렬됨
.{
1, 2, 3,
4, 5, 6,
7, 8, 9,
10, 11,
};
- ++ 배열 연결을 신중히 쓰면 줄마다 항목 수를 다르게 배치할 수 있음
- subprocess에 --key와 value 쌍을 넘길 때는 고정 인자 배열과 옵션 쌍 배열을 연결해 다음처럼 정렬할 수 있음
try run(&(.{ "aws", "s3", "sync", path, url } ++ .{
"--include", "*.html",
"--include", "*.xml",
"--metadata-directive", "REPLACE",
"--cache-control", "max-age=0",
}));
-
Homepage
-
Tech blog
- Steering Zig Fmt