---
# System prepended metadata

title: Vote autodoc convention for Temper in Markdown

---

# Vote autodoc convention for Temper in Markdown

With regular Temper, `/**...*/` comments get turned into docstrings for the following declaration.

Note the Python translation below includes the text of `f`'s `/**...*/` comment as a docstring for `def f`.

```ts
$ temper repl
$ /** Autodoc comment for f */ let f(x: Int): Int { x + 1 }
interactive#0: void
$ translate(0, "py")
Translated py for interactive#0
  interactive-0000/
    interactive_0000/
      __init__.py: text/python
        import interactive_0000.chunk as _0
        from temper_core import await_safe_to_exit
        await_safe_to_exit()
      chunk.py: text/python
        from builtins import int
        def f(x: 'int') -> 'int':
          'Autodoc comment for f'
          return x + 1
      __init__.py.map: application/json
        { "version": 3, "file": "py/interactive-⋯": [], "names": [], "mappings": "A;A;A" }
      chunk.py.map: application/json
        { "version": 3, "file": "py/interactive-⋯,CAAA;AAAlB;AAAqB,SAAAA,CAAC,AAAD,EAAI" }
interactive#1: void
```

With Temper in markdown, we have no such association.

```md
# function f

*f* returns the successor of its argument.
    let f(

*x* can be any integer but if it's the maximum representible, 
the output will underflow. 
      x: Int
    
    ): Int {
      x + 1
    }
```

This document collects possible approaches to identifying some suffix of the preceding markdown chunk to serve as the docstring for a declaration that lexically follows the end of a markdown chunk.

Please vote for and/or against any or all of the following.
Put a `+` or `-` with your initials after `Votes:`.

For example below, ABC is voting for and DEF is voting against.

```
Votes: +ABC -DEF
```

For the purposes of the rules below, a markdown "paragraph" starts either after a blank line or at the start of a chunk of markdown between code blocks.

## Repeat the name

```md
Not part of the comment

*f* is a function that does a thing.

    let f(): Void { ... }
```

The rule: if a markdown paragraph starts with the declaration name, not as a prefix of another identifier, ignoring common formatting meta-characters, then it and following paragraphs until the declaration are autodoc comments.

The autodoc above would be

> *f* is a function that does a thing.

Votes: +T for italics where we also don't go past headings. (Non-subject-first languages can still say `*f*: ...`.)

Variation 1, initial letter case is ignored:

> `*F* is a function ...`

Variation 2, italics is *required* around the name to avoid collision with, for example, the definite English article "a". 

> `*f* is a function ...` but not `f is a function`.

Variation 3, recognize <code>nym\`...\`</code> conventions.

> <tt>nym\`f\` is a function ...</tt>

Variation 4, require `[f]` syntax for the first term and work to translate `[...]` links to doc cross-references and to eliminate links to the same paragraphs.

> `[f] is a function ...` but not `f is a function ...` but the `[f]` appears as `f` in the doc comment content.

## Haskell doc convention `|` associates forward

```md
Not part of the comment

|*f* is a function that does a thing.

    let f(): Void { ... }
```

The rule: if a markdown paragraph starts with a `|` which is the only one in that line (to distinguish from tables) then it and following paragraphs until the declaration are autodoc comments.

The `|` prefix is not autodoc comment content.

The autodoc above would be

> *f* is a function that does a thing.

Votes:

## Markdown thematic breaks

```md
Not part of the comment

-------------------------------------

*f* is a function that does a thing.

    let f(): Void { ... }
```

[Commonmark](https://spec.commonmark.org/0.31.2/#thematic-breaks) notes:

> A line consisting of optionally up to three spaces of indentation, followed by a sequence of three or more matching `-`, `_`, or `*` characters, each followed optionally by any number of spaces or tabs, forms a **thematic break**.

The rule: if a markdown paragraph follows a thematic break then it and following paragraphs until the declaration are autodoc comments.

The thematic break is excluded from the autodoc comment content.

The autodoc above would be

> *f* is a function that does a thing.

Votes:

Variation 1, also treat HTML comments containing only `-` like `<!--->` as thematic breaks to allow starting an autodoc comment where a visible break would be visually distracting:

> ```md
> Not a part of the doc comment.
>
> <!--->
>
> *f* is a function ...
>
>     let f ...
> ```

## Explicit markers

Some kind of markers indicate that a paragraph has documentation semantics.

````markdown
@function Flobbles the flangestan. This paragraph describes 
the following function.

This paragraph should also be part of the documentation flow.

@param combobulatorCount should be coinverse to the unitary
metric of the wayneshaft

    let flobbler(combobulatorCount: Int): Void {
        flangestan.flobble(2 * combobulatorCount);
    }
````

There might be markdown extensions that make these a bit cleaner. And we can definitely look at syntax other than `@foo`.