Notice
Recent Posts
Recent Comments
Link
코드로 우주평화
pre-commit 에서 ‘flake8’ 과 ‘black’ 커스텀 문제 본문
반응형
예제 코드
# setup.cfg
[flake8]
exclude = .git
max-line-length = 88
[black]
line-length = 88
flake8 과 black 에 ‘line-length’설정 값이 중복되는 것이 아니냐는 의견이 있었습니다.
우선 결론부터 말씀드리자면 둘다 있어야 한다고 생각합니다.
그 이유는 어느 한쪽을 생략한 경우,
생략한 쪽은 기본값을 채택하여 개발자가 원하는대로 작동하지 않기 때문입니다.
예를들어 위에 문서에서 flake8의 ‘max-line-length = 88’ 를 생략하는 경우
# 코드 수정
[flake8]
exclude = .git
# max-line-length = 88
black은 88자를 통과시키지만 flake8은 기본값인 79자를 기준으로 검사합니다.
# 결과
black....................................................................Passed
flake8...................................................................Failed
- hook id: flake8
- exit code: 1
ap-toy/main.py:9:80: E501 line too long (223 > 79 characters)
isort....................................................................Passed
pyright..................................................................Passed
반대로 black 의 line-length을 생략하는 경우, pre-commit 과정에서 코드가 수정되지 않습니다.
추가로 발견한 문제
사실 위의 setup.cfg파일에는 문제가 있었습니다.
테스트를 위해 black의 line-length 값을 극단적으로 줄였는데 아무런 문제없이 통과되었습니다.
# 코드 수정
[black]
line-length = 10
# 결과
black....................................................................Passed
flake8...................................................................Failed
- hook id: flake8
- exit code: 1
ap-toy/main.py:9:89: E501 line too long (223 > 88 characters)
isort....................................................................Passed
pyright..................................................................Passed
black의 설정 값이 정상반영되지 않았습니다.
이를 해결하기 위해 pyproject.toml 파일에 black 설정을 추가하니 정상 반영되었습니다.
# pyproject.toml
[tool.black]
line-length = 88
# 결과
black....................................................................Failed
- hook id: black
- files were modified by this hook
reformatted run-server.py
reformatted ap-toy/main.py
reformatted commit-msg.py
All done! ✨ 🍰 ✨
3 files reformatted, 1 file left unchanged.
flake8...................................................................Failed
- hook id: flake8
- exit code: 1
ap-toy/main.py:15:89: E501 line too long (223 > 88 characters)
isort....................................................................Failed
- hook id: isort
- files were modified by this hook
Fixing /Users/daco/alphaprime/portfolio-toy-project-uckim/ap-toy/main.py
# isort Failed 는 black이 import문을 수정하여 생긴 에러로 보입니다.
pyright..................................................................Passed
때문에 black은 ‘pyproject.toml’ , flake8은 ‘setup.cfg’ 파일로 분리하였고 정상 작동하는 것을 확인하였습니다.
레퍼런스
반응형
'나는 이렇게 학습한다 > Library' 카테고리의 다른 글
SQLAlchemy, ‘PasswordType’으로 손쉽게 암호화하자 (0) | 2022.04.12 |
---|---|
Poetry로 프로젝트 패키지를 관리하자 (0) | 2022.04.11 |
pre-commit 을 이용해 commit 전 코드 체크를 자동화하자. (0) | 2022.04.06 |
APScheduler를 이용해 비동기 작업을 예약하자 (0) | 2022.01.18 |
Linter 와 Formatter 를 사용해서 깔끔하게 코딩하자 (0) | 2022.01.14 |