# MD078 - Executable Quarto chunks should have a label

Aliases: `missing-chunk-labels`

**Flavor:** Quarto only. No-op for every other flavor.

## What this rule does

Flags executable Quarto/RMarkdown code chunks (e.g. ` ```{r} `, ` ```{python} `)
that have neither an inline label nor a `#| label:` hashpipe option.

## Why this matters

Labels are required for:

- Quarto figure and table cross-references (`@fig-foo`, `@tbl-bar`)
- Stable HTML anchors that survive document re-renders
- knitr cache hits across runs
- Useful errors when a specific chunk fails

Unlabeled chunks render fine, but the document silently loses these capabilities.

## Examples

### Correct - inline positional label

```markdown
```{r setup}
library(ggplot2)
```
```

### Correct - inline key label

```markdown
```{r, label=setup}
library(ggplot2)
```
```

### Correct - hashpipe label

```markdown
```{r}
#| label: setup
library(ggplot2)
```
```

### Incorrect

```markdown
```{r}
library(ggplot2)
```
```

## What this rule does not flag

- Plain display code blocks (`` ```r ``, `` ```python ``) - these are non-executable.
- Chunks with hashpipe options other than `label` - the rule only requires a label.

## Automatic fixes

None. A chunk label is a human-chosen identifier; the right value depends on
the chunk's intent and downstream cross-references.

## Related rules

- [MD040 - Fenced code blocks should have a language](md040.md)
- [MD079 - Quarto chunk labels must not contain whitespace](md079.md)
