Skip to content

Annotated code cell is dropped when the next annotated cell comes before any list #15215

Open

Description

@mcanouil

Bug description

When two executable code cells with annotations follow each other and no ordered list sits between them, the first cell is dropped from the output.
Its code, its annotation markers and its output are all missing.
Only the second cell, with the list that follows it, is rendered.

I found this while working on Typst code annotations in #14170.
It happens on main for HTML, so it is not specific to Typst.

Steps to reproduce

---
title: Two annotated cells in a row
format: html
code-annotations: true
---

```{r}
first_cell <- 1 # <1>
first_cell
```

```{r}
second_cell <- 2 # <1>
second_cell
```

1. A note.

Actual behavior

The page shows only the second cell.
first_cell does not appear anywhere in the HTML.

Expected behavior

Both cells are rendered.
The note links to the annotation of the second cell, which is the one it sits under.

main (first cell missing) main with the one-line fix below
The rendered page on main: only the second cell, second_cell, with its annotation circle, the note and the output 2. The rendered page with the fix: both cells, first_cell with its output 1, then second_cell with its annotation circle, the note and the output 2.

Cause

In src/resources/filters/quarto-pre/code-annotation.lua, the branch that handles executable cells keeps an annotated cell in pendingCodeCell until the ordered list arrives.
When another annotated cell comes first, the new cell overwrites pendingCodeCell and the first one is never emitted.
The other branches, such as the one for plain code blocks, call flushPending() before they output a block.

A possible fix is to call flushPending() at the top of the if found then branch.
With that line, both cells are rendered, as in the right-hand screenshot.
I have not run the whole test suite with it.

Your environment

  • OS: macOS
  • Quarto: dev build, run with the src/resources of main at 210691f (set with QUARTO_SHARE_PATH), so the Lua filters are those of main.
  • R 4.6.1 with knitr 1.51.

Quarto check output

quarto check
Quarto 99.9.9
[✓] Checking environment information...
      Quarto cache location: /Users/mcanouil/Library/Caches/quarto
      Project: none found (single-file mode)
[✓] Checking versions of quarto binary dependencies...
      Pandoc version 3.10.0: OK
      Dart Sass version 1.101.0: OK
      Deno version 2.7.14: OK
      Typst version 0.15.1: OK
[✓] Checking versions of quarto dependencies......OK
[✓] Checking Quarto installation......OK
      Version: 99.9.9
[✓] Checking tools....................OK
      TinyTeX: v2026.07
      Chrome Headless Shell: (not installed)
      VeraPDF: (not installed)
[✓] Checking LaTeX....................OK
[✓] Checking Chrome Headless....................OK
[✓] Checking basic markdown render....OK
[✓] Checking R installation...........OK
      Version: 4.6.1
      knitr: 1.51
      rmarkdown: 2.31
[✓] Checking Knitr engine render......OK
[✓] Checking Python 3 installation....OK
      Version: 3.9.6
      Jupyter: (None)
[✓] Checking Julia installation...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions