Merge pull request #22610 from uzunkuyruk/fix/telegram-table-row-label-duplicate-bullet

fix(telegram): exclude row-label column from bullet items in table re…
This commit is contained in:
ethernet 2026-05-09 11:47:45 -04:00 committed by GitHub
commit f1f42a7b9f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -180,18 +180,32 @@ def _render_table_block_for_telegram(table_block: list[str]) -> str:
if len(headers) < 2:
return "\n".join(table_block)
# Detect row-label column: present when data rows have one more cell
# than the header row (the row-label column carries no header).
first_data_row = _split_markdown_table_row(table_block[2]) if len(table_block) > 2 else []
has_row_label_col = len(first_data_row) == len(headers) + 1
rendered_rows: list[str] = []
for index, row in enumerate(table_block[2:], start=1):
cells = _split_markdown_table_row(row)
if len(cells) < len(headers):
cells.extend([""] * (len(headers) - len(cells)))
elif len(cells) > len(headers):
cells = cells[: len(headers)]
if has_row_label_col:
# First cell is the row-label (heading); remaining cells align with headers.
heading = cells[0] if cells and cells[0] else f"Row {index}"
data_cells = cells[1:]
else:
# No row-label column: use first non-empty cell as heading.
heading = next((cell for cell in cells if cell), f"Row {index}")
data_cells = cells
# Pad or trim data_cells to match headers length.
if len(data_cells) < len(headers):
data_cells.extend([""] * (len(headers) - len(data_cells)))
elif len(data_cells) > len(headers):
data_cells = data_cells[: len(headers)]
heading = next((cell for cell in cells if cell), f"Row {index}")
rendered_rows.append(f"**{heading}**")
rendered_rows.extend(
f"{header}: {value}" for header, value in zip(headers, cells)
f"{header}: {value}" for header, value in zip(headers, data_cells)
)
return "\n\n".join(rendered_rows)