🪠

파일 포멧팅 설정하기 (yapf)

생성일
Mar 7, 2022 11:41 AM
태그
prettifier

Why yapf?

black을 많이 사용하지만 black은 python3.6이상에서만 지원이 된다.
여전히 python2.7인 프로젝트가 많기 때문에 2.7에서도 가능한 파일포멧터가 필요하다.
 
Github 주소 →
 
Go 개발할때 gofmt로 포멧팅을 하는데 yapf도 비슷한 방식으로 스타일 가이드에 맞춘 포멧팅을 제공한다.

Install

To install YAPF from PyPI:
$ pip install yapf
(optional) If you are using Python 2.7 and want to enable multiprocessing:
$ pip install futures
 

Github repository에 적용

기존 파일에 테스팅

  • 하나의 파일에 포멧팅 결과 보는 명령어. 명령어 아래에 바로 포멧팅된 결과물이 나오고 기존 파일은 변하지 않는다.
yapf api/urls.py
 
  • 파일에 포멧팅 적용 (-i를 붙인다. in place)
yapf -i api/urls.py
 
  • 폴더 하위 파이썬 파일에 다 적용 (예. api 폴더내의 모든 py 파일)
yapf -i api/**/*.py
 
  • 스타일 설정 파일 추가 (파일명: .style.yapf)
[style] based_on_style = google space_between_ending_comma_and_closing_bracket = true COALESCE_BRACKETS = true BLANK_LINE_BEFORE_NESTED_CLASS_OR_DEF = false
위의 예시처럼 작성하면 위의 규칙대로 파일을 포멧팅 한다.
 
팀에 합류를 했다면 기존 팀원들이 해왔던 방식이 있을것이다. (아마?) 간단하게는 위의 설정으로 한 폴더를 다 돌린 후 git diff를 통해 얼마나 일치하는지를 확인해서 현재 팀에 적용된 규칙으로 포멧팅 설정 파일을 만들고 그 뒤에 편한 방향으로 수정하는것이 좋을것 같다.
 

Pre-commit으로 포멧 자동화

위의 방법으로 하는것도 하나의 방법이지만 매번 cli에서 커맨드를 입력해줘야하는 귀찮음이 있다.
저장할때 자동으로 포멧하는 방법도 있고 Git을 사용한다면 pre-commit을 통해서도 가능하다.
 
  • .pre-commit-config.yaml 파일 생성
repos: - repo: local hooks: - id: yapf name: yapf language: python entry: yapf args: [-i, -vv] types: [python]
 
  • 필요한 라이브러리 설치
pip install pre-commit pre-commit install
 
앞으로 git commit -m “” 명령어를 할 때 포메팅이 할 내용이 있다면 에러가 뜨면서 수정된 부분이 뜬다. 같이 git staging에 올리고 다시 commit하고 push하면 끝.