suchen
HeimBackend-EntwicklungPython-TutorialEinrichten von Tools für die Codequalität

Setting Up Tools for Code Quality

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.


1. Werkzeugauswahl

Warum Ruff?

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.

  • Ruff-Dokumentation: https://github.com/charliermarsh/ruff

Warum Schwarz?

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:

  • Konsistenz: Black erzwingt einen strengen Standardstil, der Debatten über die Codeformatierung minimiert.
  • 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

2. Projekteinrichtung

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.

Konfiguration für Ruff und Black in pyproject.toml

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
  • ignorieren: Schwarz kümmert sich um bestimmte Stile, daher haben wir diese Regeln in Ruff ausgeschlossen.
  • Fix: Ermöglicht Ruff, Probleme nach Möglichkeit zu beheben und die Formatierung Schwarz zu überlassen.

Hinzufügen eines Pre-Commit-Hooks für Ruff und Black

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

3. Ruff und Black über die Befehlszeile ausführen

Mit dem obigen Setup können Sie die folgenden Befehle verwenden:

  • Run 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
  • Lauf Schwarz:
# .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.

4. VS-Code-Integration

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.

5. Erkenntnisse und Korrekturen

Nach der Konfiguration identifizierten Ruff und Black mehrere Probleme:

  • Zeilenlänge (E501): Ruff hat zunächst lange Zeilen markiert, die Black automatisch formatiert hat.
  • Unbenutzte Importe und Variablen: Ruff hat mehrere nicht verwendete Importe und Variablen abgefangen.
  • Einrückung und Stilkonsistenz: Schwarz hat konsistente Abstände und Einrückungen angewendet, um die Lesbarkeit zu verbessern.

6. Herausforderungen

Eine besondere Herausforderung bestand darin, zu verstehen, dass einige Stile zwischen Ruff und Black nicht kompatibel sind. Zum Beispiel:

  • Zeilenlänge (E501): Ruff hat anfangs lange Zeilen mit mehr als 88 Zeichen gekennzeichnet, die Black durch Umbrechen bewältigt Linien. Um Konflikte zu vermeiden, habe ich E501 zu Ruffs Ignorierliste hinzugefügt. Trotzdem meldete Ruff manchmal E501-Fehler wenn Schwarz nicht die erwarteten Breakpoints anwendet. Diese Diskrepanzen unterstrichen, wie wichtig es ist, jedes Werkzeug anzupassen Konfiguration und Verständnis, wo sie sich überschneiden können.

7. Erkenntnisse

Die gemeinsame Verwendung von Ruff und Black war eine großartige Möglichkeit, die Codequalität zu verbessern. Folgendes habe ich gelernt:

  • Konsistenz: Blacks eigensinniger Stil reduziert Mehrdeutigkeiten im Code-Stil.
  • Automatisierung: Pre-Commit-Hooks sparen Zeit und sorgen für eine konsistente Formatierung.
  • Editor-Integration: Konfigurieren von Ruff und Black für die Ausführung beim Speichern innerhalb der optimierten VS-Code-Entwicklung.
  • Kompatibilität: Als ich lernte, wie man Konflikte wie E501 löst, lernte ich Werkzeugkonfigurationen kennen und hat mir geholfen Feinabstimmung von Projektabläufen.

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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Was sind einige gängige Operationen, die an Python -Arrays ausgeführt werden können?Was sind einige gängige Operationen, die an Python -Arrays ausgeführt werden können?Apr 26, 2025 am 12:22 AM

PythonarraysSupportvariousoperationen: 1) SlicicingExtractsSubsets, 2) Anhang/Erweiterungen, 3) Einfügen von PlaceSelementsatspezifischePositionen, 4) Entfernen von Delettel, 5) Sortieren/ReversingChangesorder und 6) compredewlistenwlists basierte basierte, basierte Zonexistin

In welchen Anwendungsarten werden häufig Numpy -Arrays verwendet?In welchen Anwendungsarten werden häufig Numpy -Arrays verwendet?Apr 26, 2025 am 12:13 AM

