Maison >développement back-end >Tutoriel Python >Configuration d'outils pour la qualité du code
Lors du développement de ReadmeGenie, mon objectif était d'assurer une qualité de code cohérente avec une configuration automatisée pour le peluchage et le formatage. Après avoir envisagé plusieurs outils, j'ai sélectionné Ruff comme linter et Black comme formateur de code. Bien que Ruff puisse également gérer à la fois le peluchage et le formatage, j'ai décidé de configurer Black en tant que formateur distinct pour acquérir de l'expérience avec la configuration des deux outils. Ci-dessous, je vais partager pourquoi j'ai choisi ces outils, comment je les ai configurés pour mon projet, les défis que j'ai rencontrés et les leçons que j'ai apprises en cours de route.
Ruff est un linter rapide pour Python qui prend en charge diverses règles de linting d'autres linters (comme Flake8 et Pyflakes) et offre des améliorations de performances significatives. Il est hautement personnalisable, ce qui m'a permis de spécifier un mélange de règles tout en assurant la compatibilité avec Black pour le formatage. La conception de Ruff en matière de rapidité et d'extensibilité est idéale pour les projets qui privilégient l'efficacité sans sacrifier la qualité.
Black est un formateur Python qui applique strictement un style de formatage, contribuant ainsi à réduire les discussions et les incohérences sur le style du code. Bien que Ruff offre des capacités de formatage de base, l'approche dédiée de Black offre quelques avantages :
Large adoption : Le noir est largement utilisé, ce qui facilite son intégration dans la plupart des flux de travail de développement, en particulier dans les projets collaboratifs.
Documentation noire : https://github.com/psf/black
Pour m'assurer que Ruff et Black fonctionnent parfaitement dans ReadmeGenie, je les ai configurés à la fois dans pyproject.toml et
.pre-commit-config.yaml, permettant aux développeurs de formater et de lint automatiquement le code lors des validations.
Cette configuration garantit que Ruff est utilisé uniquement pour le peluchage et Black pour le formatage :
# 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
À l'aide de hooks de pré-commit, j'ai configuré .pre-commit-config.yaml pour appliquer le peluchage et le formatage à chaque commit :
# .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
Avec la configuration ci-dessus, vous pouvez utiliser les commandes suivantes :
# 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
Ces commandes appliquent des correctifs à tous les fichiers Python, garantissant un style et des contrôles de qualité cohérents.
Pour automatiser Ruff et Black lors de la sauvegarde, j'ai ajouté la configuration suivante dans .vscode/settings.json :
ruff check . --fix
Cette configuration fait de Black le formateur par défaut et de Ruff le seul linter actif dans VS Code, permettant aux deux de s'exécuter
automatiquement lors de l'enregistrement.
Une fois configuré, Ruff et Black ont identifié plusieurs problèmes :
Un défi notable consistait à comprendre que certains styles sont incompatibles entre Ruff et Black. Par exemple :
Utiliser Ruff et Black ensemble a été un excellent moyen d'améliorer la qualité du code. Voici ce que j'ai appris :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!