Heim > Artikel > Backend-Entwicklung > Einrichten von Tools für die Codequalität
Bei der Entwicklung von ReadmeGenie war es mein Ziel, eine konsistente Codequalität mit einem automatisierten Setup für Linting und Formatierung sicherzustellen. Nachdem ich mehrere Tools in Betracht gezogen hatte, wählte ich Ruff als Linter und Black als Codeformatierer. Obwohl Ruff sowohl Linting als auch Formatierung beherrscht, habe ich mich entschieden, Black als separaten Formatierer einzurichten, um Erfahrungen mit der Konfiguration beider Tools zu sammeln. Im Folgenden erzähle ich, warum ich diese Tools ausgewählt habe, wie ich sie für mein Projekt konfiguriert habe, mit welchen Herausforderungen ich konfrontiert war und welche Lektionen ich dabei gelernt habe.
Ruff ist ein schneller Linter für Python, der verschiedene Linting-Regeln von anderen Linters (wie Flake8 und Pyflakes) unterstützt und erhebliche Leistungsverbesserungen bietet. Es ist hochgradig anpassbar, sodass ich eine Mischung aus Regeln festlegen und gleichzeitig die Kompatibilität mit Schwarz für die Formatierung sicherstellen konnte. Ruffs auf Geschwindigkeit und Erweiterbarkeit ausgelegtes Design ist ideal für Projekte, bei denen die Effizienz im Vordergrund steht, ohne dass die Qualität darunter leidet.
Black ist ein Python-Formatierer, der einen Formatierungsstil strikt durchsetzt und so Diskussionen und Inkonsistenzen beim Codestil reduziert. Während Ruff grundlegende Formatierungsfunktionen bietet, bietet der dedizierte Ansatz von Black einige Vorteile:
Breite Akzeptanz: Schwarz wird häufig verwendet, was die Integration in die meisten Entwicklungsabläufe, insbesondere in Gemeinschaftsprojekten, erleichtert.
Schwarze Dokumentation: https://github.com/psf/black
Um sicherzustellen, dass Ruff und Black nahtlos in ReadmeGenie funktionierten, habe ich sie sowohl in pyproject.toml als auch in
konfiguriert
.pre-commit-config.yaml, das es Entwicklern ermöglicht, Code beim Durchführen von Commits automatisch zu formatieren und zu linten.
Dieses Setup stellt sicher, dass Ruff ausschließlich zum Lintieren und Black zum Formatieren verwendet wird:
# 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
Mithilfe von Pre-Commit-Hooks habe ich .pre-commit-config.yaml so konfiguriert, dass Linting und Formatierung bei jedem Commit erzwungen werden:
# .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
Mit dem obigen Setup können Sie die folgenden Befehle verwenden:
# 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
Diese Befehle wenden Korrekturen auf alle Python-Dateien an und sorgen so für ein einheitliches Design und Qualitätsprüfungen.
Um Ruff und Black beim Speichern zu automatisieren, habe ich die folgende Konfiguration in .vscode/settings.json hinzugefügt:
ruff check . --fix
Dieses Setup macht Black zum Standardformatierer und Ruff zum einzigen aktiven Linter in VS Code, sodass beide ausgeführt werden können
automatisch beim Speichern.
Nach der Konfiguration identifizierten Ruff und Black mehrere Probleme:
Eine besondere Herausforderung bestand darin, zu verstehen, dass einige Stile zwischen Ruff und Black nicht kompatibel sind. Zum Beispiel:
Die gemeinsame Verwendung von Ruff und Black war eine großartige Möglichkeit, die Codequalität zu verbessern. Folgendes habe ich gelernt:
Das obige ist der detaillierte Inhalt vonEinrichten von Tools für die Codequalität. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!