Add to AST location info for compound exception headers or keywords
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
The location information in the AST for a compound statement spans the whole body.
For example:
>>> src = """with A as cm:
... 1
... 2
... 3
... """
Output:
"Module(body=[With(items=[withitem(context_expr=Name(id='A', ctx=Load(), lineno=1, col_offset=5, end_lineno=1, end_col_offset=6), optional_vars=Name(id='cm', ctx=Store(), lineno=1, col_offset=10, end_lineno=1, end_col_offset=12))], body=[Expr(value=Constant(value=1, lineno=2, col_offset=4, end_lineno=2, end_col_offset=5), lineno=2, col_offset=4, end_lineno=2, end_col_offset=5), Expr(value=Constant(value=2, lineno=3, col_offset=4, end_lineno=3, end_col_offset=5), lineno=3, col_offset=4, end_lineno=3, end_col_offset=5), Expr(value=Constant(value=3, lineno=4, col_offset=4, end_lineno=4, end_col_offset=5), lineno=4, col_offset=4, end_lineno=4, end_col_offset=5)], lineno=1, col_offset=0, end_lineno=4, end_col_offset=5)])"
If __enter__ or __exit__ of the context manager raises an exception, we don't want the location of the exception to span the entire body. Ideally it would be the location of the with keyword (my view) or the entire with x as y statement (@ericsnowcurrently's view). However, we don't have those locations in the AST so currently we hilight the location of the expression that creates the context manager:
>>> class C:
... def __enter__(self): 1/0
... def __exit__(*args): pass
...
>>> with C() as c: pass
...
Traceback (most recent call last):
File "<python-input-11>", line 1, in <module>
with C() as c: pass
~^^
File "<python-input-10>", line 2, in __enter__
def __enter__(self): 1/0
~^~
ZeroDivisionError: division by zero
We have similar issue with except blocks and class definitions.
Can we add location information of the keywords, or of the header of a compound expression, to the AST?
@pablogsal @lysnikolaou
Linked PRs
- gh-129162
Guía de contribución
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.
Línea de trabajo
No se nombran archivos fuente ni pruebas. Empieza revisando el comportamiento de las ubicaciones del AST descrito aquí y en el PR enlazado gh-129162, y después compara los issues relacionados con los bloques except y las definiciones de clases. Se considera terminado cuando los encabezados o las palabras clave de las sentencias compuestas tienen ubicaciones del AST utilizables, sin atribuir las excepciones de los gestores de contexto al cuerpo completo.
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
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 25/100