python / python/mypy

Type-narrowing of a list item for an inline list multiplied with a type-guard on said item

Abierto
#21,099 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

feature topic-type-narrowing
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Feature

I would like the following to work:

from typing import assert_type

def _(foo: str | None) -> None:
    assert_type(["a", "b", foo] * bool(foo), list[str])

playground url: https://mypy-play.net/?gist=f6454b1662920bc8df00dfe047a80044

To my understanding, this would require 2 things that mypy currently doesn't do as shown by the above playground:

  1. Understanding bool is a truthyness typeguard. ie roughly treating bool(a) as: def bool[T](a: T | |Literal['', False, 0] | None) -> TypeGuard[T]: ...
  2. Doing type-narrowing on list.__mul__ with a type-guard.

Pitch

Let me quote @jaraco directly, as this is a pattern used a lot in his ecosystem (which includes setuptools): https://github.com/jaraco/jaraco.context/pull/16#discussion_r2967882086

I very much prefer to use algebraic expressions over branching logic. The expressiveness of multiplying by a bool is important to the aesthetic of simplicity here.

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el mypy playground enlazado y reproduce el ejemplo de assert_type. Investiga los dos comportamientos solicitados—el estrechamiento por truthiness mediante bool(foo) y el estrechamiento del tipo de elemento de una lista inline multiplicada por ese guard—y considera completado el issue cuando el ejemplo sea aceptado con list[str] como aserción.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
compilers
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.