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", }));
Read Entire Article