NumpyarraysaresessentialForApplicationsRequeeFoughnumericalComputations und Datamanipulation

Wann würden Sie ein Array über eine Liste in Python verwenden?Wann würden Sie ein Array über eine Liste in Python verwenden?Apr 26, 2025 am 12:12 AM

UseanArray.ArrayoveralistinpythonwhendealingwithhomogenousData, Performance-CriticalCode, OrInterfacingwithCcode.1) HomogenousData: ArraysSavemoryWithtypedElements.2) Performance-CriticalCode: ArraySaveMoryWithtypedElements.2) Performance-CriticalCode: ArraysFerbetterPerPterPerProrMtorChorescomeChormericalcoricalomancomeChormericalicalomentorMentumscritorcorements.3) Interf

Werden alle Listenoperationen von Arrays unterstützt und umgekehrt? Warum oder warum nicht?Werden alle Listenoperationen von Arrays unterstützt und umgekehrt? Warum oder warum nicht?Apr 26, 2025 am 12:05 AM

Nein, NOTALLLISTOPERATIONSARESURDEDBYARAYS UNDVICEVERSA.1) ArraysDonotsupportdynamicoperationslikeAppendorinStResizing, die impactSperformance.2) listsDonotguaranteConstantTimeComplexityfordirectAccesslikearraysDo.

Wie können Sie in einer Python -Liste auf Elemente zugreifen?Wie können Sie in einer Python -Liste auf Elemente zugreifen?Apr 26, 2025 am 12:03 AM

ToaccesselementSinapythonlist, verwenden Indexing, Negativindexing, Slicing, Oriteration.1) IndexingStartsat0.2) NegativeIndexingAccessses aus der THEend.3) SlicingExtractSporions.4) itererationSforloopsorenumerate.AlwaySChEckLegthtoavoidIndexerror.

Wie werden Arrays im wissenschaftlichen Computer mit Python verwendet?Wie werden Arrays im wissenschaftlichen Computer mit Python verwendet?Apr 25, 2025 am 12:28 AM

Arraysinpython, besondersvianumpy, arecrucialInScientificComputingFortheirefficience undvertilität.1) Sie haben festgelegt, dass die Fornerikerne, Datenanalyse und Machinelarning.2) Numpy'SimplementationIncensuresFasteroperationsdanpythonlisten.3) Araysensableableableableableableableableableableableableableableableableableableableableableableableableableable

Wie gehen Sie mit verschiedenen Python -Versionen im selben System um?Wie gehen Sie mit verschiedenen Python -Versionen im selben System um?Apr 25, 2025 am 12:24 AM

Sie können verschiedene Python -Versionen mithilfe von Pyenv, Venv und Anaconda verwalten. 1) Verwalten Sie PYENV, um mehrere Python -Versionen zu verwalten: Installieren Sie PyEnv, setzen Sie globale und lokale Versionen. 2) Verwenden Sie VenV, um eine virtuelle Umgebung zu erstellen, um Projektabhängigkeiten zu isolieren. 3) Verwenden Sie Anaconda, um Python -Versionen in Ihrem Datenwissenschaftsprojekt zu verwalten. 4) Halten Sie das System Python für Aufgaben auf Systemebene. Durch diese Tools und Strategien können Sie verschiedene Versionen von Python effektiv verwalten, um den reibungslosen Betrieb des Projekts zu gewährleisten.

Was sind einige Vorteile bei der Verwendung von Numpy -Arrays gegenüber Standard -Python -Arrays?Was sind einige Vorteile bei der Verwendung von Numpy -Arrays gegenüber Standard -Python -Arrays?Apr 25, 2025 am 12:21 AM

NumpyarrayShaveseveraladVantagesOverStandardPythonArrays: 1) SiearemuchfasterDuetoc-basiert, 2) sie istaremoremory-effizient, insbesondere mit mit LaShlargedatasets und 3) sie können sich mit vektorisierten Funktionsformathematical und Statistical opertical opertical opertical operticaloperation, Making

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software