Feature Request: a secondary error for overrides based on compatibility
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Feature
Apologies if I this has been discussed before. I did search the archives for past issues.
I am porting a legacy project to mypy and have run into several issues with LSP that generate a [override] error as outlined on https://mypy.readthedocs.io/en/stable/common_issues.html#incompatible-overrides
As I've been working on this effort, I've noticed two main situations that generate this issue. I'll use the examples on the docs to illustrate
Given:
from typing import Sequence, List, Iterable
class A:
def test(self, t: Sequence[int]) -> Sequence[str]:
...
1- Most problems are due to a narrowing of the argument, as the docs show
class NarrowerArgument(A):
def test(self, t: List[int]) -> Sequence[str]: # type: ignore[override]
...
2- However, some problems are due to a developer completely breaking the API, such as changing the input variables and types completely:
class WildlyDifferent(A):
def test(self, tt: List[str], foo:int) -> Sequence[str]: # type: ignore[override]
...
Both of these situations generate the same error codes, meaning an ignore for one will ignore the other.
Pitch
I think it would be incredibly useful to people porting legacy code if overrides could be broken down into (at-least) these two types, so they can be triaged and scheduled into sprints accordingly.
When dealing with large legacy projects, these errors are plentiful. While the narrowing of input values for Type Safety needs to be addressed, that need is often secondary to addressing the invocation of a function that uses a wildly different call signature - and has likely missed unit tests and code coverage for several years of API/Library updates.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par les vérifications de compatibilité des remplacements qui émettent l’erreur [override], en utilisant la section incompatible-overrides de la documentation de mypy et les exemples de cette issue. Définissez comment distinguer le resserrement des arguments d’une signature d’appel substantiellement différente, puis ajoutez une couverture montrant que chaque cas reçoit le diagnostic prévu.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100