Ignore typing errors in individual blocks
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
It is already possible to silence errors using # type: ignore on individual lines, and - since #626) also for a whole file.
Additionally it would be nice to ignore errors on individual blocks. Especially on a class/function level when abstracting away an untyped library. For example:
class MyAbstraction:
def __init__(self, url: str) -> None:
self.hostname = url.host # <-- I want this to be caught by the type-checker
def some_call(self) -> int:
# type: ignore
result = api.untyped_call()
return result
def another_large_call(self) -> int:
# type: ignore
result_1 = api.untyped_call_1()
result_2 = api.untyped_call_2()
result = result_1 + result_2
return result
When running mypy in "strict" mode the code will be littered with messages like Call to an untyped function ... in a typed context. Currently the only options are:
- Add
# type: ignoreon each line causing errors by the external library- Disadvantage: Cumbersome (many type-comments needed)
- Advantage: Only the problematic calls are silenced
- Add
# type: ignoreto the file- Disadvantage: Typing errors unrelated to the external library become invisible
- Advantage: Only one line to add
The second option is best used if a module contains only calls to the external library. For new projects this is doable, but older/larger code-bases often need some refactoring for this. And this can be error-prone and seems risky to do only for type-hinting.
Having the option to disable errors on either a class-level or block-level would add a lot of flexibility.
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
L’issue ne nomme aucun fichier, test ou point d’entrée. Commencez par retracer la manière dont mypy gère # type: ignore en strict mode, puis définissez la portée et le comportement de la suppression au niveau de la classe et du bloc ; le travail est considéré comme terminé lorsque les erreurs demandées peuvent être réduites au silence de manière sélective sans masquer les erreurs de typage sans rapport.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers
- 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