Refactor parial types to avoid code duplication
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
Currently there is some duplication around partial types:
- Logic in
try_infer_partial_generic_type_from_assignment()essentially duplicates the logic inlined incheck_assignment()forNonepartial types. These two probably can be refactored to the same method if we also updatehandle_partial_var_type()to not special-case partialNonetypes, and instead consistently return a partial type in lvalue context. - Logic in
try_infer_partial_type_from_indexed_assignment()duplicates that intry_infer_partial_type()(there is already a TODO item). This one can be refactored by either pushing the latter a bit down the call stack (closer tocheck_call()), or by generating a syntheticCallExprwith__setitem__and passing it totry_infer_partial_type().
The second item may be something to watch out when implementing support for these:
a = defaultdict(list)
a[0].append('yes')
b = {}
b.setdefault(0, []).append('yes')
c = defaultdict(set)
c[0].add('yes')
d = {}
d.setdefault(0, set()).add('yes')
@JukkaL this is probably not something important, but maybe it makes sense to fix this while we are at it?
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 localiser try_infer_partial_generic_type_from_assignment(), check_assignment(), handle_partial_var_type(), try_infer_partial_type_from_indexed_assignment() et try_infer_partial_type(). Comparez leur gestion des types partiels, puis évaluez les exemples defaultdict et setdefault comme cas de régression ; le travail est terminé lorsque la logique dupliquée est unifiée sans perturber ces scénarios d’inférence.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers, devtools
- Type d'issue
- Refactorisation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 38/100