docs: CellDisplay::value and the dsxq evidence
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
This commit is contained in:
@@ -552,8 +552,39 @@ client over the same grid, and they disagreed by a comma.
|
||||
|
||||
`numeric` and `error` are decided by the server for the same reason: it is
|
||||
the side that knows which it was, and re-deriving client-side is how the two
|
||||
ends drift apart. `CellDisplay` is deliberately not a `CellValue` — by the
|
||||
time a cell reaches a client the number formatting has already happened.
|
||||
ends drift apart. `CellDisplay` is deliberately not *drawn from* a `CellValue`
|
||||
— by the time a cell reaches a client the number formatting has already
|
||||
happened, and `text` is what a renderer paints.
|
||||
|
||||
### `CellDisplay::value` — what `yank` copies (improvise-dsxq)
|
||||
|
||||
The value the host evaluated at this position, the same `Option<CellValue>`
|
||||
that `text` was formatted from: `evaluate_aggregated` over the view's
|
||||
`none_cats` in a pivot grid, `records_value` in a records grid. It exists
|
||||
because the browser's `yy` has to copy what the TUI's `YankCell` copies, and
|
||||
neither string on the cell can be turned back into it:
|
||||
|
||||
- `edit_text` is `CellValue::to_string()`, which writes a non-whole number
|
||||
`{:.4}` — `1.23456789` becomes `1.2346`.
|
||||
- Re-parsing any text with `typed()` turns number-like text into a number —
|
||||
`Text("007")` becomes `Number(7.0)`.
|
||||
- In a pivot grid `edit_text` is the *stored* cell (`get_cell`), so an
|
||||
aggregate or a formula cell has none and yanked nothing at all.
|
||||
|
||||
So the value is **projected**, not re-derived (gotcha 47): a client that
|
||||
wants the value asks for the value. It is kept separate from `edit_text`
|
||||
rather than replacing it, because the two answer different questions — what
|
||||
an editor starts with is a *string*, deliberately the one the TUI's buffer
|
||||
holds, and changing it would change what the TUI's own editor shows.
|
||||
|
||||
It cost `Eq`: `CellValue` holds an `f64`, so `CellDisplay`, `GridCache` and
|
||||
`GridUpdate` are `PartialEq` only. Nothing hashed or `Eq`-bounded them.
|
||||
|
||||
In a records grid the TUI does **not** yank this value: `YankCell` and
|
||||
`PasteCell` resolve the synthetic `(_Index, _Dim)` key, so the TUI yanks
|
||||
`None` and pastes a junk cell into the document (improvise-6p8q). The browser
|
||||
is right there and the TUI is wrong, which is why the lockstep yank test stays
|
||||
on a pivot grid.
|
||||
|
||||
### `AxisFrame` — the grid's frame, and why it is *one* type
|
||||
|
||||
|
||||
Reference in New Issue
Block a user