Repository navigation
Fix what clicking through the seven reading features found - #12
Merged
Merged
Conversation
…s found
A pass over the real app under Xvfb, by mouse, on the clew repo and a
small Python project, turned up these; each is fixed and tested.
- Churn: the most-changed list counted files deleted or renamed since, and
a click on one reported a missing path. `git::churn` keeps the files
that exist under the root now.
- Type map: a name resolved to the first type of that name in the project,
so `impl Platform for Native` drew an edge to an enum, std's `Read` one
to a type alias inside a function, and `Value` everywhere one to the
first `Value`. A name now resolves within its language, to a kind it can
mean (a Rust impl names a trait), in the same file, then the same
folder, else not at all. Types local to a function are no nodes, and a
Rust `type` inside an `impl` is listed as an associated type (it has a
container now) rather than as a module's type.
- Value trace: following a value into a callee read one line of the
declaration and took the first `(` on it — `pub(crate)`'s — so a
wrapped parameter list, or any `pub(crate) fn`, could not be followed.
It reads the declaration from the name on, over up to 32 lines. Lines
read off disk were trimmed while the server's columns are on the raw
line, so closed files were classified at the wrong column, and the
callee's column was shifted twice for open ones: lines are raw now and
each node keeps its indentation. `return f(x)` is "passed to f", not
"returned"; `print(x)` is a call; `x += …` is an assignment even where
the server lists it as a definition. When a traced file changes, each
occurrence follows its line by its text; a line gone is marked changed
and the tab offers to trace again — rows used to jump to stale lines.
- Ask's `changes` tool ignored uncommitted edits: asked what the work in
progress changed, it answered with the last commit. With edits in the
working tree it diffs from where the work started to the working tree
(the branch's merge base, or HEAD on main/master) and says so.
- Glossary: any short all-caps name (`SYSTEM`, `MAX`) was an "acronym". An
acronym is now one the docs spell out — "Debug Adapter Protocol (DAP)"
or "LSP (Language Server Protocol)", initials matching. Rustdoc links
(`[Foo::bar]`, `[text][ref]`) read as their text; the old stripping
could also pair one link's bracket with the next link's. Each section
is capped on its own, so many types no longer hide the modules.
- Export: the glossary section was empty unless the docs index had been
built; the export now starts that build and waits for it (bounded). A
straight run of visits no longer indents one level per visit — the
trail nests only at forks. Free text is escaped and identifiers are code
spans, so `__init__` reads as written. The dialog opens in the project.
- Graph legend: one import-graph legend served every graph ("838 files" on
the type map). It now says what a node and an arrow are for the graph
shown, what colour means with heat on or off, and explains the cycle
and last-run rings where they apply.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WRJ4sDknvQJ86tFvGydgpf
The docs index now carries each file's own doc comment (Rust `//!`, a Python module docstring, Go's package comment). The glossary lists a module term for each file that has one, named the way the language names modules, and finds spelled-out acronyms in it too. This adds a required field to DocFile, so the protocol version moves to 15 with a new wire snapshot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WRJ4sDknvQJ86tFvGydgpf
pyright looks for a function's callers in other files only within its workspace folders. Opened on rootUri alone, it answered every incoming calls request with null, so the LSP-refined call graph lost every cross-file edge and listed called functions as possibly dead. initialize now names the root as the one workspace folder, declares workspace folder support, and answers workspace/workspaceFolders with the same folder. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WRJ4sDknvQJ86tFvGydgpf
When a traced file changes and a row's line now reads differently, the row is still marked changed, but it now moves as far as its nearest re-found neighbour did. Before, it kept its old line number, which after an insertion above pointed at an unrelated line. The notice now says the marked rows were edited since the trace. An exported notes file no longer has two blank lines after an empty Notes, Bookmarks or Reading trail section. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WRJ4sDknvQJ86tFvGydgpf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two passes over the real app under Xvfb, driven by mouse on the clew repo and on a small Python project, turned up the bugs below. Each one is fixed and has a test.
First pass
typeinside animplis listed as an associated type.pub(crate) fn. Lines read from disk were trimmed, so closed files were classified at the wrong column.return f(x)now counts as "passed to f", andx += …counts as an assignment. When a traced file changes, each row follows its line, and the tab offers "trace again".changestool: it ignored uncommitted edits. With edits in the working tree it now diffs from where the work started to the working tree, and says so.Second pass
//!, a Python module docstring, Go's package comment). The glossary defines modules by it and finds spelled-out acronyms in it.DocFilegains a requireddocfield, soPROTOCOL_VERSIONmoves to 15 with a new wire snapshot.rootUrialone. Every incoming-calls request came back null, so called functions were listed as possibly dead.initializenow names the project root as the one workspace folder, and the client answersworkspace/workspaceFolders.Checks run locally
cargo fmt --check, strict clippy on the backend crates, and rustdoc with warnings denied are all clean.🤖 Generated with Claude Code
https://claude.ai/code/session_01WRJ4sDknvQJ86tFvGydgpf
Generated by Claude Code