github / github/codeql

LGTM.com - false positive – too pedantic on Python structural typing / Protocol

Aperta
#6,846 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
false-positive
Lingua principale
CodeQL
Stelle
10.1k
Fork
2.1k
Merge medio
2g 15h
PR unite (30g)
141

Descrizione

LGTM is overly pedantic with Python's ``typing.Protocol``, i.e. structural typing, expecting it to be complete like a regular class.

------------

A ``Protocol`` is often used for type-hints of the *minimum* required functionality. In the false positive, a ``Protocol`` is used to express "can be compared by ``<``"; this is the minimum required to allow sorting:

> [The sort algorithm uses only `<` comparisons between items.](https://docs.python.org/3/library/functions.html#sorted)

> [The sort routines are guaranteed to use `__lt__()` when making comparisons between two objects.](https://docs.python.org/3/howto/sorting.html#odd-and-ends)

So the entire purpose of the ``Protocol`` is just to express the *minimum* not *complete* functionality.

LGTM instead treats this ``Protocol`` as a regular class and warns because it expects the *complete* set of comparison operators.

https://lgtm.com/projects/g/maxfischer2781/asyncstdlib/snapshot/cac1578bed589b6d1d858ec05441edb1a9756407/files/asyncstdlib/_typing.py?sort=name&dir=ASC&mode=heatmap#x5f23fe7abe3304d0:1

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.