Project

General

Profile

Development #90625

nouvelle version de pylint

Added by Yann Weber 4 months ago. Updated 3 months ago.

Status:
Fermé
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Start date:
15 May 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

Pylint 3.2.0 se retrouve utilisé dans notre pipeline jenkins.

De nouveaux warnings sont levés, principalement avec l'introduction de possibly-used-before-assignment

En plus :

Pour ce qui est des warnings levés par le nouveau possibly-used-before-assignment la plupart des exemples que j'ai regardé jusqu'à présent sont cohérent et pertinents avec la description du warning : when relying on names after an if/else switch when one branch failed to define the name, raise, or return

Un des faux positifs sur lesquels je suis tombé est https://jenkins.entrouvert.org/job/gitea/job/authentic/job/wip%252F89456-api-client-password/14/pylint/folder.2098948229/source.d2fa48c9-8f86-423a-aace-a8721c3ab184/#116

On a bien "une branche qui échoue a définir TenantMiddleware" à la ligne 44, un if MULTITENANT sans else qui fait l'import, mais le soucis c'est que le warning est levé sur un bout de code qui est dans un if MULTITENANT :/

Une solution pourrait être de désactiver possibly-used-before-assignment dans pylint.rc ?


Related issues

Related to Authentic 2 - Bug #90624: Nouvelle version de pylint qui casse l’intégration continueFermé15 May 2024

Actions
Related to w.c.s. - Development #90582: build, adapter à nouvelle version de pylintFermé14 May 2024

Actions
Related to Authentic 2 - Bug #90834: Nouvelle version de pylint qui casse l’intégration continueFermé21 May 2024

Actions

Associated revisions

Revision 54a067c9 (diff)
Added by Yann Weber 3 months ago

misc: fix pylint 3.2.x warnings (#90625)

With "possibly-used-before-assignment" disabled.

History

#1

Updated by Yann Weber 4 months ago

  • Related to Bug #90624: Nouvelle version de pylint qui casse l’intégration continue added
#2

Updated by Yann Weber 4 months ago

#3

Updated by Robot Gitea 4 months ago

  • Status changed from Nouveau to En cours
  • Assignee set to Yann Weber

Yann Weber (yweber) a ouvert une pull request sur Gitea concernant cette demande :

#4

Updated by Yann Weber 4 months ago

  • Related to Bug #90834: Nouvelle version de pylint qui casse l’intégration continue added
#5

Updated by Robot Gitea 4 months ago

  • Status changed from En cours to Solution proposée
#6

Updated by Robot Gitea 4 months ago

  • Status changed from Solution proposée to En cours

Benjamin Dauvergne (bdauvergne) a relu et demandé des modifications sur une pull request sur Gitea concernant cette demande :

#7

Updated by Yann Weber 4 months ago

Soit quelque chose m'échappe, soit le test possibly-used-before-assignement est cassé/dangereux sur les matchs.

En effet, dans la PR certains if/elif/... ont été remplacé par des match, ça supprimait les warnings. Par acquis de conscience j'ai fait un test pour voir si les match n'étaient pas simplement ignorés silencieusement : malheureusement ça semble être la cas.

Le test :

""" E0606 tests """ 
CHOICES = 'abc'
for choice in CHOICES:

    if choice == 'a':
        RESULT = 'foo'
    elif choice == 'b':
        RESULT = 'bar'
    elif choice == 'c':
        RESULT = 'foobar'
    print(RESULT)

    match choice:
        case 'b':
            RESULT2 = 'rab'
        case 'c':
            RESULT2 = 'raboof'
    print(RESULT2)

Pylint nous dis :

$ pylint /tmp/test.py 
************* Module test
/tmp/test.py:11:10: E0606: Possibly using variable 'RESULT' before assignment (possibly-used-before-assignment)

Non-seulement c'est faux, RESULT sera définie dans 100% des cas. Mais c'est surtout incomplet ! Il y a un cas trivial ou RESULT2 n'est pas définie.

Durant l'écriture du test, je suis aussi tombé sur un "fix" plutôt inquiétant pour cette histoire de "Possibly using variable 'RESULT' before assignment"... L'ajout d'un del RESULT à la fin de la boucle fait disparaître le faux positif. En réalité on dirait qu'il implique la suppression du check sur la variable RESULT !!

""" E0606 tests """ 
CHOICES = 'abc'
for choice in CHOICES:

    if choice == 'b':
        RESULT = 'bar'
    elif choice == 'c':
        RESULT = 'foobar'
    print(RESULT)

    match choice:
        case 'b':
            RESULT2 = 'rab'
        case 'c':
            RESULT2 = 'raboof'
    print(RESULT2)
    del RESULT
$ pylint /tmp/test.py 

-------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 6.15/10, +3.85)

Tout ça pour dire que même si je trouve l'idée de ce nouveau check chouette, il me semble que dans l'état il est presque plus dangereux que pratique.

#9

Updated by Robot Gitea 4 months ago

Yann Weber (yweber) a fermé une pull request sur Gitea concernant cette demande.

#10

Updated by Robot Gitea 4 months ago

Yann Weber (yweber) a ouvert une pull request sur Gitea concernant cette demande :

#11

Updated by Benjamin Dauvergne 4 months ago

Leur analyse statique semble assez mauvaise1, en attendant on peut quand même ajouter les branches else/raise NotImplementedErrror qui manquent.

Sans match dans la cible, il semble ne pas donner de résultat trop faux, et effectivement il ne comprend pas del non plus, en même temps ce n'est pas une construction fréquente.

1 Ils ne semble pas calculer le fixpoint de la visibilité des symboles et semble n'aller que vers l'avant ou alors ils ne calculent pas un flowgraph correct.

#12

Updated by Robot Gitea 4 months ago

  • Status changed from En cours to Solution proposée
#13

Updated by Robot Gitea 4 months ago

  • Status changed from Solution proposée to Solution validée

Benjamin Dauvergne (bdauvergne) a approuvé une pull request sur Gitea concernant cette demande :

#14

Updated by Robot Gitea 3 months ago

  • Status changed from Solution validée to Résolu (à déployer)

Yann Weber (yweber) a mergé une pull request sur Gitea concernant cette demande :

#15

Updated by Transition automatique 3 months ago

  • Status changed from Résolu (à déployer) to Solution déployée
#16

Updated by Transition automatique 25 days ago

Automatic expiration

Also available in: Atom PDF