mirror of
https://github.com/Twigpine/zero.git
synced 2026-11-08 09:49:34 -10:00
refactor(tui): return source identity from loadAndRender directly
1ce4f96e added loadAndRenderSource and left loadAndRender as a two-value
wrapper. After that change only tests called the wrapper, so make deadcode
newly reported it. Fold the wrapper away: loadAndRender now returns the
rendered text, the source identity, and the error, and its callers take the
value they need. Behavior is unchanged.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2 files changed
+22
-27
No files matched your search
@@ -727,7 +727,8 @@ func (c *fileViewRenderCache) peekRenderOnly(targetPath string, width int, chang
|
||||
// bytes, so the content hash decides freshness. On a matching metadata+hash pair
|
||||
// the highlight/format work is reused (re-formatting only for a new width
|
||||
// variant). It is intended to run from a tea.Cmd / background worker, off the
|
||||
// View path.
|
||||
// View path. It also returns the identity of the source it rendered, which a
|
||||
// later git-sweep revalidation compares against.
|
||||
var errFileViewSuperseded = errors.New("file view request superseded")
|
||||
|
||||
var (
|
||||
@@ -746,7 +747,7 @@ func fileViewSuperseded(liveSeq *atomic.Uint64, seq uint64) bool {
|
||||
return liveSeq != nil && liveSeq.Load() != seq
|
||||
}
|
||||
|
||||
func (c *fileViewRenderCache) loadAndRenderSource(targetPath string, displayPath string, width int, changed map[string]bool, changedFingerprint string, reqGen int, theme tuiTheme, reqSourceRev uint64, liveSeq *atomic.Uint64, seq uint64) (string, fileViewSourceIdentity, error) {
|
||||
func (c *fileViewRenderCache) loadAndRender(targetPath string, displayPath string, width int, changed map[string]bool, changedFingerprint string, reqGen int, theme tuiTheme, reqSourceRev uint64, liveSeq *atomic.Uint64, seq uint64) (string, fileViewSourceIdentity, error) {
|
||||
if fileViewSuperseded(liveSeq, seq) {
|
||||
return "", fileViewSourceIdentity{}, errFileViewSuperseded
|
||||
}
|
||||
@@ -967,12 +968,6 @@ func (c *fileViewRenderCache) loadAndRenderSource(targetPath string, displayPath
|
||||
return rendered, identity, nil
|
||||
}
|
||||
|
||||
// loadAndRender is loadAndRenderSource without the source identity.
|
||||
func (c *fileViewRenderCache) loadAndRender(targetPath string, displayPath string, width int, changed map[string]bool, changedFingerprint string, reqGen int, theme tuiTheme, reqSourceRev uint64, liveSeq *atomic.Uint64, seq uint64) (string, error) {
|
||||
rendered, _, err := c.loadAndRenderSource(targetPath, displayPath, width, changed, changedFingerprint, reqGen, theme, reqSourceRev, liveSeq, seq)
|
||||
return rendered, err
|
||||
}
|
||||
|
||||
// sanitizeRawFileLine strips or transforms raw control characters and terminal escape sequences
|
||||
// when syntax highlighting is bypassed or unavailable, preventing terminal screen corruption.
|
||||
func sanitizeRawFileLine(s string) string {
|
||||
@@ -995,7 +990,7 @@ func sanitizeRawFileLine(s string) string {
|
||||
|
||||
func (c *fileViewRenderCache) getOrRender(targetPath string, displayPath string, width int, changed map[string]bool) string {
|
||||
fingerprint := changedLinesFingerprint(changed)
|
||||
rendered, _ := c.loadAndRender(targetPath, displayPath, width, changed, fingerprint, c.generation(), zeroTheme, 0, nil, 0)
|
||||
rendered, _, _ := c.loadAndRender(targetPath, displayPath, width, changed, fingerprint, c.generation(), zeroTheme, 0, nil, 0)
|
||||
return rendered
|
||||
}
|
||||
|
||||
@@ -1020,7 +1015,7 @@ func loadFileViewCmd(targetPath string, displayPath string, width int, changed m
|
||||
if fileViewSuperseded(liveSeq, seq) {
|
||||
return fileViewLoadedMsg{lifetimeToken: token, seq: seq, requiredSourceRev: reqRev, generation: gen, targetPath: targetPath, displayPath: displayPath, width: width, fingerprint: fingerprint, err: errFileViewSuperseded}
|
||||
}
|
||||
rendered, source, err := defaultFileViewCache.loadAndRenderSource(targetPath, displayPath, width, changed, fingerprint, gen, theme, reqRev, liveSeq, seq)
|
||||
rendered, source, err := defaultFileViewCache.loadAndRender(targetPath, displayPath, width, changed, fingerprint, gen, theme, reqRev, liveSeq, seq)
|
||||
return fileViewLoadedMsg{
|
||||
lifetimeToken: token,
|
||||
seq: seq,
|
||||
|
||||
@@ -2072,7 +2072,7 @@ func TestFileViewCacheHitRespectsLiveSeq(t *testing.T) {
|
||||
defer func() { fileViewBeforeCacheCommit = nil }()
|
||||
target := filepath.Join(dir, name)
|
||||
gen := defaultFileViewCache.generation()
|
||||
_, err := defaultFileViewCache.loadAndRender(target, name, m.fileView.loadedWidth+17, nil, m.fileView.loadedFingerprint, gen, zeroTheme, 0, live, seq)
|
||||
_, _, err := defaultFileViewCache.loadAndRender(target, name, m.fileView.loadedWidth+17, nil, m.fileView.loadedFingerprint, gen, zeroTheme, 0, live, seq)
|
||||
if !errors.Is(err, errFileViewSuperseded) {
|
||||
t.Fatalf("cache-hit put after supersede: err=%v", err)
|
||||
}
|
||||
@@ -2737,7 +2737,7 @@ func TestFileView_SupersededInsideDiskReadAndHighlight(t *testing.T) {
|
||||
}
|
||||
defer func() { fileViewInsideDiskRead = nil }()
|
||||
|
||||
_, err := cache.loadAndRender(filePath, "cancel_test.go", 80, nil, "", 0, theme, 0, &liveSeq, 1)
|
||||
_, _, err := cache.loadAndRender(filePath, "cancel_test.go", 80, nil, "", 0, theme, 0, &liveSeq, 1)
|
||||
if !errors.Is(err, errFileViewSuperseded) {
|
||||
t.Fatalf("expected errFileViewSuperseded on inside-disk-read supersession, got: %v", err)
|
||||
}
|
||||
@@ -2750,7 +2750,7 @@ func TestFileView_SupersededInsideDiskReadAndHighlight(t *testing.T) {
|
||||
}
|
||||
defer func() { fileViewBeforeHighlight = nil }()
|
||||
|
||||
_, err = cache.loadAndRender(filePath, "cancel_test.go", 80, nil, "", 0, theme, 0, &liveSeq, 10)
|
||||
_, _, err = cache.loadAndRender(filePath, "cancel_test.go", 80, nil, "", 0, theme, 0, &liveSeq, 10)
|
||||
if !errors.Is(err, errFileViewSuperseded) {
|
||||
t.Fatalf("expected errFileViewSuperseded on before-highlight supersession, got: %v", err)
|
||||
}
|
||||
@@ -2763,7 +2763,7 @@ func TestFileView_SupersededInsideDiskReadAndHighlight(t *testing.T) {
|
||||
}
|
||||
defer func() { fileViewInsideHighlight = nil }()
|
||||
|
||||
_, err = cache.loadAndRender(filePath, "cancel_test.go", 80, nil, "", 0, theme, 0, &liveSeq, 20)
|
||||
_, _, err = cache.loadAndRender(filePath, "cancel_test.go", 80, nil, "", 0, theme, 0, &liveSeq, 20)
|
||||
if !errors.Is(err, errFileViewSuperseded) {
|
||||
t.Fatalf("expected errFileViewSuperseded on inside-highlight supersession, got: %v", err)
|
||||
}
|
||||
@@ -2964,7 +2964,7 @@ func TestFileViewCacheByteBudget(t *testing.T) {
|
||||
if err := os.WriteFile(path, []byte(payload), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := cache.loadAndRender(path, name, 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
if _, _, err := cache.loadAndRender(path, name, 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
t.Fatalf("load %d: %v", i, err)
|
||||
}
|
||||
}
|
||||
@@ -2993,7 +2993,7 @@ func TestFileViewCacheRefusesOversizedEntry(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cache := newFileViewRenderCache(64, 512)
|
||||
rendered, err := cache.loadAndRender(path, "oversized.txt", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0)
|
||||
rendered, _, err := cache.loadAndRender(path, "oversized.txt", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("load: %v", err)
|
||||
}
|
||||
@@ -3027,7 +3027,7 @@ func TestFileViewCacheEvictionDropsPathRevision(t *testing.T) {
|
||||
|
||||
// Give a a revision, then load it so the entry and its revision coexist.
|
||||
cache.invalidatePath(a)
|
||||
if _, err := cache.loadAndRender(a, "rev_a.txt", 80, nil, "", cache.generation(), zeroTheme, cache.requiredRevision(a), nil, 0); err != nil {
|
||||
if _, _, err := cache.loadAndRender(a, "rev_a.txt", 80, nil, "", cache.generation(), zeroTheme, cache.requiredRevision(a), nil, 0); err != nil {
|
||||
t.Fatalf("load a: %v", err)
|
||||
}
|
||||
cache.mu.Lock()
|
||||
@@ -3038,7 +3038,7 @@ func TestFileViewCacheEvictionDropsPathRevision(t *testing.T) {
|
||||
}
|
||||
|
||||
// Loading b with maxEntries=1 evicts a and must drop a's revision.
|
||||
if _, err := cache.loadAndRender(b, "rev_b.txt", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
if _, _, err := cache.loadAndRender(b, "rev_b.txt", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
t.Fatalf("load b: %v", err)
|
||||
}
|
||||
cache.mu.Lock()
|
||||
@@ -3110,7 +3110,7 @@ func TestFileViewCacheFreshnessBySourceHash(t *testing.T) {
|
||||
}
|
||||
|
||||
cache := newFileViewRenderCache(64, defaultFileViewCacheMaxBytes)
|
||||
first, err := cache.loadAndRender(path, "fresh.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0)
|
||||
first, _, err := cache.loadAndRender(path, "fresh.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("first load: %v", err)
|
||||
}
|
||||
@@ -3125,7 +3125,7 @@ func TestFileViewCacheFreshnessBySourceHash(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
second, err := cache.loadAndRender(path, "fresh.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0)
|
||||
second, _, err := cache.loadAndRender(path, "fresh.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("second load: %v", err)
|
||||
}
|
||||
@@ -3344,7 +3344,7 @@ func TestFileViewLifecycle_RevisionMetadataBounded(t *testing.T) {
|
||||
|
||||
cache := newFileViewRenderCache(defaultFileViewCacheMaxEntries, defaultFileViewCacheMaxBytes)
|
||||
oldRev := cache.invalidatePath(warm)
|
||||
if _, err := cache.loadAndRender(warm, "revision_warm.go", 80, nil, "", cache.generation(), zeroTheme, oldRev, nil, 0); err != nil {
|
||||
if _, _, err := cache.loadAndRender(warm, "revision_warm.go", 80, nil, "", cache.generation(), zeroTheme, oldRev, nil, 0); err != nil {
|
||||
t.Fatalf("warm load: %v", err)
|
||||
}
|
||||
|
||||
@@ -3373,7 +3373,7 @@ func TestFileViewLifecycle_RevisionMetadataBounded(t *testing.T) {
|
||||
// A request captured before the retirement must not reuse the still-resident
|
||||
// entry; it has to re-render under the advanced authority.
|
||||
highlightBefore := cache.stats().HighlightCalls
|
||||
if _, err := cache.loadAndRender(warm, "revision_warm.go", 80, nil, "", cache.generation(), zeroTheme, oldRev, nil, 0); err != nil {
|
||||
if _, _, err := cache.loadAndRender(warm, "revision_warm.go", 80, nil, "", cache.generation(), zeroTheme, oldRev, nil, 0); err != nil {
|
||||
t.Fatalf("stale load: %v", err)
|
||||
}
|
||||
if highlightAfter := cache.stats().HighlightCalls; highlightAfter != highlightBefore+1 {
|
||||
@@ -3401,7 +3401,7 @@ func TestFileViewLifecycle_TruncationStateEquivalence(t *testing.T) {
|
||||
if err := os.Chtimes(filePath, stamp, stamp); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
first, err := defaultFileViewCache.loadAndRender(filePath, name, 80, nil, "", defaultFileViewCache.generation(), zeroTheme, 0, nil, 0)
|
||||
first, _, err := defaultFileViewCache.loadAndRender(filePath, name, 80, nil, "", defaultFileViewCache.generation(), zeroTheme, 0, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("first load: %v", err)
|
||||
}
|
||||
@@ -3417,7 +3417,7 @@ func TestFileViewLifecycle_TruncationStateEquivalence(t *testing.T) {
|
||||
if err := os.Chtimes(filePath, stamp, stamp); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
second, err := defaultFileViewCache.loadAndRender(filePath, name, 80, nil, "", defaultFileViewCache.generation(), zeroTheme, 0, nil, 0)
|
||||
second, _, err := defaultFileViewCache.loadAndRender(filePath, name, 80, nil, "", defaultFileViewCache.generation(), zeroTheme, 0, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("second load: %v", err)
|
||||
}
|
||||
@@ -3432,7 +3432,7 @@ func TestFileViewLifecycle_TruncationStateEquivalence(t *testing.T) {
|
||||
if err := os.Chtimes(filePath, stamp, stamp); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
third, err := defaultFileViewCache.loadAndRender(filePath, name, 80, nil, "", defaultFileViewCache.generation(), zeroTheme, 0, nil, 0)
|
||||
third, _, err := defaultFileViewCache.loadAndRender(filePath, name, 80, nil, "", defaultFileViewCache.generation(), zeroTheme, 0, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatalf("third load: %v", err)
|
||||
}
|
||||
@@ -3471,7 +3471,7 @@ func TestFileViewLifecycle_VariantAccountingConsistency(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
cache := newFileViewRenderCache(64, defaultFileViewCacheMaxBytes)
|
||||
if _, err := cache.loadAndRender(path, "variant_accounting.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
if _, _, err := cache.loadAndRender(path, "variant_accounting.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
t.Fatalf("seed load: %v", err)
|
||||
}
|
||||
|
||||
@@ -3512,7 +3512,7 @@ func TestFileViewLifecycle_VariantAccountingConsistency(t *testing.T) {
|
||||
}
|
||||
|
||||
// A purge detaches every entry the same way.
|
||||
if _, err := cache.loadAndRender(path, "variant_accounting.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
if _, _, err := cache.loadAndRender(path, "variant_accounting.go", 80, nil, "", cache.generation(), zeroTheme, 0, nil, 0); err != nil {
|
||||
t.Fatalf("reload: %v", err)
|
||||
}
|
||||
cache.mu.Lock()
|
||||
|
||||
Reference in new issue
Block a user