summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-26 08:07:35 +0300
committerPaul Buetow <paul@buetow.org>2025-09-26 08:07:35 +0300
commit439ebb14fa6fb43bfda2e0ee6811c37f96b15ecc (patch)
treeb2d2e4052106cf0dfc8ecdde9673e0b327ee8173 /docs
parent2efcd2c4dda97831058851e8911281d5db5ce1c6 (diff)
Skip chat handling for inline prompts
Diffstat (limited to 'docs')
-rw-r--r--docs/coverage.html96
-rw-r--r--docs/coverage.out6878
2 files changed, 3505 insertions, 3469 deletions
diff --git a/docs/coverage.html b/docs/coverage.html
index 686f831..a1db0c8 100644
--- a/docs/coverage.html
+++ b/docs/coverage.html
@@ -111,7 +111,7 @@
<option value="file27">codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go (88.8%)</option>
- <option value="file28">codeberg.org/snonux/hexai/internal/lsp/handlers_document.go (89.7%)</option>
+ <option value="file28">codeberg.org/snonux/hexai/internal/lsp/handlers_document.go (89.4%)</option>
<option value="file29">codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go (75.0%)</option>
@@ -119,7 +119,7 @@
<option value="file31">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (89.9%)</option>
- <option value="file32">codeberg.org/snonux/hexai/internal/lsp/server.go (85.4%)</option>
+ <option value="file32">codeberg.org/snonux/hexai/internal/lsp/server.go (86.8%)</option>
<option value="file33">codeberg.org/snonux/hexai/internal/lsp/transport.go (73.0%)</option>
@@ -5693,9 +5693,13 @@ func (s *Server) detectAndHandleChat(uri string) <span class="cov7" title="11">{
return
}</span>
<span class="cov7" title="11">suffix, prefixes, _ := s.chatConfig()
+ _, _, openChar, closeChar := s.inlineMarkers()
for i, raw := range d.lines </span><span class="cov10" title="23">{
+ if lineHasInlinePrompt(raw, openChar, closeChar) </span><span class="cov0" title="0">{
+ continue</span>
+ }
// Find last non-space character index
- j := len(raw) - 1
+ <span class="cov10" title="23">j := len(raw) - 1
for j &gt;= 0 </span><span class="cov9" title="20">{
if raw[j] == ' ' || raw[j] == '\t' </span><span class="cov0" title="0">{
j--
@@ -6234,11 +6238,11 @@ func (s *Server) chatWithStats(ctx context.Context, msgs []llm.Message, opts ...
// Inline prompt utilities
-func lineHasInlinePrompt(line string, open, close byte) bool <span class="cov6" title="21">{
+func lineHasInlinePrompt(line string, open, close byte) bool <span class="cov8" title="44">{
if _, _, _, ok := findStrictInlineTag(line, open, close); ok </span><span class="cov3" title="4">{
return true
}</span>
- <span class="cov6" title="17">return hasDoubleOpenTrigger(line, open, close)</span>
+ <span class="cov8" title="40">return hasDoubleOpenTrigger(line, open, close)</span>
}
func leadingIndent(line string) string <span class="cov3" title="4">{
@@ -6278,17 +6282,17 @@ func applyIndent(indent, suggestion string) string <span class="cov3" title="4">
// findStrictInlineTag finds &gt;text&gt; (configurable), with no space after the first
// opening marker and no space immediately before the closing marker. Returns the
// text between markers, the start index, the end index just after closing, and ok.
-func findStrictInlineTag(line string, open, close byte) (string, int, int, bool) <span class="cov8" title="52">{
+func findStrictInlineTag(line string, open, close byte) (string, int, int, bool) <span class="cov9" title="75">{
pos := 0
- for pos &lt; len(line) </span><span class="cov9" title="66">{
+ for pos &lt; len(line) </span><span class="cov9" title="87">{
// find opening marker
j := strings.IndexByte(line[pos:], open)
- if j &lt; 0 </span><span class="cov7" title="28">{
+ if j &lt; 0 </span><span class="cov8" title="39">{
return "", 0, 0, false
}</span>
- <span class="cov8" title="38">j += pos
+ <span class="cov8" title="48">j += pos
// ensure single open (not double) and non-space after
- if j+1 &gt;= len(line) || line[j+1] == open || line[j+1] == ' ' </span><span class="cov6" title="21">{
+ if j+1 &gt;= len(line) || line[j+1] == open || line[j+1] == ' ' </span><span class="cov7" title="31">{
pos = j + 1
continue</span>
}
@@ -6310,7 +6314,7 @@ func findStrictInlineTag(line string, open, close byte) (string, int, int, bool)
<span class="cov6" title="15">end := closeIdx + 1
return inner, j, end, true</span>
}
- <span class="cov5" title="8">return "", 0, 0, false</span>
+ <span class="cov6" title="20">return "", 0, 0, false</span>
}
// isBareDoubleSemicolon reports whether the line contains a standalone
@@ -6498,13 +6502,13 @@ func promptRemovalEditsForLine(line string, lineNum int, open, close byte) []Tex
<span class="cov5" title="12">return collectSemicolonMarkers(line, lineNum, open, close)</span>
}
-func hasDoubleOpenTrigger(line string, open, close byte) bool <span class="cov9" title="64">{
+func hasDoubleOpenTrigger(line string, open, close byte) bool <span class="cov9" title="87">{
pos := 0
- for pos &lt; len(line) </span><span class="cov9" title="66">{
+ for pos &lt; len(line) </span><span class="cov9" title="86">{
// look for double-open sequence
dbl := string([]byte{open, open})
j := strings.Index(line[pos:], dbl)
- if j &lt; 0 </span><span class="cov8" title="42">{
+ if j &lt; 0 </span><span class="cov9" title="62">{
return false
}</span>
<span class="cov7" title="24">j += pos
@@ -6529,7 +6533,7 @@ func hasDoubleOpenTrigger(line string, open, close byte) bool <span class="cov9"
}
<span class="cov5" title="10">return true</span>
}
- <span class="cov3" title="4">return false</span>
+ <span class="cov4" title="7">return false</span>
}
func collectSemicolonMarkers(line string, lineNum int, open, close byte) []TextEdit <span class="cov6" title="14">{
@@ -6774,11 +6778,11 @@ func (s *Server) currentLLMClient() llm.Client <span class="cov8" title="199">{
return s.llmClient
}</span>
-func (s *Server) currentConfig() appconfig.App <span class="cov10" title="409">{
- if s.configStore != nil </span><span class="cov3" title="4">{
+func (s *Server) currentConfig() appconfig.App <span class="cov10" title="420">{
+ if s.configStore != nil </span><span class="cov3" title="5">{
return s.configStore.Snapshot()
}</span>
- <span class="cov9" title="405">s.mu.RLock()
+ <span class="cov9" title="415">s.mu.RLock()
defer s.mu.RUnlock()
return s.cfg</span>
}
@@ -6848,25 +6852,25 @@ func (s *Server) completionThrottle() time.Duration <span class="cov6" title="41
<span class="cov2" title="3">return time.Duration(cfg.CompletionThrottleMs) * time.Millisecond</span>
}
-func (s *Server) inlineMarkers() (open string, close string, openChar byte, closeChar byte) <span class="cov7" title="88">{
+func (s *Server) inlineMarkers() (open string, close string, openChar byte, closeChar byte) <span class="cov7" title="99">{
cfg := s.currentConfig()
open = strings.TrimSpace(cfg.InlineOpen)
- if open == "" </span><span class="cov0" title="0">{
+ if open == "" </span><span class="cov2" title="2">{
open = "&gt;"
}</span>
- <span class="cov7" title="88">close = strings.TrimSpace(cfg.InlineClose)
- if close == "" </span><span class="cov0" title="0">{
+ <span class="cov7" title="99">close = strings.TrimSpace(cfg.InlineClose)
+ if close == "" </span><span class="cov2" title="2">{
close = "&gt;"
}</span>
- <span class="cov7" title="88">openChar = '&gt;'
- if len(open) &gt; 0 </span><span class="cov7" title="88">{
+ <span class="cov7" title="99">openChar = '&gt;'
+ if len(open) &gt; 0 </span><span class="cov7" title="99">{
openChar = open[0]
}</span>
- <span class="cov7" title="88">closeChar = '&gt;'
- if len(close) &gt; 0 </span><span class="cov7" title="88">{
+ <span class="cov7" title="99">closeChar = '&gt;'
+ if len(close) &gt; 0 </span><span class="cov7" title="99">{
closeChar = close[0]
}</span>
- <span class="cov7" title="88">return open, close, openChar, closeChar</span>
+ <span class="cov7" title="99">return open, close, openChar, closeChar</span>
}
func (s *Server) chatConfig() (suffix string, prefixes []string, suffixChar byte) <span class="cov6" title="46">{
@@ -7051,7 +7055,7 @@ func New(cfg appconfig.App) *Store <span class="cov4" title="13">{
}</span>
// Snapshot returns the current configuration snapshot. Callers must treat it as read-only.
-func (s *Store) Snapshot() appconfig.App <span class="cov3" title="6">{
+func (s *Store) Snapshot() appconfig.App <span class="cov3" title="7">{
s.mu.RLock()
defer s.mu.RUnlock()
return s.cfg
@@ -7220,9 +7224,9 @@ import (
"golang.org/x/sys/unix"
)
-func tryLockFile(fd uintptr) error <span class="cov10" title="231">{
- if err := unix.Flock(int(fd), unix.LOCK_EX|unix.LOCK_NB); err != nil </span><span class="cov9" title="154">{
- if errors.Is(err, unix.EWOULDBLOCK) </span><span class="cov9" title="154">{
+func tryLockFile(fd uintptr) error <span class="cov10" title="199">{
+ if err := unix.Flock(int(fd), unix.LOCK_EX|unix.LOCK_NB); err != nil </span><span class="cov9" title="122">{
+ if errors.Is(err, unix.EWOULDBLOCK) </span><span class="cov9" title="122">{
return errLockWouldBlock
}</span>
<span class="cov0" title="0">return err</span>
@@ -7390,30 +7394,30 @@ func Update(ctx context.Context, provider, model string, sentBytes, recvBytes in
func acquireFileLock(ctx context.Context, f *os.File) (func() error, error) <span class="cov5" title="77">{
fd := f.Fd()
- for </span><span class="cov6" title="231">{
+ for </span><span class="cov5" title="199">{
err := tryLockFile(fd)
if err == nil </span><span class="cov5" title="77">{
return func() error </span><span class="cov5" title="77">{ return unlockFile(fd) }</span>, nil
}
- <span class="cov5" title="154">if errors.Is(err, errLockWouldBlock) </span><span class="cov5" title="154">{
+ <span class="cov5" title="122">if errors.Is(err, errLockWouldBlock) </span><span class="cov5" title="122">{
select </span>{
case &lt;-ctx.Done():<span class="cov0" title="0">
return nil, ctx.Err()</span>
- case &lt;-time.After(5 * time.Millisecond):<span class="cov5" title="154"></span>
+ case &lt;-time.After(5 * time.Millisecond):<span class="cov5" title="122"></span>
}
- <span class="cov5" title="154">continue</span>
+ <span class="cov5" title="122">continue</span>
}
<span class="cov0" title="0">return nil, err</span>
}
}
// Snapshot reads and aggregates events within the configured window.
-func TakeSnapshot() (Snapshot, error) <span class="cov5" title="69">{
+func TakeSnapshot() (Snapshot, error) <span class="cov4" title="69">{
dir, err := CacheDir()
if err != nil </span><span class="cov0" title="0">{
return Snapshot{}, err
}</span>
- <span class="cov5" title="69">path := filepath.Join(dir, fileName)
+ <span class="cov4" title="69">path := filepath.Join(dir, fileName)
b, err := os.ReadFile(path)
if err != nil </span><span class="cov0" title="0">{
if errors.Is(err, os.ErrNotExist) </span><span class="cov0" title="0">{
@@ -7421,30 +7425,30 @@ func TakeSnapshot() (Snapshot, error) <span class="cov5" title="69">{
}</span>
<span class="cov0" title="0">return Snapshot{}, err</span>
}
- <span class="cov5" title="69">var sf File
+ <span class="cov4" title="69">var sf File
if err := json.Unmarshal(b, &amp;sf); err != nil </span><span class="cov0" title="0">{
return Snapshot{}, err
}</span>
- <span class="cov5" title="69">win := time.Duration(sf.WindowSeconds) * time.Second
+ <span class="cov4" title="69">win := time.Duration(sf.WindowSeconds) * time.Second
if win &lt;= 0 </span><span class="cov0" title="0">{
win = Window()
- }</span> else<span class="cov5" title="69"> {
+ }</span> else<span class="cov4" title="69"> {
SetWindow(win) // align process with file window if changed elsewhere
}</span>
- <span class="cov5" title="69">cutoff := time.Now().Add(-win)
+ <span class="cov4" title="69">cutoff := time.Now().Add(-win)
snap := Snapshot{Providers: make(map[string]ProviderEntry), Window: win}
- for _, ev := range sf.Events </span><span class="cov10" title="10992">{
+ for _, ev := range sf.Events </span><span class="cov10" title="14622">{
if ev.TS.Before(cutoff) </span><span class="cov0" title="0">{
continue</span>
}
- <span class="cov10" title="10992">snap.Global.Reqs++
+ <span class="cov10" title="14622">snap.Global.Reqs++
snap.Global.Sent += ev.Sent
snap.Global.Recv += ev.Recv
pe := snap.Providers[ev.Provider]
if pe.Models == nil </span><span class="cov6" title="465">{
pe.Models = make(map[string]Counters)
}</span>
- <span class="cov10" title="10992">pe.Totals.Reqs++
+ <span class="cov10" title="14622">pe.Totals.Reqs++
pe.Totals.Sent += ev.Sent
pe.Totals.Recv += ev.Recv
mc := pe.Models[ev.Model]
@@ -7454,11 +7458,11 @@ func TakeSnapshot() (Snapshot, error) <span class="cov5" title="69">{
pe.Models[ev.Model] = mc
snap.Providers[ev.Provider] = pe</span>
}
- <span class="cov5" title="69">mins := win.Minutes()
+ <span class="cov4" title="69">mins := win.Minutes()
if mins &lt;= 0 </span><span class="cov0" title="0">{
mins = 0.001
}</span>
- <span class="cov5" title="69">snap.RPM = float64(snap.Global.Reqs) / mins
+ <span class="cov4" title="69">snap.RPM = float64(snap.Global.Reqs) / mins
return snap, nil</span>
}
diff --git a/docs/coverage.out b/docs/coverage.out
index 5cbda3d..278ee5d 100644
--- a/docs/coverage.out
+++ b/docs/coverage.out
@@ -1578,92 +1578,94 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:76.43,79.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.2,80.27 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,94.30 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:94.30,97.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.14,98.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.39,100.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.4,102.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,104.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.12,105.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.19,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:111.3,111.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:111.31,112.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,117.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:117.19,118.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.3,122.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.17,124.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:124.13,125.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:127.4,129.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.33,130.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.20,132.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,135.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.14,136.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.3,141.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.63,143.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,144.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.80,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:147.3,149.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.66,151.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.17,153.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:154.4,154.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.3,156.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.34,157.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.3,159.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.38,167.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.21,169.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:170.4,172.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:172.18,175.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.4,177.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:177.17,179.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,180.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:183.3,183.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:189.110,191.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.14,193.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.2,206.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:211.96,213.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.14,215.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.2,219.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.31,220.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.53,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.12,224.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.61,227.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,230.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.14,232.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.36,235.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.4,237.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.53,241.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:242.3,242.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:242.12,243.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.3,248.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.2,251.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.26,252.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:252.35,254.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.3,255.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.35,257.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.2,260.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:264.57,266.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.20,268.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.2,270.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.74,272.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.31,273.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.18,275.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.2,279.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:280.21,281.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.10,283.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.91,302.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:302.102,305.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:305.38,307.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.3,308.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:311.2,312.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.68,323.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:326.46,333.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:336.61,351.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:355.59,356.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:356.12,359.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -2291,8 +2293,8 @@ codeberg.org/snonux/hexai/cmd/hexai/main.go:14.13,17.18 3 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:22.2,22.104 1 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:22.104,24.3 1 0
-codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 1
-codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 1
+codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 0
+codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.2,22.79 1 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.79,24.3 1 0
codeberg.org/snonux/hexai/cmd/hexai-tmux-action/main.go:12.13,25.107 9 0
@@ -2633,30 +2635,30 @@ codeberg.org/snonux/hexai/internal/appconfig/config.go:1048.61,1051.3 2 0
codeberg.org/snonux/hexai/internal/appconfig/config.go:1053.2,1053.10 1 0
codeberg.org/snonux/hexai/internal/appconfig/config.go:1053.10,1055.3 1 0
codeberg.org/snonux/hexai/internal/appconfig/config.go:1056.2,1056.13 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:12.32,14.14 2 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:14.14,16.3 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:17.2,17.14 1 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:12.32,14.14 2 3
+codeberg.org/snonux/hexai/internal/editor/editor.go:14.14,16.3 1 1
+codeberg.org/snonux/hexai/internal/editor/editor.go:17.2,17.14 1 3
codeberg.org/snonux/hexai/internal/editor/editor.go:17.14,19.3 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:20.2,20.16 1 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:20.2,20.16 1 3
codeberg.org/snonux/hexai/internal/editor/editor.go:25.49,31.2 5 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:36.54,38.16 2 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:36.54,38.16 2 1
codeberg.org/snonux/hexai/internal/editor/editor.go:38.16,40.3 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:42.2,44.16 3 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:42.2,44.16 3 1
codeberg.org/snonux/hexai/internal/editor/editor.go:44.16,46.3 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:47.2,48.15 2 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:48.15,48.38 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:49.2,49.22 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:49.22,50.45 1 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:47.2,48.15 2 1
+codeberg.org/snonux/hexai/internal/editor/editor.go:48.15,48.38 1 1
+codeberg.org/snonux/hexai/internal/editor/editor.go:49.2,49.22 1 1
+codeberg.org/snonux/hexai/internal/editor/editor.go:49.22,50.45 1 1
codeberg.org/snonux/hexai/internal/editor/editor.go:50.45,53.4 2 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:55.2,55.33 1 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:55.2,55.33 1 1
codeberg.org/snonux/hexai/internal/editor/editor.go:55.33,58.3 2 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:59.2,59.34 1 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:59.2,59.34 1 1
codeberg.org/snonux/hexai/internal/editor/editor.go:59.34,61.3 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:62.2,62.44 1 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:62.2,62.44 1 1
codeberg.org/snonux/hexai/internal/editor/editor.go:62.44,64.3 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:65.2,66.16 2 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:65.2,66.16 2 1
codeberg.org/snonux/hexai/internal/editor/editor.go:66.16,68.3 1 0
-codeberg.org/snonux/hexai/internal/editor/editor.go:69.2,69.42 1 0
+codeberg.org/snonux/hexai/internal/editor/editor.go:69.2,69.42 1 1
codeberg.org/snonux/hexai/internal/hexaiaction/cmdentry.go:27.101,28.18 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/cmdentry.go:28.18,30.3 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/cmdentry.go:32.2,32.90 1 0
@@ -3866,92 +3868,94 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:76.43,79.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.2,80.27 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,94.30 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:94.30,97.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.14,98.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.39,100.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.4,102.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,104.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.12,105.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.19,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:111.3,111.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:111.31,112.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,117.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:117.19,118.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.3,122.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.17,124.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:124.13,125.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:127.4,129.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.33,130.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.20,132.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,135.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.14,136.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.3,141.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.63,143.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,144.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.80,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:147.3,149.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.66,151.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.17,153.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:154.4,154.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.3,156.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.34,157.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.3,159.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.38,167.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.21,169.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:170.4,172.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:172.18,175.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.4,177.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:177.17,179.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,180.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:183.3,183.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:189.110,191.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.14,193.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.2,206.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:211.96,213.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.14,215.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.2,219.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.31,220.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.53,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.12,224.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.61,227.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,230.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.14,232.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.36,235.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.4,237.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.53,241.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:242.3,242.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:242.12,243.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.3,248.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.2,251.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.26,252.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:252.35,254.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.3,255.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.35,257.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.2,260.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:264.57,266.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.20,268.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.2,270.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.74,272.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.31,273.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.18,275.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.2,279.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:280.21,281.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.10,283.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.91,302.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:302.102,305.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:305.38,307.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.3,308.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:311.2,312.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.68,323.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:326.46,333.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:336.61,351.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:355.59,356.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:356.12,359.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
+codeberg.org/snonux/hexai/internal