Warn about certain sequences of chained comparisons
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza con el ejemplo de TensorFlow enlazado en tensorflow/python/eager/function.py y revisa la semántica de las comparaciones encadenadas de Python. Compara las restricciones propuestas para pares de operadores con las comprobaciones existentes de pyflakes y, después, define el comportamiento de las advertencias y la cobertura necesaria para las comparaciones encadenadas intencionadamente y las expresiones equivalentes.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I was pointed to this buggy line:
if x is None != y is None:
(For context, Python allows chaining any of the comparison operators ==, !=, is, is not, >, >=, <, <=, in, not in. a OP b OP c is equivalent to a OP b and b OP c except that b is only evaluated once.)
I find it hard to imagine a use case for combining is and != in the same chained comparison, so it would be useful for linters to warn about this and similar patterns.
In my company's internal linter, I implemented a check that disallows all chained comparison pairs except == + ==, is + is, </<= + </<=, and >/>= + >/>=.
It found one false positive where someone had intentionally written == + !=, but I'd argue it's clearer with and:
- value.fullName == existing.fullName != "*"
+ (value.fullName == existing.fullName and value.fullName != "*")
Would pyflakes be interested in a similar check?
- Lenguaje dominante
- Python
- Estrellas
- 1.5k
- Forks
- 205
- Merge medio
- 1 d 2 h
- PR fusionados (30 d)
- 5
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de PyCQA/pyflakes
-
F542 is not a crimeAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
setuptools deprecation warningsAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 52/100
-
Use of await in a function that is not async should be shown as a syntax error by flake8Quizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Todos los issues de PyCQA/pyflakes
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
micropython/micropython#19906 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
FinanceFlash/unvibecode#597 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
TomAnthony/YourOwnWeigh#21 ·
Los mantenedores suelen responder en 1 día
-
[BUG]: Compliance rules never see Unity Catalog views as viewsPosiblemente ocupada @wagnercsantos la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
databrickslabs/ontos#1348 ·
Los mantenedores suelen responder en 3 días
-
Deprecated datetime.utcnow() is called on every log line (DeprecationWarning on Python 3.12+)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 2 días