====== Python Formatter ====== * 세줄요약 * 2022년 10월 21일 부터는 * YAPF 대신 * BLACK으로 포매팅한다 ===== 요약 안된 버전 ===== * 파이썬의 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를 패치해서, 룰을 약간 수정한 [[https://github.com/google/pyink|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. * Black을 사용하면서 사용할 옵션들은 * --line-length=80 과 --skip-string-normalization 이다.