Add to AST location info for compound exception headers or keywords
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Non vengono indicati file sorgente o test. Inizia esaminando il comportamento delle posizioni dell'AST descritto qui e nel PR collegato gh-129162, quindi confronta le issue correlate ai blocchi except e alle definizioni di classe. Il lavoro è completato quando gli header o le parole chiave delle istruzioni composte hanno posizioni dell'AST utilizzabili, senza attribuire le eccezioni dei context manager all'intero corpo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100