파이썬의 auto-formatter중 많이 쓰이는 것은 AutoPEP8, BLACK, YAPF 이 있다.
이 세개를 뽑은 이유는, vscode의 기본 선택 옵션이 이렇게 세개이기 때문
내 경우는 기본적으로 google python style guide에 따라서 코드를 작성해왔고, 거기서 추천하는 (그리고 구글에서 실제로 사용하는) YAPF를 이용해서 포매팅을 해왔다
하지만, YAPF의 개발은 그렇게 활발한 편이 아니었고, Black에 비해서 점점 자리가 줄어드는 추세였다.
YAPF의 포매팅 퀄리티에 대해서는 나도 불만이 많았다. 마음에 안드는 결과가 나오는 적이 너무 많았다. 그렇다고 수동으로 하기는 너무 힘드니 그냥 쓰기는 했지만..
Black은 라인 분할을 수정하기 위해서 알아서 trailing comma나 괄호를 추가/삭제하면서 좀더 적극적으로 포매팅한다. 라인을 나누는 위치도 조금 더 내 직관에 들어맞는다.
그리고.. 결국 구글에서도 YAPF를 버리고 Black으로 갈아탈 계획을 세웠다!
python 3.10에 추가된 structural pattern matching 과 같은 문법에 대응하기 위해서는 뜯어고쳐야 할 게 너무 많아서, 그냥 black으로 갈아타는 것이 더 효율적이라고 결정한듯.
하지만, 그대로 black을 적용하면 google python style guide과 충돌하는 부분이 많기때문에, 단계적으로 넘어가기 위한 계획을 세웠고 그 결과로 나온것이 black를 패치해서, 룰을 약간 수정한 pyink 이다
그래서, 나도 이미 구글에서도 안쓰기로 한 YAPF를 낮은 퀄리티를 감수하고 사용할 이유가 없어졌다. 그렇다면 Black을 쓰느냐 Pyink를 쓰느냐인데, Pyink가 black에서 달라진 점은 사실 많지가 않다.
2-space indentation을 허용하기 ⇒ 이건 어차피 외부 코드는 4-space 규약을 따르므로 내게는 필요없는 기능이다
single-quote vs double-quote를 그 파일내에서 많이 사용되는 쪽으로 결정하기 ⇒ 블랙에서는 double-quote로 바꾸거나, 안바꾸거나 하는 두가지 옵션밖에는 없다. 내 경우는 이미 single quote로 통일해서 쓰고 있는 상태였고.. 그냥 –skip-string-normalization을 써서 안건드리게만 유지해도 별 문제 없다
long import 라인을 여러줄로 분리하지 않고 유지하기 → 3rd party 라이브러리를 안쓰므로 long import 를 쓸 일이 없어서 상관없음
그 외에 것들은, 굳이 black으로 포맷한다고 google style guide와 충돌하지는 않는것 같다. 그리고 사소한 차이들 (docstring이 없는 class의 첫 줄에 blank link이 있어야 한다..와 같은것들)은 google style guide를 black에 맞춰서 업데이트해나갈 예정으로 보이니 미리 black 기준으로 작업해도 관계없을것 같다.
결국 아직 대중화가 안된 Pyink를 쓰는것보다. 그냥 Black을 바로 쓰기로 했다. 안녕 YAPF.