web-dev-qa-db-fra.com

Erreurs flake8 descriptives dans PyCharm

PyCharm n'a pas prise en charge intégrée de flake8 pour le moment . Mais, flake8 peut être configuré pour fonctionner comme un outil externe.

Parfois, en particulier pour Python nouveaux arrivants, pas tous les flake8 l'avertissement est compréhensible et une clarification supplémentaire est nécessaire.

Nous sommes récemment tombés sur le Flake8Rules project qui tente de décrire chaque avertissement de manière détaillée avec des exemples de support.

Existe-t-il un moyen de combiner PyCharm, flake8 et Flake8Rules pour afficher des avertissements d'analyse de code statique avec des descriptions supplémentaires ou des liens vers le Flake8Rules catalogue?

10
alecxe

C'est définitivement possible.

Une approche consisterait à ajuster le flake8 sortie en utilisant le --format option de ligne de commande pour spécifier les liens http vers le Flake8Rules catalogue:

--format='%(path)s:%(row)d,%(col)d:%(code)s:%(text)s:https://lintlyci.github.io/Flake8Rules/rules/%(code)s.html'

Le problème est alors que la console ou la fenêtre de sortie PyCharm affiche correctement les liens.

Heureusement, nous pouvons le faire en utilisant les plugins - "Awesome Console" pour le terminal et "Console Link" pour la fenêtre de sortie.


Instructions étape par étape

  1. assurez-vous d'avoir flake8 installé dans l'environnement Python actuel
  2. installez le plugin "Awesome Console":
    • aller à PyCharm Preferences -> Plugins -> Browser Repositories...
    • recherchez "Awesome Console" et installez (redémarrage PyCharm requis): enter image description here
  3. configurer "flake8" comme Outil externe :
    • aller à PyCharm Preferences -> Tools -> External Tools -> "+"
    • configurer le chemin d'accès à flake8 aussi bien que $FileDir$/$FileName$ espace réservé pour le répertoire/chemin à traiter: enter image description here

Démo

Supposons maintenant que nous avons créé ce test.py fichier avec quelques violations:

def f(a = 10):
  return a*10

Si nous faisons un clic droit sur un test.py fichier, sélectionnez External Tools -> flake8, c'est la sortie que nous allons obtenir (notez les liens cliquables pour chaque avertissement):

enter image description here

Maintenant, en cas de doute, nous pouvons suivre le lien pour plus de détails sur un avertissement.

Ce n'est qu'une façon de le faire, je serais heureux de savoir s'il existe un moyen plus facile ou meilleur de combiner ces outils et projets.

17
alecxe

Aujourd'hui, je suis également confronté à ce problème bien que la réponse @alecxe soit bonne pour les paramètres d'un projet

Si vous souhaitez définir flake8 globalement, vous pouvez suivre le processus ci-dessous

  1. assurez-vous que flake8 est installé dans votre projet
  2. assurez-vous que le chemin virtualenv est défini dans pycharm
  3. configurer flake8 en tant que fichier externe goto> paramètres> Outils externes> '+'

configurer le chemin enter image description here

Programme - Le chemin vers l'exécutable flake8 $ PyInterpreterDirectory $ est un répertoire où l'interprète Python du projet en cours est mis

Argument - Spécifie quels fichiers et dossiers doivent être vérifiés $ FilePath $

Répertoire de travail - Répertoire racine du projet $ ContentRoot $

6
Somil

À tous ceux qui ont besoin de:

  • exécuter sur des fichiers à l'aide d'un distant python interprète avec SSH
  • qui veulent uniquement flake8 sur les fichiers modifiés concernant l'état de git
  • qui veulent passer tout autre argument flake8 sans douleur

Pour configurer ce type d'outil dans Pycharm:

File | Settings | Tools | Remote SSH External Tools

voir l'écran ci-dessous pour un exemple de configuration: enter image description here

Arguments: -c "flake8 $(git status -s | grep -E '\.py$' | cut -c 4-) --max-line-lengt=120"

Dans mon cas, la chose cruciale était:

  1. utilisez /bin/bash au lieu de flake8 directement
  2. Remplir la section des arguments par -c "whatever args subcommands etc I need here"

Pour référence:

REMARQUE: pour avoir votre flake8 de virtualenv, vous voudrez peut-être spécifier le chemin complet comme: /z/your_virtual_envs/bin/flake8

2
andilabs