>  기사  >  백엔드 개발  >  코드 품질을 위한 도구 설정

코드 품질을 위한 도구 설정

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 05:47:02359검색

Setting Up Tools for Code Quality

ReadmeGenie를 개발할 때 Linting 및 서식 지정을 위한 자동화된 설정을 통해 일관된 코드 품질을 보장하는 것을 목표로 했습니다. 여러 도구를 고려한 후 Linter로 Ruff를 선택하고 코드 포맷터로 Black을 선택했습니다. Ruff는 Linting과 서식 지정을 모두 처리할 수 있지만 두 도구의 구성에 대한 경험을 쌓기 위해 Black을 별도의 서식 지정 도구로 설정하기로 결정했습니다. 아래에서는 제가 이 도구를 선택한 이유, 프로젝트를 위해 도구를 구성한 방법, 직면한 과제, 그 과정에서 배운 교훈을 공유하겠습니다.


1. 도구 선택

왜 러프인가?

Ruff는 다른 린터(예: Flake8 및 Pyflakes)의 다양한 린팅 규칙을 지원하고 상당한 성능 향상을 제공하는 빠른 Python용 린터입니다. 사용자 정의가 가능하므로 서식 지정 시 Black과의 호환성을 보장하면서 규칙을 혼합하여 지정할 수 있습니다. 속도와 확장성을 고려한 Ruff의 디자인은 품질을 희생하지 않고 효율성을 우선시하는 프로젝트에 이상적입니다.

  • 러프 문서: https://github.com/charliermarsh/ruff

왜 블랙인가?

Black은 하나의 서식 스타일을 엄격하게 적용하는 Python 서식 지정 도구로, 코드 스타일에 대한 토론과 불일치를 줄이는 데 도움이 됩니다. Ruff는 기본 서식 기능을 제공하지만 Black의 전용 접근 방식은 다음과 같은 몇 가지 장점을 제공합니다.

  • 일관성: Black은 코드 형식에 대한 논쟁을 최소화하는 엄격한 표준 스타일을 시행합니다.
  • 광범위한 채택: 검정색은 널리 사용되므로 대부분의 개발 워크플로, 특히 공동 작업 프로젝트에 쉽게 통합할 수 있습니다.

  • 블랙 문서: https://github.com/psf/black

2. 프로젝트 설정

ReadmeGenie에서 Ruff와 Black이 원활하게 작동하도록 하기 위해 pyproject.toml과
모두에서 구성했습니다. .pre-commit-config.yaml을 사용하면 개발자가 커밋할 때 자동으로 코드 형식을 지정하고 린트할 수 있습니다.

pyproject.toml의 Ruff 및 Black 구성

이 설정을 통해 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
  • 무시: Black은 특정 스타일을 처리하므로 Ruff에서는 이러한 규칙을 제외했습니다.
  • 수정: 가능한 경우 Ruff를 사용하여 문제를 수정하고 서식을 검정색으로 남겨둡니다.

Ruff 및 Black에 대한 사전 커밋 후크 추가

사전 커밋 후크를 사용하여 모든 커밋에 린트 및 형식 지정을 적용하도록 .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

3. 명령줄에서 Ruff와 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
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 파일에 수정 사항을 적용하여 일관된 스타일과 품질 검사를 보장합니다.

4. VS 코드 통합

저장 시 Ruff와 Black을 자동화하기 위해 .vscode/settings.json에 다음 구성을 추가했습니다.

  ruff check . --fix

이 설정을 사용하면 VS Code에서 Black을 기본 포맷터로 만들고 Ruff를 유일한 활성 린터로 사용하여 둘 다 실행할 수 있습니다.
저장 시 자동으로 실행됩니다.

5. 조사 결과 및 수정 사항

구성 후 Ruff와 Black은 다음과 같은 몇 가지 문제를 식별했습니다.

  • 줄 길이(E501): Ruff는 처음에 긴 줄을 표시했고 Black은 자동 서식을 지정했습니다.
  • 사용하지 않는 가져오기 및 변수: Ruff는 사용하지 않는 가져오기 및 변수를 여러 개 발견했습니다.
  • 들여쓰기 및 스타일링 일관성: 검정색은 일정한 간격과 들여쓰기를 적용하여 가독성을 높였습니다.

6. 도전

한 가지 주목할만한 과제는 러프와 블랙 사이에 일부 스타일이 호환되지 않는다는 점을 이해하는 것이었습니다. 예:

  • 줄 길이(E501): Ruff는 처음에 88자를 초과하는 긴 줄에 플래그를 지정했으며 Black은 래핑을 통해 처리합니다. 윤곽. 충돌을 방지하기 위해 Ruff의 무시 목록에 E501을 추가했습니다. 그럼에도 불구하고 Ruff는 때때로 E501 오류를 표시했습니다. Black이 예상 중단점을 적용하지 않은 경우. 이러한 불일치는 각 도구를 조정하는 것의 중요성을 강조했습니다. 중복될 수 있는 부분을 구성하고 이해합니다.

7. 배운 교훈

Ruff와 Black을 함께 사용하는 것은 코드 품질을 향상시키는 좋은 방법이었습니다. 제가 배운 내용은 다음과 같습니다.

  • 일관성: Black의 독선적인 스타일은 코드 스타일의 모호성을 줄여줍니다.
  • 자동화: 사전 커밋 후크는 시간을 절약하고 일관된 형식을 보장합니다.
  • 편집기 통합: VS Code 간소화된 개발 내에서 저장 시 실행되도록 Ruff 및 Black을 구성합니다.
  • 호환성: E501과 같은 충돌을 해결하는 방법을 배우면서 도구 구성에 대해 배웠고 도움이 되었습니다. 프로젝트 워크플로우를 미세 조정하세요.

위 내용은 코드 품질을 위한 도구 설정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.