Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Improve TOML placeholder parser error messages

Aperta
#78 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
48/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

Start in hexdoc/utils/deserialize/toml.py, where the traceback shows placeholder expansion reaches _expand_placeholder and raises IndexError. Read the placeholder parsing and expansion flow, then check for related tests in the repository. Done means invalid placeholder references produce a clear parser error instead of this raw index error; no test file is named in the issue.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug

For example, when a placeholder key contains too many parent references, this is the current error message:

─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\cli\app.py:186 in build                   │
│                                                                                                  │
│   183 │   For developers: returns the site path (eg. `/v/latest/main`).                          │
│   184 │   """                                                                                    │
│   185 │                                                                                          │
│ ❱ 186 │   props, pm, book_plugin, plugin = load_common_data(props_file, branch)                  │
│   187 │                                                                                          │
│   188 │   if props.env.hexdoc_subdirectory:                                                      │
│   189 │   │   output_dir /= props.env.hexdoc_subdirectory                                        │
│                                                                                                  │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\cli\utils\load.py:55 in load_common_data  │
│                                                                                                  │
│    52 │   *,                                                                                     │
│    53 │   book: bool = False,                                                                    │
│    54 ) -> tuple[Properties, PluginManager, BookPlugin[Any], ModPlugin]:                         │
│ ❱  55 │   props = Properties.load(props_file)                                                    │
│    56 │   pm = PluginManager(branch, props)                                                      │
│    57 │                                                                                          │
│    58 │   book_plugin = pm.book_plugin(props.book_type)                                          │
│                                                                                                  │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\core\properties.py:175 in load            │
│                                                                                                  │
│   172 │   def load(cls, path: Path) -> Self:                                                     │
│   173 │   │   return cls.load_data(                                                              │
│   174 │   │   │   props_dir=path.parent,                                                         │
│ ❱ 175 │   │   │   data=load_toml_with_placeholders(path),                                        │
│   176 │   │   )                                                                                  │
│   177 │                                                                                          │
│   178 │   @classmethod                                                                           │
│                                                                                                  │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:135 in          │
│ load_toml_with_placeholders                                                                      │
│                                                                                                  │
│   132                                                                                            │
│   133 def load_toml_with_placeholders(path: Path) -> TOMLDict:                                   │
│   134 │   data = tomllib.loads(path.read_text("utf-8"))                                          │
│ ❱ 135 │   fill_placeholders(data)                                                                │
│   136 │   return data                                                                            │
│   137                                                                                            │
│   138                                                                                            │
│                                                                                                  │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:34 in           │
│ fill_placeholders                                                                                │
│                                                                                                  │
│    31                                                                                            │
│    32                                                                                            │
│    33 def fill_placeholders(data: TOMLDict):                                                     │
│ ❱  34 │   _fill_placeholders(data, [data], set())                                                │
│    35                                                                                            │
│    36                                                                                            │
│    37 def _expand_placeholder(                                                                   │
│                                                                                                  │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:130 in          │
│ _fill_placeholders                                                                               │
│                                                                                                  │
│   127 ):                                                                                         │
│   128 │   table = stack[-1]                                                                      │
│   129 │   for key, child in table.items():                                                       │
│ ❱ 130 │   │   _handle_child(data, stack, expanded, key, child, table.__setitem__)                │
│   131                                                                                            │
│   132                                                                                            │
│   133 def load_toml_with_placeholders(path: Path) -> TOMLDict:                                   │
│                                                                                                  │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:113 in          │
│ _handle_child                                                                                    │
│                                                                                                  │
│   110 │   │   case list():                                                                       │
│   111 │   │   │   # handle each item in the list without adding the list to the stack            │
│   112 │   │   │   for i, item in enumerate(value):                                               │
│ ❱ 113 │   │   │   │   _handle_child(data, stack, expanded, i, item, value.__setitem__)           │
│   114 │   │                                                                                      │
│   115 │   │   case dict():                                                                       │
│   116 │   │   │   # recursion!                                                                   │
│                                                                                                  │
│ E:\Projects\Complex-Hex\.venv\Lib\site-packages\hexdoc\utils\deserialize\toml.py:89 in           │
│ _handle_child                                                                                    │
│                                                                                                  │
│    86 │   │   │   # fill the string's placeholders                                               │
│    87 │   │   │   for match in reversed(list(_PLACEHOLDER_RE.finditer(value))):                  │
│    88 │   │   │   │   try:                                                                       │
│ ❱  89 │   │   │   │   │   v = _expand_placeholder(                                               │
│    90 │   │   │   │   │   │   data,                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
IndexError: list index out of range
Lingua principale
Python
Stelle
7
Fork
10
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di hexdoc-dev/hexdoc

Tutte le issue di hexdoc-dev/hexdoc

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.