turbo-editors/turbo-rustpublic Fork 0
main
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-rust.git
git clone ssh://git@rickub.com/turbo-editors/turbo-rust.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

📦 Turbo Rust 713ea5c · on main · k33g · 12h ago
2026-09-01-first-editor.md · 35 lines · 2.8 KBmarkdown
Blame HistoryOpen raw

Handoff — 2026-09-01 — Turbo Rust, first build

State

The editor exists and works. Whole suite green, quality gate PASS at 0/0/0 with complexity 98, binary builds and runs, and completion has been driven against a real rust-analyzer.

Documentation is 33 pages × EN + FR, with a drawio diagram generated from go list.

Everything is uncommitted, on main.

In flight

Nothing.

Next steps

  1. Commit turbo-core first, then this repository. Turbo Rust does not build without the library beside it.
  2. Once turbo-core is tagged, drop the replace directive from go.mod and run make test.
  3. Use it for an afternoon. Nobody has. Everything here is verified by tests and scripted pty runs; the first hour of real editing will find something.
  4. Point the scanner at a large real crate. It has met one demo file and a broad sweep in a test.
  5. Ticket 0001 in turbo-editors/.tickets is the user's to close.

Open questions / blockers

None.

Watch out for

  • rustup's shim is not rust-analyzer. ~/.cargo/bin/rust-analyzer exists on every machine that has rustup and fails with Unknown binary 'rust-analyzer' in official toolchain only when run. Anything that checks for the server must execute it, not stat it — the end-to-end test lost thirty seconds to this before it was understood.
  • rust-analyzer answers an empty list until it has loaded the workspace, and says so with a $/progress notification this client does not read. The end-to-end test asks again on a loop for up to ninety seconds. Do not "simplify" that into a single request.
  • Two of the scanner's dispatch cases must come before the generic ones. : is an operator rune and . is a punctuation rune, so :: and .. are claimed explicitly first. Moving them down the switch silently changes their colour.
  • A lifetime must be emitted as one span. It was two — the name, then the quote before it — and the editor draws spans in order and assumes they do not overlap, so it painted wrongly rather than failing. TestSpansOnALineAreOrderedAndDoNotOverlap is what caught it.
  • reference_test.go holds the documentation to the code. If you change what the scanner colours, that test tells you which sentence in docs/*/reference/languages.md you have just made false. The MAX_SIZE case documents a limitation on purpose — do not "fix" it without also fixing the sentence.
  • The templates are tested here, not in the library. turbo-core tests that Create writes the profile's template; that Build runs cargo build and that no template still says turbo-go is this repository's test.
  • 02-release.publish.sh and 04-release.upload-binaries.sh have never been run, here or in turbo-go. They publish to Codeberg. 02 also still has no set -e, and must not simply be given one: its read -r -d '' DATA idiom always exits non-zero by design.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Handoff — 2026-09-01 — Turbo Rust, first build

## State

The editor exists and works. Whole suite green, quality gate PASS at 0/0/0 with complexity 98, binary builds and runs, and completion has been driven against a real rust-analyzer.

Documentation is 33 pages × EN + FR, with a drawio diagram generated from `go list`.

Everything is **uncommitted**, on `main`.

## In flight

Nothing.

## Next steps

1. **Commit turbo-core first**, then this repository. Turbo Rust does not build without the library beside it.
2. **Once turbo-core is tagged**, drop the `replace` directive from `go.mod` and run `make test`.
3. **Use it for an afternoon.** Nobody has. Everything here is verified by tests and scripted pty runs; the first hour of real editing will find something.
4. **Point the scanner at a large real crate.** It has met one demo file and a broad sweep in a test.
5. Ticket 0001 in `turbo-editors/.tickets` is the user's to close.

## Open questions / blockers

None.

## Watch out for

- **rustup's shim is not rust-analyzer.** `~/.cargo/bin/rust-analyzer` exists on every machine that has rustup and fails with `Unknown binary 'rust-analyzer' in official toolchain` only when run. Anything that checks for the server must execute it, not stat it — the end-to-end test lost thirty seconds to this before it was understood.
- **rust-analyzer answers an empty list until it has loaded the workspace**, and says so with a `$/progress` notification this client does not read. The end-to-end test asks again on a loop for up to ninety seconds. Do not "simplify" that into a single request.
- **Two of the scanner's dispatch cases must come before the generic ones.** `:` is an operator rune and `.` is a punctuation rune, so `::` and `..` are claimed explicitly first. Moving them down the switch silently changes their colour.
- **A lifetime must be emitted as one span.** It was two — the name, then the quote before it — and the editor draws spans in order and assumes they do not overlap, so it painted wrongly rather than failing. `TestSpansOnALineAreOrderedAndDoNotOverlap` is what caught it.
- **`reference_test.go` holds the documentation to the code.** If you change what the scanner colours, that test tells you which sentence in `docs/*/reference/languages.md` you have just made false. The `MAX_SIZE` case documents a *limitation* on purpose — do not "fix" it without also fixing the sentence.
- **The templates are tested here, not in the library.** turbo-core tests that `Create` writes the profile's template; that Build runs `cargo build` and that no template still says `turbo-go` is this repository's test.
- **`02-release.publish.sh` and `04-release.upload-binaries.sh` have never been run**, here or in turbo-go. They publish to Codeberg. `02` also still has no `set -e`, and must not simply be given one: its `read -r -d '' DATA` idiom always exits non-zero by design.