feat: show diff hunk scope labels
Show per-side Tree-sitter scope paths inline and as sticky continuation labels. Keep presentation rows out of source coordinates, selections, and edits. Verified: cargo test (949 passed), cargo build, and real PTY smoke covering split/unified, wrapping, both split axes, sticky scrolling, live rename and undo. Size exception: 549 implementation lines added plus deleted, excluding tests and docs. Keep syntax extraction and coordinate-safe rendering together as one working behavior.
This commit is contained in:
@@ -104,6 +104,8 @@ Each buffer has a frontend-owned parser/tree cache. Unchanged revision/path skip
|
||||
|
||||
Diff highlighting lazily owns two instances of the same syntax cache, keyed by the accepted comparison request ID and selected file. Before detects language from the old path when renamed; After uses the new path. Scrolling, focus changes, and explorer toggling reuse parsed spans without copying/reparsing snapshots. A fresh comparison identity prevents stale Working-checkout colors even when labels and paths are unchanged. Closing the view releases snapshot caches. Syntax styles patch foreground/modifiers over diff backgrounds; historical panes never receive live-buffer semantic tokens.
|
||||
|
||||
Scope context is a lazily built row index over the existing primary/injected syntax trees, invalidated by source or grammar changes and warmed by diff updates. Ordinary buffer highlighting does not build it. The frontend's visual-row projection inserts inline/sticky scope labels in wrapped and unwrapped diffs; source alignment and excerpt ranges contain no label rows. Coloring, native selection/caret overlays, and source navigation skip these presentation rows. Before/After labels use their independent trees rather than live-workspace symbol analysis.
|
||||
|
||||
## Clipboard providers
|
||||
|
||||
macOS publishes `public.utf8-plain-text` through the native Pasteboard Manager, checking allocation and OS-status failures before reporting success. Publication is synchronous and avoids per-copy interpreter/process startup; native calls do not have a subprocess deadline. Reads retain fixed JXA/AppKit `NSPasteboardTypeString` access through `osascript`. Both paths preserve literal RTF/EPS text rather than treating it as rich clipboard data. Linux supports Wayland with `wl-paste`/`wl-copy`, or X11 with `xclip`, on PATH with the corresponding display environment. Other platforms report unsupported access. Subprocess-backed access has a two-second deadline and bounded output; failures terminate/reap the process group.
|
||||
|
||||
Reference in New Issue
Block a user