ReadmeGenie를 개발할 때 Linting 및 서식 지정을 위한 자동화된 설정을 통해 일관된 코드 품질을 보장하는 것을 목표로 했습니다. 여러 도구를 고려한 후 Linter로 Ruff를 선택하고 코드 포맷터로 Black을 선택했습니다. Ruff는 Linting과 서식 지정을 모두 처리할 수 있지만 두 도구의 구성에 대한 경험을 쌓기 위해 Black을 별도의 서식 지정 도구로 설정하기로 결정했습니다. 아래에서는 제가 이 도구를 선택한 이유, 프로젝트를 위해 도구를 구성한 방법, 직면한 과제, 그 과정에서 배운 교훈을 공유하겠습니다.
Ruff는 다른 린터(예: Flake8 및 Pyflakes)의 다양한 린팅 규칙을 지원하고 상당한 성능 향상을 제공하는 빠른 Python용 린터입니다. 사용자 정의가 가능하므로 서식 지정 시 Black과의 호환성을 보장하면서 규칙을 혼합하여 지정할 수 있습니다. 속도와 확장성을 고려한 Ruff의 디자인은 품질을 희생하지 않고 효율성을 우선시하는 프로젝트에 이상적입니다.
Black은 하나의 서식 스타일을 엄격하게 적용하는 Python 서식 지정 도구로, 코드 스타일에 대한 토론과 불일치를 줄이는 데 도움이 됩니다. Ruff는 기본 서식 기능을 제공하지만 Black의 전용 접근 방식은 다음과 같은 몇 가지 장점을 제공합니다.
광범위한 채택: 검정색은 널리 사용되므로 대부분의 개발 워크플로, 특히 공동 작업 프로젝트에 쉽게 통합할 수 있습니다.
블랙 문서: https://github.com/psf/black
ReadmeGenie에서 Ruff와 Black이 원활하게 작동하도록 하기 위해 pyproject.toml과
모두에서 구성했습니다.
.pre-commit-config.yaml을 사용하면 개발자가 커밋할 때 자동으로 코드 형식을 지정하고 린트할 수 있습니다.
이 설정을 통해 Ruff는 Linting에만 사용되고 Black은 서식 지정에만 사용됩니다.
# pyproject.toml # Set up black as formatter [tool.black] line-length = 88 target-version = ["py311"] # Set up ruff as linter only [tool.ruff] # Exclude directories that don’t need linting (e.g., virtual environments) exclude = [ "venv/", "__pycache__/" ] fix = true # Enable specific linting rules select = ["F", "E", "W", "B", "I", "S"] # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety # Exclude Black-compatible rules to avoid conflicts with Black's formatting. ignore = ["E501", "E203", "E231"] # Exclude Black-incompatible style issues
사전 커밋 후크를 사용하여 모든 커밋에 린트 및 형식 지정을 적용하도록 .pre-commit-config.yaml을 구성했습니다.
# .pre-commit-config.yaml repos: - repo: https://github.com/psf/black rev: 23.1.0 hooks: - id: black - repo: https://github.com/charliermarsh/ruff-pre-commit rev: v0.7.1 hooks: - id: ruff
위 설정으로 다음 명령을 사용할 수 있습니다.
# pyproject.toml # Set up black as formatter [tool.black] line-length = 88 target-version = ["py311"] # Set up ruff as linter only [tool.ruff] # Exclude directories that don’t need linting (e.g., virtual environments) exclude = [ "venv/", "__pycache__/" ] fix = true # Enable specific linting rules select = ["F", "E", "W", "B", "I", "S"] # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety # Exclude Black-compatible rules to avoid conflicts with Black's formatting. ignore = ["E501", "E203", "E231"] # Exclude Black-incompatible style issues
# .pre-commit-config.yaml repos: - repo: https://github.com/psf/black rev: 23.1.0 hooks: - id: black - repo: https://github.com/charliermarsh/ruff-pre-commit rev: v0.7.1 hooks: - id: ruff
이러한 명령은 모든 Python 파일에 수정 사항을 적용하여 일관된 스타일과 품질 검사를 보장합니다.
저장 시 Ruff와 Black을 자동화하기 위해 .vscode/settings.json에 다음 구성을 추가했습니다.
ruff check . --fix
이 설정을 사용하면 VS Code에서 Black을 기본 포맷터로 만들고 Ruff를 유일한 활성 린터로 사용하여 둘 다 실행할 수 있습니다.
저장 시 자동으로 실행됩니다.
구성 후 Ruff와 Black은 다음과 같은 몇 가지 문제를 식별했습니다.
한 가지 주목할만한 과제는 러프와 블랙 사이에 일부 스타일이 호환되지 않는다는 점을 이해하는 것이었습니다. 예:
Ruff와 Black을 함께 사용하는 것은 코드 품질을 향상시키는 좋은 방법이었습니다. 제가 배운 내용은 다음과 같습니다.
위 내용은 코드 품질을 위한 도구 설정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!