summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-06 10:25:36 +0300
committerPaul Buetow <paul@buetow.org>2025-09-06 10:25:36 +0300
commit5be9532cfa630f4aacd8d879c3e4f5cc316da0fa (patch)
tree0a901680fccd1e2703ffdbd9284ccff932be1d67
parent70f1d0e78c57dfa5beae779b3d392b6e6fa44c14 (diff)
feat(lsp): configurable inline/chat triggers; switch inline markers to >text>/>>text>; update docs and example config; tests updated to new triggers and raise LSP coverage to >=85%; chore: remove semicolon legacy; chore(mage): auto-refresh coverage daily if docs/coverage.out is older than 24h
-rw-r--r--AGENTS.md2
-rw-r--r--Magefile.go32
-rw-r--r--PROJECTSTATUS.md4
-rw-r--r--README.md7
-rw-r--r--config.json.example4
-rw-r--r--docs/configuration.md26
-rw-r--r--docs/coverage.html647
-rw-r--r--docs/coverage.out6918
-rw-r--r--docs/usage.md (renamed from docs/usage-examples.md)10
-rw-r--r--internal/appconfig/config.go49
-rw-r--r--internal/hexailsp/run.go4
-rw-r--r--internal/llm/copilot_http_test.go5
-rw-r--r--internal/llm/ollama_test.go8
-rw-r--r--internal/llm/openai_http_test.go8
-rw-r--r--internal/llm/openai_sse_negative_test.go3
-rw-r--r--internal/lsp/codeaction_test.go2
-rw-r--r--internal/lsp/completion_prefix_strip_test.go102
-rw-r--r--internal/lsp/debounce_throttle_more_test.go36
-rw-r--r--internal/lsp/document_test.go27
-rw-r--r--internal/lsp/handlers.go15
-rw-r--r--internal/lsp/handlers_completion.go51
-rw-r--r--internal/lsp/handlers_document.go79
-rw-r--r--internal/lsp/handlers_end_to_end_test.go4
-rw-r--r--internal/lsp/handlers_helpers_test.go56
-rw-r--r--internal/lsp/handlers_test.go78
-rw-r--r--internal/lsp/handlers_utils.go259
-rw-r--r--internal/lsp/helpers_inline_prompt_test.go58
-rw-r--r--internal/lsp/helpers_more_test.go22
-rw-r--r--internal/lsp/init_and_trigger_test.go5
-rw-r--r--internal/lsp/instruction_table_test.go3
-rw-r--r--internal/lsp/llm_stats_test.go11
-rw-r--r--internal/lsp/postprocess_indent_test.go5
-rw-r--r--internal/lsp/provider_native_success_test.go21
-rw-r--r--internal/lsp/server.go40
-rw-r--r--internal/lsp/transport_test.go15
-rw-r--r--internal/lsp/triggers_config_test.go74
36 files changed, 4758 insertions, 3932 deletions
diff --git a/AGENTS.md b/AGENTS.md
index 5c1bbd1..fe3f8ca 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -18,7 +18,7 @@
## Coding Style & Naming Conventions
-- Aim for at least 80% unit test coverage of all source code.
+- Aim for at least 85% unit test coverage of all source code.
- Ensure that all unit tests pass before merging any changes.
- If possible, construct individual methods so that they can be unit tested. But only if it doesn't add too much boilerplate to the code base.
- There should be no source code file larger than 1000 lines. If so, split it up into multiple.
diff --git a/Magefile.go b/Magefile.go
index bf8de52..6acc882 100644
--- a/Magefile.go
+++ b/Magefile.go
@@ -90,6 +90,8 @@ func Install() error {
// printCoverage prints a warning if an existing coverage profile shows total < coverateThreshold.
func printCoverage() {
+ // Ensure the top-level coverage profile is refreshed at least once per day.
+ ensureDailyCoverage(24 * time.Hour)
select {
case coveragePrinted <- struct{}{}:
default:
@@ -117,6 +119,23 @@ func printCoverage() {
}
}
+// ensureDailyCoverage regenerates the main coverage profile when it's missing
+// or older than maxAge. It writes to docs/coverage.out via the Coverage target.
+func ensureDailyCoverage(maxAge time.Duration) {
+ const prof = "docs/coverage.out"
+ st, err := os.Stat(prof)
+ if err == nil {
+ age := time.Since(st.ModTime())
+ if age <= maxAge {
+ return // fresh enough
+ }
+ }
+ // Missing or stale; attempt to refresh. Do not hard-fail builds if coverage fails.
+ if err := Coverage(); err != nil {
+ fmt.Println("[coverage] refresh skipped due to error:", err)
+ }
+}
+
// totalCoveragePercent returns the parsed total percentage from a coverage profile using `go tool cover -func`.
func totalCoveragePercent(profile string) (float64, bool) {
out, err := sh.Output("go", "tool", "cover", "-func="+profile)
@@ -196,16 +215,9 @@ func DevInstall() error {
}
// CoverCheck enforces minimum per-package coverage.
-// Default threshold is 80.0; override with HEXAI_COVER_THRESH.
// Exceptions: any package whose import path contains "/cmd/" and any substring
// provided via HEXAI_COVER_EXCEPT (comma-separated).
func CoverCheck() error {
- threshold := 80.0
- if v := strings.TrimSpace(os.Getenv("HEXAI_COVER_THRESH")); v != "" {
- if f, err := strconv.ParseFloat(v, 64); err == nil {
- threshold = f
- }
- }
except := []string{"/cmd/"}
if v := strings.TrimSpace(os.Getenv("HEXAI_COVER_EXCEPT")); v != "" {
parts := strings.Split(v, ",")
@@ -256,12 +268,12 @@ func CoverCheck() error {
total = 0
}
all = append(all, res{pkg, total})
- if total < threshold {
+ if total < coverageThreshold {
bad = append(bad, res{pkg, total})
}
time.Sleep(10 * time.Millisecond)
}
- fmt.Printf("Per-package coverage (threshold %.1f%%)\n", threshold)
+ fmt.Printf("Per-package coverage (threshold %.1f%%)\n", coverageThreshold)
for _, r := range all {
fmt.Printf("- %s: %.1f%%\n", r.pkg, r.total)
}
@@ -270,7 +282,7 @@ func CoverCheck() error {
for _, r := range bad {
fmt.Printf("- %s: %.1f%%\n", r.pkg, r.total)
}
- return fmt.Errorf("coverage check failed (%d package(s) < %.1f%%)", len(bad), threshold)
+ return fmt.Errorf("coverage check failed (%d package(s) < %.1f%%)", len(bad), coverageThreshold)
}
fmt.Println("All packages meet coverage threshold.")
return nil
diff --git a/PROJECTSTATUS.md b/PROJECTSTATUS.md
index b9d815f..02ed875 100644
--- a/PROJECTSTATUS.md
+++ b/PROJECTSTATUS.md
@@ -2,7 +2,7 @@
## Code quality
-* [/] TODO's in the code to be addressed
+* [X] TODO's in the code to be addressed
* [/] No more than 1000 LOC per source file
* [/] No more than 50 LOC per function
* [/] Each struct type in his own file
@@ -13,7 +13,7 @@
### Improvements
-* [ ] Modify the LLM triggers to be more consistenc. E.g. use >>text here> or >text here> instead of semicolons?
+* [X] Modify the LLM triggers to be more consistenc. E.g. use >>text here> or >text here> instead of semicolons?
* [X] Include unit test coverage reports
* [ ] Change inline triggers to include > to be more consistent with other triggers
* [ ] Use are more stricter linter for auto-generated code (gofumpt i think is such a linter)
diff --git a/README.md b/README.md
index cc15ba4..f9b9864 100644
--- a/README.md
+++ b/README.md
@@ -13,12 +13,10 @@ It has got improved capabilities for Go code understanding (for example, create
* Stand-alone command line tool for LLM interaction
* Support for OpenAI, GitHub Copilot, and Ollama
-AI coded it under human orchestration and supervision following best practices with manual code reviews.
-
## Documentation
* [Configuration guide](docs/configuration.md)
-* [Usage examples](docs/usage-examples.md)
+* [Usage examples](docs/usage.md)
* [Source structure](docs/source-structure.md)
## Build and tasks
@@ -29,6 +27,9 @@ Hexai uses Mage for developer tasks. Install Mage, then run targets like build,
- Build binaries: `mage build` (produces `hexai` and `hexai-lsp`)
- Dev build (+ tests, vet, lint): `mage dev`
- Run tests: `mage test`
+- Run tests with coverage: `go test ./... -cover`
+- In restricted sandboxes/CI (no sockets), skip network-based tests:
+ - `HEXAI_TEST_SKIP_NET=1 go test ./... -cover`
- Install binaries to `GOPATH/bin`: `mage install`
Note: `mage lint` uses `golangci-lint`. Install via `mage devinstall` if needed.
diff --git a/config.json.example b/config.json.example
index d0e6ed7..7a4298c 100644
--- a/config.json.example
+++ b/config.json.example
@@ -8,6 +8,10 @@
"completion_throttle_ms": 0,
"no_disk_io": true,
"trigger_characters": [".", ":", "/", "_", " "],
+ "inline_open": ">",
+ "inline_close": ">",
+ "chat_suffix": ">",
+ "chat_prefixes": ["?", "!", ":", ";"],
"coding_temperature": 0.2,
"provider": "openai",
diff --git a/docs/configuration.md b/docs/configuration.md
index e5e7dfa..3b862af 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -21,6 +21,10 @@ The config file is optional.
"completion_throttle_ms": 0,
"no_disk_io": true,
"trigger_characters": [".", ":", "/", "_", " " ],
+ "inline_open": ">",
+ "inline_close": ">",
+ "chat_suffix": ">",
+ "chat_prefixes": ["?", "!", ":", ";"],
"coding_temperature": 0.2,
"provider": "ollama",
"copilot_model": "gpt-4o-mini",
@@ -47,9 +51,29 @@ Key fields:
- manual_invoke_min_prefix: minimum typed identifier chars required for manual invoke to proceed without structural triggers (0 allows always).
- no_disk_io: avoid reading files from disk when building context.
- trigger_characters: LSP completion trigger characters.
+- inline_open / inline_close: characters that bracket inline prompts (default `>`/`>`). Inline prompts support `>text>` and a double-open variant `>>text>`. Single-character markers are required.
+- chat_suffix / chat_prefixes: in-editor chat triggers (default suffix `>` and prefixes `["?","!",":",";"]`). A line ending with one of these prefixes immediately followed by the suffix triggers a chat reply (e.g., `What?>`). Prefixes must be single characters.
- coding_temperature: optional override for LSP calls.
- provider: `openai` | `copilot` | `ollama`.
+### Trigger customization
+
+Defaults use `>` for inline prompts and chat suffix. You can change them, e.g.:
+
+```json
+{
+ "inline_open": "<",
+ "inline_close": ">",
+ "chat_suffix": "/",
+ "chat_prefixes": ["?", "!"],
+ "trigger_characters": [".", ":", "/", "_", " "]
+}
+```
+
+Notes:
+- `inline_open`/`inline_close` must be single characters; `>>text>` is the double‑open variant.
+- `chat_prefixes` items must be single characters.
+
## Environment overrides
- All config-file options can be overridden by environment variables prefixed with `HEXAI_`.
@@ -59,6 +83,8 @@ Key fields:
- `HEXAI_CODING_TEMPERATURE`
- `HEXAI_COMPLETION_DEBOUNCE_MS`, `HEXAI_COMPLETION_THROTTLE_MS`
- `HEXAI_TRIGGER_CHARACTERS` (comma-separated, e.g., `".,:,_ , "`)
+ - `HEXAI_INLINE_OPEN`, `HEXAI_INLINE_CLOSE`
+ - `HEXAI_CHAT_SUFFIX`, `HEXAI_CHAT_PREFIXES` (comma-separated)
- `HEXAI_OPENAI_MODEL`, `HEXAI_OPENAI_BASE_URL`, `HEXAI_OPENAI_TEMPERATURE`
- `HEXAI_COPILOT_MODEL`, `HEXAI_COPILOT_BASE_URL`, `HEXAI_COPILOT_TEMPERATURE`
- `HEXAI_OLLAMA_MODEL`, `HEXAI_OLLAMA_BASE_URL`, `HEXAI_OLLAMA_TEMPERATURE`
diff --git a/docs/coverage.html b/docs/coverage.html
index df02a90..d940029 100644
--- a/docs/coverage.html
+++ b/docs/coverage.html
@@ -59,7 +59,7 @@
<option value="file1">codeberg.org/snonux/hexai/cmd/hexai/main.go (0.0%)</option>
- <option value="file2">codeberg.org/snonux/hexai/internal/appconfig/config.go (94.6%)</option>
+ <option value="file2">codeberg.org/snonux/hexai/internal/appconfig/config.go (86.9%)</option>
<option value="file3">codeberg.org/snonux/hexai/internal/hexaicli/run.go (91.4%)</option>
@@ -83,21 +83,21 @@
<option value="file13">codeberg.org/snonux/hexai/internal/lsp/document.go (90.1%)</option>
- <option value="file14">codeberg.org/snonux/hexai/internal/lsp/handlers.go (91.3%)</option>
+ <option value="file14">codeberg.org/snonux/hexai/internal/lsp/handlers.go (90.5%)</option>
<option value="file15">codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go (81.2%)</option>
- <option value="file16">codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go (85.1%)</option>
+ <option value="file16">codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go (86.1%)</option>
- <option value="file17">codeberg.org/snonux/hexai/internal/lsp/handlers_document.go (88.9%)</option>
+ <option value="file17">codeberg.org/snonux/hexai/internal/lsp/handlers_document.go (87.4%)</option>
<option value="file18">codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go (75.0%)</option>
<option value="file19">codeberg.org/snonux/hexai/internal/lsp/handlers_init.go (55.6%)</option>
- <option value="file20">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (88.1%)</option>
+ <option value="file20">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (88.2%)</option>
- <option value="file21">codeberg.org/snonux/hexai/internal/lsp/server.go (68.8%)</option>
+ <option value="file21">codeberg.org/snonux/hexai/internal/lsp/server.go (77.9%)</option>
<option value="file22">codeberg.org/snonux/hexai/internal/lsp/transport.go (71.4%)</option>
@@ -216,6 +216,13 @@ type App struct {
TriggerCharacters []string `json:"trigger_characters"`
Provider string `json:"provider"`
+ // Inline prompt trigger characters (default: &gt;text&gt; and &gt;&gt;text&gt;)
+ InlineOpen string `json:"inline_open"`
+ InlineClose string `json:"inline_close"`
+ // In-editor chat triggers (default: suffix "&gt;" after one of [?, !, :, ;])
+ ChatSuffix string `json:"chat_suffix"`
+ ChatPrefixes []string `json:"chat_prefixes"`
+
// Provider-specific options
OpenAIBaseURL string `json:"openai_base_url"`
OpenAIModel string `json:"openai_model"`
@@ -249,12 +256,17 @@ func newDefaultConfig() App <span class="cov5" title="9">{
ManualInvokeMinPrefix: 0,
CompletionDebounceMs: 200,
CompletionThrottleMs: 0,
+ // Inline/chat trigger defaults
+ InlineOpen: "&gt;",
+ InlineClose: "&gt;",
+ ChatSuffix: "&gt;",
+ ChatPrefixes: []string{"?", "!", ":", ";"},
}
}</span>
// Load reads configuration from a file and merges with defaults.
// It respects the XDG Base Directory Specification.
-func Load(logger *log.Logger) App <span class="cov5" title="8">{
+func Load(logger *log.Logger) App <span class="cov4" title="8">{
cfg := newDefaultConfig()
if logger == nil </span><span class="cov3" title="3">{
return cfg // Return defaults if no logger is provided (e.g. in tests)
@@ -331,12 +343,24 @@ func (a *App) mergeBasics(other *App) <span class="cov3" title="4">{
}</span>
<span class="cov3" title="4">if other.CompletionDebounceMs &gt; 0 </span><span class="cov3" title="3">{ a.CompletionDebounceMs = other.CompletionDebounceMs }</span>
<span class="cov3" title="4">if other.CompletionThrottleMs &gt; 0 </span><span class="cov3" title="3">{ a.CompletionThrottleMs = other.CompletionThrottleMs }</span>
- <span class="cov3" title="4">if len(other.TriggerCharacters) &gt; 0 </span><span class="cov3" title="3">{
- a.TriggerCharacters = slices.Clone(other.TriggerCharacters)
- }</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.Provider); s != "" </span><span class="cov3" title="4">{
- a.Provider = s
- }</span>
+ <span class="cov3" title="4">if len(other.TriggerCharacters) &gt; 0 </span><span class="cov3" title="3">{
+ a.TriggerCharacters = slices.Clone(other.TriggerCharacters)
+ }</span>
+ <span class="cov3" title="4">if s := strings.TrimSpace(other.InlineOpen); s != "" </span><span class="cov0" title="0">{
+ a.InlineOpen = s
+ }</span>
+ <span class="cov3" title="4">if s := strings.TrimSpace(other.InlineClose); s != "" </span><span class="cov0" title="0">{
+ a.InlineClose = s
+ }</span>
+ <span class="cov3" title="4">if s := strings.TrimSpace(other.ChatSuffix); s != "" </span><span class="cov0" title="0">{
+ a.ChatSuffix = s
+ }</span>
+ <span class="cov3" title="4">if len(other.ChatPrefixes) &gt; 0 </span><span class="cov0" title="0">{
+ a.ChatPrefixes = slices.Clone(other.ChatPrefixes)
+ }</span>
+ <span class="cov3" title="4">if s := strings.TrimSpace(other.Provider); s != "" </span><span class="cov3" title="4">{
+ a.Provider = s
+ }</span>
}
// mergeProviderFields merges per-provider configuration.
@@ -393,7 +417,7 @@ func loadFromEnv(logger *log.Logger) *App <span class="cov4" title="5">{
var any bool
// helpers
- getenv := func(k string) string </span><span class="cov10" title="100">{ return strings.TrimSpace(os.Getenv(k)) }</span>
+ getenv := func(k string) string </span><span class="cov10" title="120">{ return strings.TrimSpace(os.Getenv(k)) }</span>
<span class="cov4" title="5">parseInt := func(k string) (int, bool) </span><span class="cov7" title="35">{
v := getenv(k)
if v == "" </span><span class="cov7" title="28">{ return 0, false }</span>
@@ -449,6 +473,19 @@ func loadFromEnv(logger *log.Logger) *App <span class="cov4" title="5">{
}
<span class="cov1" title="1">any = true</span>
}
+ <span class="cov4" title="5">if s := getenv("HEXAI_INLINE_OPEN"); s != "" </span><span class="cov0" title="0">{ out.InlineOpen = s; any = true }</span>
+ <span class="cov4" title="5">if s := getenv("HEXAI_INLINE_CLOSE"); s != "" </span><span class="cov0" title="0">{ out.InlineClose = s; any = true }</span>
+ <span class="cov4" title="5">if s := getenv("HEXAI_CHAT_SUFFIX"); s != "" </span><span class="cov0" title="0">{ out.ChatSuffix = s; any = true }</span>
+ <span class="cov4" title="5">if s := getenv("HEXAI_CHAT_PREFIXES"); s != "" </span><span class="cov0" title="0">{
+ parts := strings.Split(s, ",")
+ out.ChatPrefixes = nil
+ for _, p := range parts </span><span class="cov0" title="0">{
+ if t := strings.TrimSpace(p); t != "" </span><span class="cov0" title="0">{
+ out.ChatPrefixes = append(out.ChatPrefixes, t)
+ }</span>
+ }
+ <span class="cov0" title="0">any = true</span>
+ }
<span class="cov4" title="5">if s := getenv("HEXAI_PROVIDER"); s != "" </span><span class="cov1" title="1">{
out.Provider = s; any = true
}</span>
@@ -737,6 +774,10 @@ func makeServerOptions(cfg appconfig.App, logContext bool, client llm.Client) ls
ManualInvokeMinPrefix: cfg.ManualInvokeMinPrefix,
CompletionDebounceMs: cfg.CompletionDebounceMs,
CompletionThrottleMs: cfg.CompletionThrottleMs,
+ InlineOpen: cfg.InlineOpen,
+ InlineClose: cfg.InlineClose,
+ ChatSuffix: cfg.ChatSuffix,
+ ChatPrefixes: cfg.ChatPrefixes,
}
}</span>
</pre>
@@ -2088,9 +2129,9 @@ func (s *Server) handle(req Request) <span class="cov2" title="2">{
// Preference order on each line: strict ;text; marker (no inner spaces), then
// a line comment (//, #, --). Returns the instruction string and the selection
// text cleaned of the matched instruction marker or comment.
-func instructionFromSelection(sel string) (string, string) <span class="cov4" title="3">{
+func instructionFromSelection(sel string) (string, string) <span class="cov3" title="3">{
lines := splitLines(sel)
- for idx, line := range lines </span><span class="cov4" title="3">{
+ for idx, line := range lines </span><span class="cov3" title="3">{
if instr, cleaned, ok := findFirstInstructionInLine(line); ok &amp;&amp; strings.TrimSpace(instr) != "" </span><span class="cov1" title="1">{
lines[idx] = cleaned
return instr, strings.Join(lines, "\n")
@@ -2108,7 +2149,7 @@ func instructionFromSelection(sel string) (string, string) <span class="cov4" ti
// - // text
// - # text
// - -- text
-func findFirstInstructionInLine(line string) (instr string, cleaned string, ok bool) <span class="cov9" title="22">{
+func findFirstInstructionInLine(line string) (instr string, cleaned string, ok bool) <span class="cov8" title="22">{
type cand struct {
start, end int
text string
@@ -2117,7 +2158,7 @@ func findFirstInstructionInLine(line string) (instr string, cleaned string, ok b
if t, l, r, ok := findStrictSemicolonTag(line); ok </span><span class="cov5" title="6">{
cands = append(cands, cand{start: l, end: r, text: t})
}</span>
- <span class="cov9" title="22">if i := strings.Index(line, "/*"); i &gt;= 0 </span><span class="cov2" title="2">{
+ <span class="cov8" title="22">if i := strings.Index(line, "/*"); i &gt;= 0 </span><span class="cov2" title="2">{
if j := strings.Index(line[i+2:], "*/"); j &gt;= 0 </span><span class="cov2" title="2">{
start := i
end := i + 2 + j + 2
@@ -2125,7 +2166,7 @@ func findFirstInstructionInLine(line string) (instr string, cleaned string, ok b
cands = append(cands, cand{start: start, end: end, text: text})
}</span>
}
- <span class="cov9" title="22">if i := strings.Index(line, "&lt;!--"); i &gt;= 0 </span><span class="cov2" title="2">{
+ <span class="cov8" title="22">if i := strings.Index(line, "&lt;!--"); i &gt;= 0 </span><span class="cov2" title="2">{
if j := strings.Index(line[i+4:], "--&gt;"); j &gt;= 0 </span><span class="cov2" title="2">{
start := i
end := i + 4 + j + 3
@@ -2133,16 +2174,16 @@ func findFirstInstructionInLine(line string) (instr string, cleaned string, ok b
cands = append(cands, cand{start: start, end: end, text: text})
}</span>
}
- <span class="cov9" title="22">if i := strings.Index(line, "//"); i &gt;= 0 </span><span class="cov4" title="4">{
+ <span class="cov8" title="22">if i := strings.Index(line, "//"); i &gt;= 0 </span><span class="cov4" title="4">{
cands = append(cands, cand{start: i, end: len(line), text: strings.TrimSpace(line[i+2:])})
}</span>
- <span class="cov9" title="22">if i := strings.Index(line, "#"); i &gt;= 0 </span><span class="cov2" title="2">{
+ <span class="cov8" title="22">if i := strings.Index(line, "#"); i &gt;= 0 </span><span class="cov2" title="2">{
cands = append(cands, cand{start: i, end: len(line), text: strings.TrimSpace(line[i+1:])})
}</span>
- <span class="cov9" title="22">if i := strings.Index(line, "--"); i &gt;= 0 </span><span class="cov4" title="4">{
+ <span class="cov8" title="22">if i := strings.Index(line, "--"); i &gt;= 0 </span><span class="cov4" title="4">{
cands = append(cands, cand{start: i, end: len(line), text: strings.TrimSpace(line[i+2:])})
}</span>
- <span class="cov9" title="22">if len(cands) == 0 </span><span class="cov5" title="6">{
+ <span class="cov8" title="22">if len(cands) == 0 </span><span class="cov5" title="6">{
return "", line, false
}</span>
// pick earliest start index
@@ -2251,33 +2292,33 @@ func (s *Server) reply(id json.RawMessage, result any, err *RespError) <span cla
// --- small completion cache (last ~10 entries) ---
-func (s *Server) completionCacheKey(p CompletionParams, above, current, below, funcCtx string, inParams bool, hasExtra bool, extraText string) string <span class="cov7" title="11">{
+func (s *Server) completionCacheKey(p CompletionParams, above, current, below, funcCtx string, inParams bool, hasExtra bool, extraText string) string <span class="cov7" title="12">{
// Normalize left-of-cursor by trimming trailing spaces/tabs
idx := p.Position.Character
if idx &gt; len(current) </span><span class="cov0" title="0">{
idx = len(current)
}</span>
- <span class="cov7" title="11">left := strings.TrimRight(current[:idx], " \t")
+ <span class="cov7" title="12">left := strings.TrimRight(current[:idx], " \t")
right := ""
if idx &lt; len(current) </span><span class="cov0" title="0">{
right = current[idx:]
}</span>
- <span class="cov7" title="11">prov := ""
+ <span class="cov7" title="12">prov := ""
model := ""
- if s.llmClient != nil </span><span class="cov7" title="11">{
+ if s.llmClient != nil </span><span class="cov7" title="12">{
prov = s.llmClient.Name()
model = s.llmClient.DefaultModel()
}</span>
- <span class="cov7" title="11">temp := ""
+ <span class="cov7" title="12">temp := ""
if s.codingTemperature != nil </span><span class="cov0" title="0">{
temp = fmt.Sprintf("%.3f", *s.codingTemperature)
}</span>
- <span class="cov7" title="11">extra := ""
+ <span class="cov7" title="12">extra := ""
if hasExtra </span><span class="cov0" title="0">{
extra = strings.TrimSpace(extraText)
}</span>
// Compose a key from essential context parts
- <span class="cov7" title="11">return strings.Join([]string{
+ <span class="cov7" title="12">return strings.Join([]string{
"v1", // version for future-proofing
prov,
model,
@@ -2294,11 +2335,11 @@ func (s *Server) completionCacheKey(p CompletionParams, above, current, below, f
}, "\x1f")</span> // use unit separator to avoid collisions
}
-func (s *Server) completionCacheGet(key string) (string, bool) <span class="cov7" title="9">{
+func (s *Server) completionCacheGet(key string) (string, bool) <span class="cov6" title="10">{
s.mu.Lock()
defer s.mu.Unlock()
v, ok := s.compCache[key]
- if !ok </span><span class="cov6" title="8">{
+ if !ok </span><span class="cov6" title="9">{
return "", false
}</span>
// move to most-recent
@@ -2306,13 +2347,13 @@ func (s *Server) completionCacheGet(key string) (string, bool) <span class="cov7
return v, true</span>
}
-func (s *Server) completionCachePut(key, value string) <span class="cov7" title="9">{
+func (s *Server) completionCachePut(key, value string) <span class="cov6" title="9">{
s.mu.Lock()
defer s.mu.Unlock()
if s.compCache == nil </span><span class="cov1" title="1">{
s.compCache = make(map[string]string)
}</span>
- <span class="cov7" title="9">if _, exists := s.compCache[key]; !exists </span><span class="cov7" title="9">{
+ <span class="cov6" title="9">if _, exists := s.compCache[key]; !exists </span><span class="cov6" title="9">{
s.compCacheOrder = append(s.compCacheOrder, key)
s.compCache[key] = value
if len(s.compCacheOrder) &gt; 10 </span><span class="cov0" title="0">{
@@ -2321,7 +2362,7 @@ func (s *Server) completionCachePut(key, value string) <span class="cov7" title=
s.compCacheOrder = s.compCacheOrder[1:]
delete(s.compCache, old)
}</span>
- <span class="cov7" title="9">return</span>
+ <span class="cov6" title="9">return</span>
}
// update existing and mark most-recent
<span class="cov0" title="0">s.compCache[key] = value
@@ -2348,25 +2389,26 @@ func (s *Server) compCacheTouchLocked(key string) <span class="cov1" title="1">{
// by typing one of our configured trigger characters. It checks the LSP
// CompletionContext if provided and also falls back to inspecting the character
// immediately to the left of the cursor.
-func (s *Server) isTriggerEvent(p CompletionParams, current string) bool <span class="cov9" title="21">{
+func (s *Server) isTriggerEvent(p CompletionParams, current string) bool <span class="cov8" title="21">{
// 1) Inspect LSP completion context if present
if p.Context != nil </span><span class="cov6" title="8">{
var ctx struct {
TriggerKind int `json:"triggerKind"`
TriggerCharacter string `json:"triggerCharacter,omitempty"`
}
- if raw, ok := p.Context.(json.RawMessage); ok </span><span class="cov6" title="7">{
+ if raw, ok := p.Context.(json.RawMessage); ok </span><span class="cov5" title="7">{
_ = json.Unmarshal(raw, &amp;ctx)
}</span> else<span class="cov1" title="1"> {
b, _ := json.Marshal(p.Context)
_ = json.Unmarshal(b, &amp;ctx)
}</span>
- // If the line contains a bare ';;' (no ';;text;'), do not treat as a trigger source.
- <span class="cov6" title="8">if strings.Contains(current, ";;") &amp;&amp; !hasDoubleSemicolonTrigger(current) </span><span class="cov1" title="1">{
+ // If configured and the line contains a bare double-open marker (e.g., '&gt;&gt;' with no '&gt;&gt;text&gt;'),
+ // do not treat as a trigger source.
+ <span class="cov6" title="8">if s.inlineOpen != "" &amp;&amp; strings.Contains(current, s.inlineOpen+s.inlineOpen) &amp;&amp; !hasDoubleSemicolonTrigger(current) </span><span class="cov0" title="0">{
return false
}</span>
// TriggerKind 1 = Invoked (manual). Always allow manual invoke.
- <span class="cov6" title="7">if ctx.TriggerKind == 1 </span><span class="cov5" title="5">{
+ <span class="cov6" title="8">if ctx.TriggerKind == 1 </span><span class="cov5" title="6">{
return true
}</span>
// TriggerKind 2 is TriggerCharacter per LSP spec
@@ -2385,32 +2427,32 @@ func (s *Server) isTriggerEvent(p CompletionParams, current string) bool <span c
// For TriggerForIncomplete (3), require manual char check below
}
// 2) Fallback: check the character immediately prior to cursor
- <span class="cov8" title="13">idx := p.Position.Character
+ <span class="cov7" title="13">idx := p.Position.Character
if idx &lt;= 0 || idx &gt; len(current) </span><span class="cov0" title="0">{
return false
}</span>
- // Bare ';;' should not trigger via fallback char either
- <span class="cov8" title="13">if strings.Contains(current, ";;") &amp;&amp; !hasDoubleSemicolonTrigger(current) </span><span class="cov4" title="3">{
- return false
- }</span>
- <span class="cov7" title="10">ch := string(current[idx-1])
- for _, c := range s.triggerChars </span><span class="cov10" title="26">{
+ // Bare double-open should not trigger via fallback char either (only when configured)
+ <span class="cov7" title="13">if s.inlineOpen != "" &amp;&amp; strings.Contains(current, s.inlineOpen+s.inlineOpen) &amp;&amp; !hasDoubleSemicolonTrigger(current) </span><span class="cov1" title="1">{
+ return false
+ }</span>
+ <span class="cov7" title="12">ch := string(current[idx-1])
+ for _, c := range s.triggerChars </span><span class="cov10" title="34">{
if c == ch </span><span class="cov5" title="5">{
return true
}</span>
}
- <span class="cov5" title="5">return false</span>
+ <span class="cov5" title="7">return false</span>
}
-func (s *Server) makeCompletionItems(cleaned string, inParams bool, current string, p CompletionParams, docStr string) []CompletionItem <span class="cov7" title="10">{
+func (s *Server) makeCompletionItems(cleaned string, inParams bool, current string, p CompletionParams, docStr string) []CompletionItem <span class="cov6" title="10">{
te, filter := computeTextEditAndFilter(cleaned, inParams, current, p)
rm := s.collectPromptRemovalEdits(p.TextDocument.URI)
label := labelForCompletion(cleaned, filter)
detail := "Hexai LLM completion"
- if s.llmClient != nil </span><span class="cov7" title="10">{
+ if s.llmClient != nil </span><span class="cov6" title="10">{
detail = "Hexai " + s.llmClient.Name() + ":" + s.llmClient.DefaultModel()
}</span>
- <span class="cov7" title="10">return []CompletionItem{{
+ <span class="cov6" title="10">return []CompletionItem{{
Label: label,
Kind: 1,
Detail: detail,
@@ -3082,15 +3124,15 @@ func (s *Server) tryLLMCompletion(p CompletionParams, above, current, below, fun
defer cancel()
inlinePrompt := lineHasInlinePrompt(current)
- if !inlinePrompt &amp;&amp; !s.isTriggerEvent(p, current) </span><span class="cov7" title="9">{
+ if !inlinePrompt &amp;&amp; !s.isTriggerEvent(p, current) </span><span class="cov7" title="8">{
logging.Logf("lsp ", "%scompletion skip=no-trigger line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
return []CompletionItem{}, true
}</span>
- <span class="cov7" title="9">if s.shouldSuppressForChatTriggerEOL(current, p) </span><span class="cov0" title="0">{
+ <span class="cov8" title="10">if s.shouldSuppressForChatTriggerEOL(current, p) </span><span class="cov0" title="0">{
return []CompletionItem{}, true
}</span>
- <span class="cov7" title="9">inParams := inParamList(current, p.Position.Character)
+ <span class="cov8" title="10">inParams := inParamList(current, p.Position.Character)
manualInvoke := parseManualInvoke(p.Context)
// Cache fast-path
@@ -3101,10 +3143,10 @@ func (s *Server) tryLLMCompletion(p CompletionParams, above, current, below, fun
logging.AnsiGreen, logging.PreviewForLog(cleaned), logging.AnsiBase)
return s.makeCompletionItems(cleaned, inParams, current, p, docStr), true
}</span>
- <span class="cov7" title="8">if (isBareDoubleSemicolon(current) || isBareDoubleSemicolon(below)) &amp;&amp; !manualInvoke </span><span class="cov0" title="0">{
- logging.Logf("lsp ", "%scompletion skip=empty-double-semicolon line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
- return []CompletionItem{}, true
- }</span>
+ <span class="cov7" title="9">if (isBareDoubleSemicolon(current) || isBareDoubleSemicolon(below)) </span><span class="cov1" title="1">{
+ logging.Logf("lsp ", "%scompletion skip=empty-double-semicolon line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
+ return []CompletionItem{}, true
+ }</span>
<span class="cov7" title="8">if !inParams &amp;&amp; !s.prefixHeuristicAllows(inlinePrompt, current, p, manualInvoke) </span><span class="cov0" title="0">{
logging.Logf("lsp ", "%scompletion skip=short-prefix line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
@@ -3153,32 +3195,37 @@ func (s *Server) tryLLMCompletion(p CompletionParams, above, current, below, fun
}
// parseManualInvoke inspects the LSP completion context and reports whether the user manually invoked completion.
-func parseManualInvoke(ctx any) bool <span class="cov8" title="10">{
+func parseManualInvoke(ctx any) bool <span class="cov8" title="11">{
if ctx == nil </span><span class="cov6" title="5">{
return false
}</span>
- <span class="cov6" title="5">var c struct {
+ <span class="cov6" title="6">var c struct {
TriggerKind int `json:"triggerKind"`
}
- if raw, ok := ctx.(json.RawMessage); ok </span><span class="cov6" title="5">{
+ if raw, ok := ctx.(json.RawMessage); ok </span><span class="cov6" title="6">{
_ = json.Unmarshal(raw, &amp;c)
}</span> else<span class="cov0" title="0"> {
b, _ := json.Marshal(ctx)
_ = json.Unmarshal(b, &amp;c)
}</span>
- <span class="cov6" title="5">return c.TriggerKind == 1</span>
+ <span class="cov6" title="6">return c.TriggerKind == 1</span>
}
// shouldSuppressForChatTriggerEOL returns true when a chat trigger like "&gt;" follows ?, !, :, or ; at EOL.
-func (s *Server) shouldSuppressForChatTriggerEOL(current string, p CompletionParams) bool <span class="cov8" title="11">{
- if t := strings.TrimRight(current, " \t"); len(t) &gt;= 2 &amp;&amp; t[len(t)-1] == '&gt;' </span><span class="cov3" title="2">{
- prev := t[len(t)-2]
- if prev == '?' || prev == '!' || prev == ':' || prev == ';' </span><span class="cov1" title="1">{
- logging.Logf("lsp ", "completion skip=chat-trigger-eol uri=%s line=%d", p.TextDocument.URI, p.Position.Line)
- return true
- }</span>
+func (s *Server) shouldSuppressForChatTriggerEOL(current string, p CompletionParams) bool <span class="cov8" title="12">{
+ t := strings.TrimRight(current, " \t")
+ if s.chatSuffix == "" </span><span class="cov6" title="5">{ return false }</span>
+ <span class="cov7" title="7">if strings.HasSuffix(t, s.chatSuffix) </span><span class="cov3" title="2">{
+ if len(t) &lt; len(s.chatSuffix)+1 </span><span class="cov0" title="0">{ return false }</span>
+ <span class="cov3" title="2">prev := string(t[len(t)-len(s.chatSuffix)-1])
+ for _, pf := range s.chatPrefixes </span><span class="cov7" title="8">{
+ if prev == pf </span><span class="cov1" title="1">{
+ logging.Logf("lsp ", "completion skip=chat-trigger-eol uri=%s line=%d", p.TextDocument.URI, p.Position.Line)
+ return true
+ }</span>
}
- <span class="cov8" title="10">return false</span>
+ }
+ <span class="cov6" title="6">return false</span>
}
// prefixHeuristicAllows applies minimal prefix rules unless inlinePrompt or structural triggers apply.
@@ -3383,6 +3430,11 @@ import (
"time"
)
+// Package-level chat trigger vars for helpers without Server receiver.
+// NewServer assigns these from configuration on startup.
+var chatSuffixChar byte = '&gt;'
+var chatPrefixSingles = []string{"?", "!", ":", ";"}
+
func (s *Server) handleDidOpen(req Request) <span class="cov1" title="1">{
var p DidOpenTextDocumentParams
if err := json.Unmarshal(req.Params, &amp;p); err == nil </span><span class="cov1" title="1">{
@@ -3414,9 +3466,9 @@ func (s *Server) handleDidClose(req Request) <span class="cov1" title="1">{
// docBeforeAfter returns the full document text split at the given position.
// The returned strings are the text before the cursor (inclusive of anything
// left of the position) and the text after the cursor.
-func (s *Server) docBeforeAfter(uri string, pos Position) (string, string) <span class="cov7" title="4">{
+func (s *Server) docBeforeAfter(uri string, pos Position) (string, string) <span class="cov6" title="4">{
d := s.getDocument(uri)
- if d == nil </span><span class="cov6" title="3">{
+ if d == nil </span><span class="cov5" title="3">{
return "", ""
}</span>
// Clamp indices
@@ -3457,44 +3509,55 @@ func (s *Server) docBeforeAfter(uri string, pos Position) (string, string) <span
// detectAndHandleChat scans the current document for any line that starts with
// a new trigger pair (e.g., "?&gt;" ",&gt;" ":&gt;" ";&gt;") at EOL and inserts the LLM
// reply below.
-func (s *Server) detectAndHandleChat(uri string) <span class="cov6" title="3">{
+func (s *Server) detectAndHandleChat(uri string) <span class="cov5" title="3">{
if s.llmClient == nil </span><span class="cov1" title="1">{
return
}</span>
- <span class="cov4" title="2">d := s.getDocument(uri)
+ <span class="cov3" title="2">d := s.getDocument(uri)
if d == nil || len(d.lines) == 0 </span><span class="cov0" title="0">{
return
}</span>
- <span class="cov4" title="2">for i, raw := range d.lines </span><span class="cov7" title="4">{
+ <span class="cov3" title="2">for i, raw := range d.lines </span><span class="cov6" title="4">{
// Find last non-space character index
j := len(raw) - 1
- for j &gt;= 0 </span><span class="cov6" title="3">{
+ for j &gt;= 0 </span><span class="cov5" title="3">{
if raw[j] == ' ' || raw[j] == '\t' </span><span class="cov0" title="0">{
j--
continue</span>
}
- <span class="cov6" title="3">break</span>
- }
- <span class="cov7" title="4">if j &lt; 1 </span><span class="cov1" title="1">{
- continue</span>
- } // need at least two chars
- <span class="cov6" title="3">pair := raw[j-1 : j+1]
- isTrigger := pair == "?&gt;" || pair == "!&gt;" || pair == ":&gt;" || pair == ";&gt;"
- if !isTrigger </span><span class="cov1" title="1">{
- continue</span>
+ <span class="cov5" title="3">break</span>
}
+ <span class="cov6" title="4">if j &lt; 0 </span><span class="cov1" title="1">{
+ continue</span>
+ }
+ // Check suffix/prefix according to configuration
+ <span class="cov5" title="3">if s.chatSuffix == "" </span><span class="cov3" title="2">{
+ continue</span>
+ }
+ // Last non-space must equal suffix
+ <span class="cov1" title="1">if string(raw[j]) != s.chatSuffix </span><span class="cov0" title="0">{
+ continue</span>
+ }
+ // Require at least one char before suffix and that char must be in chatPrefixes
+ <span class="cov1" title="1">if j &lt; 1 </span><span class="cov0" title="0">{ continue</span> }
+ <span class="cov1" title="1">prev := string(raw[j-1])
+ isTrigger := false
+ for _, pfx := range s.chatPrefixes </span><span class="cov1" title="1">{
+ if prev == pfx </span><span class="cov1" title="1">{ isTrigger = true; break</span> }
+ }
+ <span class="cov1" title="1">if !isTrigger </span><span class="cov0" title="0">{ continue</span> }
// Avoid double-answering: if the next non-empty line starts with '&gt;' we skip.
- <span class="cov4" title="2">k := i + 1
- for k &lt; len(d.lines) &amp;&amp; strings.TrimSpace(d.lines[k]) == "" </span><span class="cov4" title="2">{
+ <span class="cov1" title="1">k := i + 1
+ for k &lt; len(d.lines) &amp;&amp; strings.TrimSpace(d.lines[k]) == "" </span><span class="cov3" title="2">{
k++
}</span>
- <span class="cov4" title="2">if k &lt; len(d.lines) &amp;&amp; strings.HasPrefix(strings.TrimSpace(d.lines[k]), "&gt;") </span><span class="cov1" title="1">{
+ <span class="cov1" title="1">if k &lt; len(d.lines) &amp;&amp; strings.HasPrefix(strings.TrimSpace(d.lines[k]), "&gt;") </span><span class="cov0" title="0">{
continue</span>
}
// Derive prompt by removing only the trailing '&gt;'
- <span class="cov1" title="1">removeCount := 1
+ <span class="cov1" title="1">removeCount := len(s.chatSuffix)
base := raw[:j+1-removeCount]
- prompt := strings.TrimSpace(base)
+ prompt := strings.TrimSpace(base)
if prompt == "" </span><span class="cov0" title="0">{
continue</span>
}
@@ -3549,80 +3612,85 @@ func (s *Server) applyChatEdits(uri string, lineIdx int, lastNonSpace int, remov
// buildChatHistory walks upwards from the current line to collect the most recent
// Q/A pairs in the in-editor transcript. Returns messages ending with current prompt.
-func (s *Server) buildChatHistory(uri string, lineIdx int, currentPrompt string) []llm.Message <span class="cov4" title="2">{
+func (s *Server) buildChatHistory(uri string, lineIdx int, currentPrompt string) []llm.Message <span class="cov3" title="2">{
d := s.getDocument(uri)
if d == nil </span><span class="cov0" title="0">{
return []llm.Message{{Role: "user", Content: currentPrompt}}
}</span>
- <span class="cov4" title="2">type pair struct{ q, a string }
+ <span class="cov3" title="2">type pair struct{ q, a string }
pairs := []pair{}
i := lineIdx - 1
- for i &gt;= 0 &amp;&amp; len(pairs) &lt; 3 </span><span class="cov4" title="2">{
+ for i &gt;= 0 &amp;&amp; len(pairs) &lt; 3 </span><span class="cov3" title="2">{
for i &gt;= 0 &amp;&amp; strings.TrimSpace(d.lines[i]) == "" </span><span class="cov1" title="1">{
i--
}</span>
- <span class="cov4" title="2">if i &lt; 0 </span><span class="cov0" title="0">{
+ <span class="cov3" title="2">if i &lt; 0 </span><span class="cov0" title="0">{
break</span>
}
- <span class="cov4" title="2">if !strings.HasPrefix(strings.TrimSpace(d.lines[i]), "&gt;") </span><span class="cov0" title="0">{
+ <span class="cov3" title="2">if !strings.HasPrefix(strings.TrimSpace(d.lines[i]), "&gt;") </span><span class="cov0" title="0">{
break</span>
}
- <span class="cov4" title="2">var replyLines []string
- for i &gt;= 0 </span><span class="cov7" title="4">{
+ <span class="cov3" title="2">var replyLines []string
+ for i &gt;= 0 </span><span class="cov6" title="4">{
line := strings.TrimSpace(d.lines[i])
- if strings.HasPrefix(line, "&gt;") </span><span class="cov4" title="2">{
+ if strings.HasPrefix(line, "&gt;") </span><span class="cov3" title="2">{
replyLines = append([]string{strings.TrimSpace(strings.TrimPrefix(line, "&gt;"))}, replyLines...)
i--
continue</span>
}
- <span class="cov4" title="2">break</span>
+ <span class="cov3" title="2">break</span>
}
- <span class="cov4" title="2">for i &gt;= 0 &amp;&amp; strings.TrimSpace(d.lines[i]) == "" </span><span class="cov0" title="0">{
+ <span class="cov3" title="2">for i &gt;= 0 &amp;&amp; strings.TrimSpace(d.lines[i]) == "" </span><span class="cov0" title="0">{
i--
}</span>
- <span class="cov4" title="2">if i &lt; 0 </span><span class="cov0" title="0">{
+ <span class="cov3" title="2">if i &lt; 0 </span><span class="cov0" title="0">{
break</span>
}
- <span class="cov4" title="2">q := strings.TrimSpace(d.lines[i])
+ <span class="cov3" title="2">q := strings.TrimSpace(d.lines[i])
q = stripTrailingTrigger(q)
pairs = append([]pair{{q: q, a: strings.Join(replyLines, "\n")}}, pairs...)
i--</span>
}
- <span class="cov4" title="2">msgs := make([]llm.Message, 0, len(pairs)*2+1)
- for _, p := range pairs </span><span class="cov4" title="2">{
- if strings.TrimSpace(p.q) != "" </span><span class="cov4" title="2">{
+ <span class="cov3" title="2">msgs := make([]llm.Message, 0, len(pairs)*2+1)
+ for _, p := range pairs </span><span class="cov3" title="2">{
+ if strings.TrimSpace(p.q) != "" </span><span class="cov3" title="2">{
msgs = append(msgs, llm.Message{Role: "user", Content: p.q})
}</span>
- <span class="cov4" title="2">if strings.TrimSpace(p.a) != "" </span><span class="cov4" title="2">{
+ <span class="cov3" title="2">if strings.TrimSpace(p.a) != "" </span><span class="cov3" title="2">{
msgs = append(msgs, llm.Message{Role: "assistant", Content: p.a})
}</span>
}
- <span class="cov4" title="2">msgs = append(msgs, llm.Message{Role: "user", Content: currentPrompt})
+ <span class="cov3" title="2">msgs = append(msgs, llm.Message{Role: "user", Content: currentPrompt})
return msgs</span>
}
// stripTrailingTrigger removes the trailing chat trigger punctuation from a line if present.
-func stripTrailingTrigger(sx string) string <span class="cov10" title="7">{
- s := strings.TrimRight(sx, " \t")
- if len(s) &gt;= 2 &amp;&amp; s[len(s)-1] == '&gt;' </span><span class="cov7" title="4">{ // new triggers
- prev := s[len(s)-2]
- if prev == '?' || prev == '!' || prev == ':' || prev == ';' </span><span class="cov7" title="4">{
- return strings.TrimRight(s[:len(s)-1], " \t")
- }</span>
- }
- <span class="cov6" title="3">if strings.HasSuffix(s, ";;") </span><span class="cov0" title="0">{ // legacy inline cleanup used in history building
- return strings.TrimRight(strings.TrimSuffix(s, ";;"), " \t")
- }</span>
- <span class="cov6" title="3">if len(s) == 0 </span><span class="cov0" title="0">{
- return sx
- }</span>
- <span class="cov6" title="3">last := s[len(s)-1]
- switch last </span>{ // legacy: remove one trailing punctuation
- case '?', '!', ':':<span class="cov1" title="1">
- return strings.TrimRight(s[:len(s)-1], " \t")</span>
- default:<span class="cov4" title="2">
- return sx</span>
+func stripTrailingTrigger(sx string) string <span class="cov8" title="7">{
+ s := strings.TrimRight(sx, " \t")
+ if len(s) == 0 </span><span class="cov0" title="0">{
+ return sx
+ }</span>
+ // Configurable suffix removal when preceded by configured prefixes
+ <span class="cov8" title="7">if len(s) &gt;= 2 &amp;&amp; s[len(s)-1] == chatSuffixChar </span><span class="cov6" title="4">{
+ prev := string(s[len(s)-2])
+ for _, pf := range chatPrefixSingles </span><span class="cov10" title="10">{
+ if prev == pf </span><span class="cov6" title="4">{
+ return strings.TrimRight(s[:len(s)-1], " \t")
+ }</span>
}
+ }
+ // Legacy: inline cleanup for old semicolon form ";;"
+ <span class="cov5" title="3">if strings.HasSuffix(s, ";;") </span><span class="cov0" title="0">{
+ return strings.TrimRight(strings.TrimSuffix(s, ";;"), " \t")
+ }</span>
+ // Legacy: remove one trailing punctuation (?, !, :) to build history nicely
+ <span class="cov5" title="3">last := s[len(s)-1]
+ switch last </span>{
+ case '?', '!', ':':<span class="cov1" title="1">
+ return strings.TrimRight(s[:len(s)-1], " \t")</span>
+ default:<span class="cov3" title="2">
+ return sx</span>
+ }
}
// clientApplyEdit sends a workspace/applyEdit request to the client.
@@ -3636,7 +3704,7 @@ func (s *Server) clientApplyEdit(label string, edit WorkspaceEdit) <span class="
}</span>
// nextReqID returns a unique json.RawMessage id for server-initiated requests.
-func (s *Server) nextReqID() json.RawMessage <span class="cov7" title="4">{
+func (s *Server) nextReqID() json.RawMessage <span class="cov6" title="4">{
s.mu.Lock()
s.nextID++
idNum := s.nextID
@@ -3646,7 +3714,7 @@ func (s *Server) nextReqID() json.RawMessage <span class="cov7" title="4">{
}</span>
// clientShowDocument asks the client to open/focus a document and select a range.
-func (s *Server) clientShowDocument(uri string, sel *Range) <span class="cov6" title="3">{
+func (s *Server) clientShowDocument(uri string, sel *Range) <span class="cov5" title="3">{
var params struct {
URI string `json:"uri"`
External bool `json:"external,omitempty"`
@@ -3763,6 +3831,11 @@ import (
"time"
)
+// Configurable inline trigger characters (default to '&gt;') used by free helpers below.
+// NewServer assigns these based on ServerOptions.
+var inlineOpenChar byte = '&gt;'
+var inlineCloseChar byte = '&gt;'
+
// llmRequestOpts builds request options from server settings.
func (s *Server) llmRequestOpts() []llm.RequestOption <span class="cov5" title="11">{
opts := []llm.RequestOption{llm.WithMaxTokens(s.maxTokens)}
@@ -3810,8 +3883,8 @@ func (s *Server) logLLMStats() <span class="cov4" title="7">{
}
// Completion prompt builders and filters
-func inParamList(current string, cursor int) bool <span class="cov5" title="10">{
- if !strings.Contains(current, "func ") </span><span class="cov4" title="5">{
+func inParamList(current string, cursor int) bool <span class="cov5" title="11">{
+ if !strings.Contains(current, "func ") </span><span class="cov4" title="6">{
return false
}</span>
<span class="cov4" title="5">open := strings.Index(current, "(")
@@ -3878,10 +3951,10 @@ func isIdentChar(ch byte) bool <span class="cov7" title="24">{
// Inline prompt utilities
func lineHasInlinePrompt(line string) bool <span class="cov6" title="18">{
- if _, _, _, ok := findStrictSemicolonTag(line); ok </span><span class="cov1" title="1">{
- return true
- }</span>
- <span class="cov6" title="17">return hasDoubleSemicolonTrigger(line)</span>
+ if _, _, _, ok := findStrictSemicolonTag(line); ok </span><span class="cov1" title="1">{
+ return true
+ }</span>
+ <span class="cov6" title="17">return hasDoubleSemicolonTrigger(line)</span>
}
func leadingIndent(line string) string <span class="cov2" title="2">{
@@ -3918,61 +3991,64 @@ func applyIndent(indent, suggestion string) string <span class="cov2" title="2">
// --- Inline marker parsing and general string utilities ---
-// findStrictSemicolonTag finds ;text; with no space after first ';' and no space
-// before the last ';' on the given line. Returns the text between semicolons,
-// the start index of the opening ';', the end index just after the closing ';',
-// and whether it was found.
+// findStrictSemicolonTag now 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 findStrictSemicolonTag(line string) (string, int, int, bool) <span class="cov8" title="46">{
- pos := 0
- for pos &lt; len(line) </span><span class="cov9" title="58">{
- j := strings.Index(line[pos:], ";")
- if j &lt; 0 </span><span class="cov7" title="30">{
- return "", 0, 0, false
- }</span>
- <span class="cov7" title="28">j += pos
- // ensure single ';' (not ';;') and non-space after
- if j+1 &gt;= len(line) || line[j+1] == ';' || line[j+1] == ' ' </span><span class="cov6" title="14">{
- pos = j + 1
- continue</span>
- }
- <span class="cov6" title="14">k := strings.Index(line[j+1:], ";")
- if k &lt; 0 </span><span class="cov2" title="2">{
- return "", 0, 0, false
- }</span>
- <span class="cov5" title="12">closeIdx := j + 1 + k
- if closeIdx-1 &lt; 0 || line[closeIdx-1] == ' ' </span><span class="cov1" title="1">{
- pos = closeIdx + 1
- continue</span>
- }
- <span class="cov5" title="11">inner := strings.TrimSpace(line[j+1 : closeIdx])
- if inner == "" </span><span class="cov0" title="0">{
- pos = closeIdx + 1
- continue</span>
- }
- <span class="cov5" title="11">end := closeIdx + 1
- return inner, j, end, true</span>
+ pos := 0
+ for pos &lt; len(line) </span><span class="cov9" title="58">{
+ // find opening marker
+ j := strings.IndexByte(line[pos:], inlineOpenChar)
+ if j &lt; 0 </span><span class="cov7" title="27">{
+ return "", 0, 0, false
+ }</span>
+ <span class="cov7" title="31">j += pos
+ // ensure single open (not double) and non-space after
+ if j+1 &gt;= len(line) || line[j+1] == inlineOpenChar || line[j+1] == ' ' </span><span class="cov6" title="18">{
+ pos = j + 1
+ continue</span>
+ }
+ // find closing marker
+ <span class="cov6" title="13">k := strings.IndexByte(line[j+1:], inlineCloseChar)
+ if k &lt; 0 </span><span class="cov1" title="1">{
+ return "", 0, 0, false
+ }</span>
+ <span class="cov5" title="12">closeIdx := j + 1 + k
+ if closeIdx-1 &lt; 0 || line[closeIdx-1] == ' ' </span><span class="cov1" title="1">{
+ pos = closeIdx + 1
+ continue</span>
+ }
+ <span class="cov5" title="11">inner := strings.TrimSpace(line[j+1 : closeIdx])
+ if inner == "" </span><span class="cov0" title="0">{
+ pos = closeIdx + 1
+ continue</span>
}
- <span class="cov3" title="3">return "", 0, 0, false</span>
+ <span class="cov5" title="11">end := closeIdx + 1
+ return inner, j, end, true</span>
+ }
+ <span class="cov4" title="7">return "", 0, 0, false</span>
}
// isBareDoubleSemicolon reports whether the line contains a standalone
// double-semicolon marker with no inline content (";;" possibly with only
// whitespace after it). It explicitly excludes the valid form ";;text;".
-func isBareDoubleSemicolon(line string) bool <span class="cov6" title="18">{
- t := strings.TrimSpace(line)
- if !strings.Contains(t, ";;") </span><span class="cov6" title="16">{
- return false
- }</span>
- <span class="cov2" title="2">if hasDoubleSemicolonTrigger(t) </span><span class="cov1" title="1">{
- return false
+func isBareDoubleSemicolon(line string) bool <span class="cov6" title="19">{
+ t := strings.TrimSpace(line)
+ // check for double-open pattern
+ dbl := string([]byte{inlineOpenChar, inlineOpenChar})
+ if !strings.Contains(t, dbl) </span><span class="cov6" title="16">{
+ return false
+ }</span>
+ <span class="cov3" title="3">if hasDoubleSemicolonTrigger(t) </span><span class="cov1" title="1">{
+ return false
+ }</span>
+ <span class="cov2" title="2">if strings.HasPrefix(t, dbl) </span><span class="cov2" title="2">{
+ rest := strings.TrimSpace(t[len(dbl):])
+ if rest == "" || rest == ";" </span><span class="cov2" title="2">{
+ return true
}</span>
- <span class="cov1" title="1">if strings.HasPrefix(t, ";;") </span><span class="cov1" title="1">{
- rest := strings.TrimSpace(t[2:])
- if rest == "" || rest == ";" </span><span class="cov1" title="1">{
- return true
- }</span>
- }
- <span class="cov0" title="0">return false</span>
+ }
+ <span class="cov0" title="0">return false</span>
}
// stripDuplicateAssignmentPrefix removes a duplicated assignment prefix from the suggestion.
@@ -4155,81 +4231,84 @@ func (s *Server) collectPromptRemovalEdits(uri string) []TextEdit <span class="c
}
func promptRemovalEditsForLine(line string, lineNum int) []TextEdit <span class="cov4" title="7">{
- if hasDoubleSemicolonTrigger(line) </span><span class="cov3" title="3">{
- return []TextEdit{{Range: Range{Start: Position{Line: lineNum, Character: 0}, End: Position{Line: lineNum, Character: len(line)}}, NewText: ""}}
- }</span>
- <span class="cov3" title="4">return collectSemicolonMarkers(line, lineNum)</span>
+ if hasDoubleSemicolonTrigger(line) </span><span class="cov3" title="3">{
+ return []TextEdit{{Range: Range{Start: Position{Line: lineNum, Character: 0}, End: Position{Line: lineNum, Character: len(line)}}, NewText: ""}}
+ }</span>
+ <span class="cov3" title="4">return collectSemicolonMarkers(line, lineNum)</span>
}
-func hasDoubleSemicolonTrigger(line string) bool <span class="cov8" title="51">{
- pos := 0
- for pos &lt; len(line) </span><span class="cov8" title="55">{
- j := strings.Index(line[pos:], ";;")
- if j &lt; 0 </span><span class="cov7" title="34">{
- return false
- }</span>
- <span class="cov7" title="21">j += pos
- contentStart := j + 2
- if contentStart &gt;= len(line) </span><span class="cov4" title="7">{
- return false
- }</span>
- <span class="cov6" title="14">first := line[contentStart]
- if first == ' ' || first == ';' </span><span class="cov4" title="5">{
- pos = contentStart + 1
- continue</span>
- }
- <span class="cov5" title="9">k := strings.Index(line[contentStart+1:], ";")
- if k &lt; 0 </span><span class="cov0" title="0">{
- return false
- }</span>
- <span class="cov5" title="9">closeIdx := contentStart + 1 + k
- if closeIdx-1 &gt;= 0 &amp;&amp; line[closeIdx-1] == ' ' </span><span class="cov1" title="1">{
- pos = closeIdx + 1
- continue</span>
- }
- <span class="cov5" title="8">return true</span>
+func hasDoubleSemicolonTrigger(line string) bool <span class="cov8" title="49">{
+ pos := 0
+ for pos &lt; len(line) </span><span class="cov8" title="50">{
+ // look for double-open sequence
+ dbl := string([]byte{inlineOpenChar, inlineOpenChar})
+ j := strings.Index(line[pos:], dbl)
+ if j &lt; 0 </span><span class="cov7" title="32">{
+ return false
+ }</span>
+ <span class="cov6" title="18">j += pos
+ contentStart := j + len(dbl)
+ if contentStart &gt;= len(line) </span><span class="cov4" title="6">{
+ return false
+ }</span>
+ <span class="cov5" title="12">first := line[contentStart]
+ if first == ' ' || first == inlineOpenChar </span><span class="cov3" title="3">{
+ pos = contentStart + 1
+ continue</span>
}
- <span class="cov2" title="2">return false</span>
+ // find closing
+ <span class="cov5" title="9">k := strings.IndexByte(line[contentStart+1:], inlineCloseChar)
+ if k &lt; 0 </span><span class="cov0" title="0">{
+ return false
+ }</span>
+ <span class="cov5" title="9">closeIdx := contentStart + 1 + k
+ if closeIdx-1 &gt;= 0 &amp;&amp; line[closeIdx-1] == ' ' </span><span class="cov1" title="1">{
+ pos = closeIdx + 1
+ continue</span>
+ }
+ <span class="cov5" title="8">return true</span>
+ }
+ <span class="cov3" title="3">return false</span>
}
func collectSemicolonMarkers(line string, lineNum int) []TextEdit <span class="cov4" title="5">{
- var edits []TextEdit
- startSemi := 0
- for startSemi &lt; len(line) </span><span class="cov5" title="9">{
- j := strings.Index(line[startSemi:], ";")
- if j &lt; 0 </span><span class="cov3" title="4">{
- break</span>
- }
- <span class="cov4" title="5">j += startSemi
- k := strings.Index(line[j+1:], ";")
- if k &lt; 0 </span><span class="cov0" title="0">{
- break</span>
- }
- <span class="cov4" title="5">if j+1 &gt;= len(line) || line[j+1] == ' ' </span><span class="cov0" title="0">{
- startSemi = j + 1
- continue</span>
- }
- <span class="cov4" title="5">if line[j+1] == ';' </span><span class="cov0" title="0">{
- startSemi = j + 2
- continue</span>
- }
- <span class="cov4" title="5">closeIdx := j + 1 + k
- if closeIdx-1 &lt; 0 || line[closeIdx-1] == ' ' </span><span class="cov0" title="0">{
- startSemi = closeIdx + 1
- continue</span>
- }
- <span class="cov4" title="5">if closeIdx-(j+1) &lt; 1 </span><span class="cov0" title="0">{
- startSemi = closeIdx + 1
- continue</span>
- }
- <span class="cov4" title="5">endChar := closeIdx + 1
- if endChar &lt; len(line) &amp;&amp; line[endChar] == ' ' </span><span class="cov3" title="4">{
- endChar++
- }</span>
- <span class="cov4" title="5">edits = append(edits, TextEdit{Range: Range{Start: Position{Line: lineNum, Character: j}, End: Position{Line: lineNum, Character: endChar}}, NewText: ""})
- startSemi = endChar</span>
+ var edits []TextEdit
+ startSemi := 0
+ for startSemi &lt; len(line) </span><span class="cov5" title="9">{
+ j := strings.IndexByte(line[startSemi:], inlineOpenChar)
+ if j &lt; 0 </span><span class="cov3" title="4">{
+ break</span>
+ }
+ <span class="cov4" title="5">j += startSemi
+ k := strings.IndexByte(line[j+1:], inlineCloseChar)
+ if k &lt; 0 </span><span class="cov0" title="0">{
+ break</span>
+ }
+ <span class="cov4" title="5">if j+1 &gt;= len(line) || line[j+1] == ' ' </span><span class="cov0" title="0">{
+ startSemi = j + 1
+ continue</span>
}
- <span class="cov4" title="5">return edits</span>
+ <span class="cov4" title="5">if line[j+1] == inlineOpenChar </span><span class="cov0" title="0">{ // skip double-open start
+ startSemi = j + 2
+ continue</span>
+ }
+ <span class="cov4" title="5">closeIdx := j + 1 + k
+ if closeIdx-1 &lt; 0 || line[closeIdx-1] == ' ' </span><span class="cov0" title="0">{
+ startSemi = closeIdx + 1
+ continue</span>
+ }
+ <span class="cov4" title="5">if closeIdx-(j+1) &lt; 1 </span><span class="cov0" title="0">{
+ startSemi = closeIdx + 1
+ continue</span>
+ }
+ <span class="cov4" title="5">endChar := closeIdx + 1
+ if endChar &lt; len(line) &amp;&amp; line[endChar] == ' ' </span><span class="cov3" title="4">{
+ endChar++
+ }</span>
+ <span class="cov4" title="5">edits = append(edits, TextEdit{Range: Range{Start: Position{Line: lineNum, Character: j}, End: Position{Line: lineNum, Character: endChar}}, NewText: ""})
+ startSemi = endChar</span>
+ }
+ <span class="cov4" title="5">return edits</span>
}
</pre>
@@ -4237,14 +4316,15 @@ func collectSemicolonMarkers(line string, lineNum int) []TextEdit <span class="c
package lsp
import (
- "bufio"
- "encoding/json"
- "codeberg.org/snonux/hexai/internal/llm"
- "codeberg.org/snonux/hexai/internal/logging"
- "io"
- "log"
- "sync"
- "time"
+ "bufio"
+ "encoding/json"
+ "codeberg.org/snonux/hexai/internal/llm"
+ "codeberg.org/snonux/hexai/internal/logging"
+ "io"
+ "log"
+ "strings"
+ "sync"
+ "time"
)
// Server implements a minimal LSP over stdio.
@@ -4286,6 +4366,12 @@ type Server struct {
// Dispatch table for JSON-RPC methods → handler functions
handlers map[string]func(Request)
+
+ // Configurable trigger characters
+ inlineOpen string
+ inlineClose string
+ chatSuffix string
+ chatPrefixes []string
}
// ServerOptions collects configuration for NewServer to avoid long parameter lists.
@@ -4302,50 +4388,67 @@ type ServerOptions struct {
ManualInvokeMinPrefix int
CompletionDebounceMs int
CompletionThrottleMs int
+
+ // Inline/chat triggers
+ InlineOpen string
+ InlineClose string
+ ChatSuffix string
+ ChatPrefixes []string
}
-func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server <span class="cov10" title="3">{
+func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server <span class="cov10" title="4">{
s := &amp;Server{in: bufio.NewReader(r), out: w, logger: logger, docs: make(map[string]*document), logContext: opts.LogContext}
maxTokens := opts.MaxTokens
- if maxTokens &lt;= 0 </span><span class="cov6" title="2">{
+ if maxTokens &lt;= 0 </span><span class="cov8" title="3">{
maxTokens = 500
}</span>
- <span class="cov10" title="3">s.maxTokens = maxTokens
+ <span class="cov10" title="4">s.maxTokens = maxTokens
contextMode := opts.ContextMode
- if contextMode == "" </span><span class="cov6" title="2">{
+ if contextMode == "" </span><span class="cov8" title="3">{
contextMode = "file-on-new-func"
}</span>
- <span class="cov10" title="3">windowLines := opts.WindowLines
- if windowLines &lt;= 0 </span><span class="cov6" title="2">{
+ <span class="cov10" title="4">windowLines := opts.WindowLines
+ if windowLines &lt;= 0 </span><span class="cov8" title="3">{
windowLines = 120
}</span>
- <span class="cov10" title="3">maxContextTokens := opts.MaxContextTokens
- if maxContextTokens &lt;= 0 </span><span class="cov6" title="2">{
+ <span class="cov10" title="4">maxContextTokens := opts.MaxContextTokens
+ if maxContextTokens &lt;= 0 </span><span class="cov8" title="3">{
maxContextTokens = 2000
}</span>
- <span class="cov10" title="3">s.contextMode = contextMode
+ <span class="cov10" title="4">s.contextMode = contextMode
s.windowLines = windowLines
s.maxContextTokens = maxContextTokens
s.startTime = time.Now()
s.llmClient = opts.Client
- if len(opts.TriggerCharacters) == 0 </span><span class="cov10" title="3">{
+ if len(opts.TriggerCharacters) == 0 </span><span class="cov10" title="4">{
// Defaults (no space to avoid auto-trigger after whitespace)
s.triggerChars = []string{".", ":", "/", "_", ")", "{"}
}</span> else<span class="cov0" title="0"> {
s.triggerChars = append([]string{}, opts.TriggerCharacters...)
}</span>
- <span class="cov10" title="3">s.codingTemperature = opts.CodingTemperature
+ <span class="cov10" title="4">s.codingTemperature = opts.CodingTemperature
s.compCache = make(map[string]string)
s.manualInvokeMinPrefix = opts.ManualInvokeMinPrefix
if opts.CompletionDebounceMs &gt; 0 </span><span class="cov1" title="1">{
s.completionDebounce = time.Duration(opts.CompletionDebounceMs) * time.Millisecond
}</span>
- <span class="cov10" title="3">if opts.CompletionThrottleMs &gt; 0 </span><span class="cov0" title="0">{
+ <span class="cov10" title="4">if opts.CompletionThrottleMs &gt; 0 </span><span class="cov0" title="0">{
s.throttleInterval = time.Duration(opts.CompletionThrottleMs) * time.Millisecond
}</span>
+ // Trigger character config (with sane defaults if missing)
+ <span class="cov10" title="4">if strings.TrimSpace(opts.InlineOpen) == "" </span><span class="cov8" title="3">{ s.inlineOpen = "&gt;" }</span> else<span class="cov1" title="1"> { s.inlineOpen = opts.InlineOpen }</span>
+ <span class="cov10" title="4">if strings.TrimSpace(opts.InlineClose) == "" </span><span class="cov8" title="3">{ s.inlineClose = "&gt;" }</span> else<span class="cov1" title="1"> { s.inlineClose = opts.InlineClose }</span>
+ <span class="cov10" title="4">if strings.TrimSpace(opts.ChatSuffix) == "" </span><span class="cov8" title="3">{ s.chatSuffix = "&gt;" }</span> else<span class="cov1" title="1"> { s.chatSuffix = opts.ChatSuffix }</span>
+ <span class="cov10" title="4">if len(opts.ChatPrefixes) == 0 </span><span class="cov8" title="3">{ s.chatPrefixes = []string{"?","!",":",";"} }</span> else<span class="cov1" title="1"> { s.chatPrefixes = append([]string{}, opts.ChatPrefixes...) }</span>
+
+ // Assign package-level inline trigger chars for free helper functions
+ <span class="cov10" title="4">if s.inlineOpen != "" </span><span class="cov10" title="4">{ inlineOpenChar = s.inlineOpen[0] }</span>
+ <span class="cov10" title="4">if s.inlineClose != "" </span><span class="cov10" title="4">{ inlineCloseChar = s.inlineClose[0] }</span>
+ <span class="cov10" title="4">if s.chatSuffix != "" </span><span class="cov10" title="4">{ chatSuffixChar = s.chatSuffix[0] }</span>
+ <span class="cov10" title="4">if len(s.chatPrefixes) &gt; 0 </span><span class="cov10" title="4">{ chatPrefixSingles = append([]string{}, s.chatPrefixes...) }</span>
// Initialize dispatch table
- <span class="cov10" title="3">s.handlers = map[string]func(Request){
+ <span class="cov10" title="4">s.handlers = map[string]func(Request){
"initialize": s.handleInitialize,
"initialized": func(_ Request) </span><span class="cov0" title="0">{ s.handleInitialized() }</span>,
"shutdown": s.handleShutdown,
@@ -4358,7 +4461,7 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions)
"codeAction/resolve": s.handleCodeActionResolve,
"workspace/executeCommand": s.handleExecuteCommand,
}
- <span class="cov10" title="3">return s</span>
+ <span class="cov10" title="4">return s</span>
}
func (s *Server) Run() error <span class="cov1" title="1">{
diff --git a/docs/coverage.out b/docs/coverage.out
index fd265f2..3f45e70 100644
--- a/docs/coverage.out
+++ b/docs/coverage.out
@@ -15,136 +15,155 @@ 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/internal/appconfig/config.go:55.29,73.2 2 5
-codeberg.org/snonux/hexai/internal/appconfig/config.go:77.35,79.22 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:79.22,81.6 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:83.5,84.19 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:84.19,87.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:87.11,88.91 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:88.91,90.10 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.5,96.53 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.53,98.6 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:99.5,99.15 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:103.66,105.16 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:105.16,106.43 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:106.43,108.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.3,109.18 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:111.2,115.45 4 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:115.45,116.20 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.20,118.4 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.3,119.18 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:121.2,121.22 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.37,127.2 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:130.39,131.25 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:131.25,133.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.56 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.56,136.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.34 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.34,139.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.2,140.32 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.32,142.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.2,143.32 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.32,145.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.5,146.39 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,148.6 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.5,149.41 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.41,151.6 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.5,152.39 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.39,152.94 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.5,153.39 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.39,153.94 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.2,154.38 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.38,156.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.2,157.53 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.53,159.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:163.47,164.58 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:164.58,166.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.2,167.56 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.56,169.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.2,170.36 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.36,172.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.2,173.58 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.58,175.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.2,176.56 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.56,178.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.2,179.36 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.36,181.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.2,182.59 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.59,184.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.2,185.57 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.57,187.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.2,188.37 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.37,190.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:193.38,195.72 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.72,197.3 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:197.8,199.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.17,201.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.3,202.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:204.5,204.27 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.43,216.37 3 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:216.37,216.79 1 60
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.5,217.44 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.44,219.20 2 21
-codeberg.org/snonux/hexai/internal/appconfig/config.go:219.20,219.39 1 14
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.9,221.23 2 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.23,221.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.42,221.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.88,221.103 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:222.9,222.23 1 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.5,224.54 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.54,226.20 2 12
-codeberg.org/snonux/hexai/internal/appconfig/config.go:226.20,226.41 1 8
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.9,228.23 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:228.23,229.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.30,229.73 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:230.13,230.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:232.9,232.24 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.5,235.50 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.50,237.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.5,238.51 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.51,240.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.60 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.60,243.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.5,244.58 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.58,246.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.5,247.57 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.57,249.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.5,250.64 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.64,252.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.5,253.62 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.62,255.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.5,256.62 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.62,258.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.63 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.63,261.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.57 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.57,265.33 3 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.33,266.51 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:266.51,268.14 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.9,270.19 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.5,272.47 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.47,274.6 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.54 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.54,277.91 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.5,278.51 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.51,278.86 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.5,279.63 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.63,279.104 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.5,281.54 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.54,281.91 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.5,282.51 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.51,282.86 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:62.29,85.2 2 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.35,91.22 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:91.22,93.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:95.5,96.19 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:96.19,99.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:99.11,100.91 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:100.91,102.10 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.5,108.53 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.53,110.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:111.5,111.15 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:115.66,117.16 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:117.16,118.43 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:118.43,120.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:121.3,121.18 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:123.2,127.45 4 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:127.45,128.20 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:128.20,130.4 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:131.3,131.18 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:133.2,133.22 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:136.37,139.2 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.39,143.25 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:143.25,145.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,146.56 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.56,148.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.2,149.34 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.34,151.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.2,152.32 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.32,154.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.2,155.32 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.32,157.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.5,158.39 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.39,160.6 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.5,161.41 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.41,163.6 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.5,164.39 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.39,164.94 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.5,165.39 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.39,165.94 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.5,166.41 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.41,168.6 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.5,169.58 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.58,171.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.5,172.59 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.59,174.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.5,175.58 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.58,177.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.5,178.36 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.36,180.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.5,181.56 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.56,183.6 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:187.47,188.58 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:188.58,190.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.2,191.56 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.56,193.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.2,194.36 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.36,196.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.2,197.58 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.58,199.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.2,200.56 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.56,202.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.2,203.36 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.36,205.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.2,206.59 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.59,208.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.2,209.57 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.57,211.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.2,212.37 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.37,214.3 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:217.38,219.72 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:219.72,221.3 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:221.8,223.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:223.17,225.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:226.3,226.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:228.5,228.27 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:235.43,240.37 3 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:240.37,240.79 1 72
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.44 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.44,243.20 2 21
+codeberg.org/snonux/hexai/internal/appconfig/config.go:243.20,243.39 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:244.9,245.23 2 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.23,245.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.42,245.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.88,245.103 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:246.9,246.23 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.5,248.54 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.54,250.20 2 12
+codeberg.org/snonux/hexai/internal/appconfig/config.go:250.20,250.41 1 8
+codeberg.org/snonux/hexai/internal/appconfig/config.go:251.9,252.23 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:252.23,253.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:253.30,253.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:254.13,254.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:256.9,256.24 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.50 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.50,261.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.51 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.51,264.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.5,265.60 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.60,267.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.5,268.58 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.58,270.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.5,271.57 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.57,273.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.5,274.64 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.64,276.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.62 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.62,279.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.5,280.62 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.62,282.6 2 1
codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,283.104 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.5,285.55 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.55,285.93 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.52 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.52,286.88 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.5,287.64 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.64,287.106 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.5,289.13 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.13,291.6 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:292.5,292.16 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,285.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.57 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.33 3 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:289.33,290.51 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:290.51,292.14 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.9,294.19 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.5,296.50 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.50,296.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.5,297.51 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.51,297.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.5,298.50 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.50,298.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.5,299.52 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.52,302.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:302.33,303.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:303.51,305.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:307.9,307.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.5,309.47 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.47,311.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.5,314.54 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,314.91 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.5,315.51 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.51,315.86 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.63 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.63,316.104 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.5,318.54 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.54,318.91 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.5,319.51 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.51,319.86 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.5,320.63 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.63,320.104 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.55 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.55,322.93 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.5,323.52 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.52,323.88 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.5,324.64 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.64,324.106 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.5,326.13 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.13,328.6 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:329.5,329.16 1 1
codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
@@ -201,7 +220,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,122.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -640,29 +659,29 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:288.74,290.22 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:290.22,295.49 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:295.49,297.4 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:297.9,300.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.9,302.83 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.83,304.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.9,306.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.33,308.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.3,310.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.27,311.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.34,312.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.38,313.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.35,315.7 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:317.5,317.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:320.4,320.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:325.2,326.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.36,328.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.2,330.76 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.76,332.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:333.2,334.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.35,335.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.14,337.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:339.2,339.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:342.137,347.24 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:347.24,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:350.2,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:435.74,444.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.9,303.126 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.126,305.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.9,307.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.33,309.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.3,311.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.27,312.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.34,313.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.38,314.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:314.35,316.7 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:318.5,318.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:321.4,321.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.2,327.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:327.36,329.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.5,331.122 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.122,333.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.2,335.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.35,336.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:336.14,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:340.2,340.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:436.74,445.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:16.48,18.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:18.55,19.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.23,21.4 1 0
@@ -860,8 +879,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.2,81.51 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.51,83.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:85.2,90.86 4 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:90.86,95.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.2,96.87 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.87,99.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.5,96.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.73,99.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.2,101.83 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.83,104.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:107.5,107.129 1 0
@@ -883,169 +902,184 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:152.2,155.42 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:155.42,157.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.8,160.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,161.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,166.79 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:166.79,168.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.63,171.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:173.2,173.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:177.119,181.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.24,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:184.2,185.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.13,187.68 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:187.68,189.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.2,191.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.19,193.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:195.2,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.12,198.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.28,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:202.3,202.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,206.50 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:206.50,208.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,209.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:213.193,215.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:215.9,217.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.2,223.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.32,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:226.2,227.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.24,229.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:230.2,236.33 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.33,238.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:239.5,240.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.40,242.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:242.20,244.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.21,246.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.4,247.59 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.59,249.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.4,253.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.40,257.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.8,259.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.23,261.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:262.2,262.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.55,269.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.15,271.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.5,272.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.9,276.26 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.26,278.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.9,280.23 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:280.23,282.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.9,285.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.27,288.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.24,289.24 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.60,299.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.22,301.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.5,303.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.9,307.29 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.29,311.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.31,314.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:315.28,317.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.9,323.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:328.177,334.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.33,336.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.2,337.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.18,339.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:340.2,340.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.101,346.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:346.57,347.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.78,349.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.2,351.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.19,353.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.2,354.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.19,356.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.2,357.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.61,358.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.57,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:13.45,15.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:15.55,18.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.47,23.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,24.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:24.32,26.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:27.3,29.44 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:33.46,35.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:35.55,38.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:44.76,46.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:46.14,48.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:50.2,51.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,167.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:167.27,167.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.5,168.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.43,169.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:169.41,169.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:170.9,171.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:171.43,172.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:172.27,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:178.5,178.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:182.119,186.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:186.24,188.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:189.2,190.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.13,192.68 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:192.68,194.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.2,196.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.19,198.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:200.2,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:201.12,203.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:203.28,205.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:207.3,207.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,211.50 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:211.50,213.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:214.2,214.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.193,220.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.9,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.2,228.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.32,230.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:231.2,232.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:232.24,234.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:235.2,241.33 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.33,243.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.5,245.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:245.40,247.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.20,249.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.4,252.59 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.59,254.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.4,258.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.40,262.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.8,264.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.23,266.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.55,274.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:274.15,276.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.5,277.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.9,281.26 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.26,283.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:284.9,285.23 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:285.23,287.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:288.9,290.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:291.27,293.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.24,294.24 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.60,304.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:304.22,306.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.5,308.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:308.9,312.29 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.29,316.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.31,319.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:320.28,322.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.9,328.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:333.177,339.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:339.33,341.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.2,342.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.18,344.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:345.2,345.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:349.101,351.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.57,352.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:352.78,354.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.2,356.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.19,358.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.2,359.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.19,361.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.61,363.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.57,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:18.45,20.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:20.55,23.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:26.47,28.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:28.55,29.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.32,31.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:32.3,34.44 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:38.46,40.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:40.55,43.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:49.76,51.14 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:51.14,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.2,54.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.26,56.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:57.2,58.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.13,60.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.2,61.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.30,63.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.28,69.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,75.43 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.43,78.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:79.2,79.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.50,88.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.24,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:91.2,92.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.35,94.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.2,95.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,98.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.14,99.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.39,101.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.4,103.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.3,105.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.12,106.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,110.17 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.17,111.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,115.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.63,117.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,118.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.80,119.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,140.18 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.18,143.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.4,145.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.17,147.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.4,148.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,151.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.110,159.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.14,161.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.2,174.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.96,181.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.14,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.2,187.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.31,188.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.53,190.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.12,192.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.3,194.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.61,195.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.3,198.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:198.14,200.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.36,203.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.4,205.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.53,209.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.12,211.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,216.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.2,219.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.26,220.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.35,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.35,225.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.2,228.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.45,234.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.39,236.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.63,238.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.32,242.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,243.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.17,245.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.2,247.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.21,249.48 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.10,251.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.68,263.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.46,273.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.61,291.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.59,296.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:296.15,299.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:55.2,56.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:56.14,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.2,59.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.26,61.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,63.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:63.13,65.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.2,66.30 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.30,68.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,71.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:71.28,74.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.2,80.43 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.43,83.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:84.2,84.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.50,93.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.24,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.2,97.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.5,100.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.33,103.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.14,104.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.39,106.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.4,108.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.9,110.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.18,111.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.9,114.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.31,115.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.9,118.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.43,119.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.9,122.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.18,122.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:123.9,125.44 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.44,126.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.28,126.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.9,128.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.23,128.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.3,131.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.63,133.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.3,134.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.80,135.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.9,141.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.19,142.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,146.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:146.38,156.18 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.18,159.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.4,161.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:161.17,163.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.4,164.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:173.110,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.14,177.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.2,190.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.96,197.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.14,199.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.2,203.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.31,204.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:204.53,206.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.12,208.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.61,211.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,214.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:214.14,216.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.36,219.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.4,221.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.53,225.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.12,227.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,232.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.2,235.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:235.26,236.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.35,238.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.35,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,244.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.45,250.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.20,252.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.5,254.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.53,256.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.46,257.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:257.27,259.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.5,263.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.35,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:267.5,268.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.24,270.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:271.13,272.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.68,284.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:287.46,294.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:297.61,312.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.59,317.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:317.15,320.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.58,13.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.5,14.22 1 0
@@ -1062,218 +1096,238 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:15.2,26.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:29.38,31.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:33.46,35.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:37.31,40.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:13.55,15.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:15.32,17.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.2,18.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.41,27.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.32,39.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:39.23,41.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:42.2,43.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.24,45.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.2,49.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.15,51.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.2,55.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.51,60.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.41,62.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:63.2,65.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.110,69.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:69.14,73.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.2,76.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.118,80.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.14,83.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:83.16,86.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.35,88.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.4,89.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.36,91.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.4,94.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.59,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.2,103.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.51,107.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:107.23,109.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.2,110.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.13,112.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.100,114.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.3,116.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.32,123.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.44,127.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.53,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.2,130.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:133.40,135.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.20,136.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.40,138.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.3,140.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.2,142.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.12,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.2,145.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.52,149.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.38,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.2,153.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.27,154.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.34,155.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.3,157.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.36,158.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.3,160.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.2,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.67,173.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:173.22,175.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.12,177.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.3,180.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.63,182.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.3,185.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.12,187.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.3,189.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.48,191.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.18,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:201.2,201.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.46,209.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:209.32,211.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.2,212.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.34,214.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.2,215.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.32,217.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.32,219.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.2,221.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.83,228.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.102,230.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:230.36,232.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.136,234.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:235.4,237.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.34,239.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.2,243.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.65,244.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.53,246.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.37,248.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.137,250.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.5,253.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:253.35,255.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.2,259.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.80,264.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.22,266.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,269.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:269.40,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.2,272.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.34,273.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:273.31,274.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.3,277.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.16,278.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.3,280.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.32,282.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.36,289.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.39,294.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:294.13,296.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:297.2,299.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.66,301.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.2,303.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.54,305.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.2,306.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.51,308.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.69,314.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.2,315.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.43,321.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.13,323.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,325.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:325.11,327.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.2,329.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.14,331.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.56,339.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.89,341.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.2,342.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:346.52,347.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.32,349.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.28,351.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.3,352.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.34,354.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.3,355.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.42,357.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.3,358.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.2,363.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.27,365.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.2,366.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.36,368.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.2,372.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.49,374.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.24,376.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:379.2,380.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.25,382.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.33,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.2,387.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.67,393.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:393.35,395.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:396.2,397.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.31,399.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:400.2,400.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.69,404.37 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.37,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,407.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:410.50,412.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.22,414.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.12,416.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:417.3,419.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.32,421.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.3,423.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.35,425.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.3,428.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,432.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.49,434.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,436.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.2,438.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.67,444.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:444.28,446.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.12,447.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.3,451.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.12,452.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.3,454.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.43,456.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.3,458.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.23,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.3,463.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.48,465.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.3,467.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.25,469.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:471.3,472.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.50,474.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:475.3,476.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.2,478.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:72.90,75.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:75.20,77.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:78.2,80.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:80.23,82.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:83.2,84.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:84.22,86.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:87.2,88.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:88.27,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,97.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.38,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:100.8,102.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:103.5,106.38 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:106.38,108.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.5,109.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.38,111.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:113.2,115.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:115.46,115.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.46,117.64 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:126.2,126.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.30,130.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:130.6,132.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.20,134.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.3,135.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.17,137.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:138.3,139.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.52,141.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.3,143.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.23,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:147.3,148.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:148.15,150.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,20.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.32,22.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.2,23.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:27.41,32.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.41,39.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:41.32,44.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.23,46.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.2,48.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:48.24,50.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.2,54.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.15,56.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.2,60.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:64.51,65.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:65.41,67.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,70.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:73.110,74.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.14,78.3 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.2,81.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:84.118,85.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.14,88.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.16,91.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.35,93.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.4,94.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.36,96.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,99.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.59,101.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.4,102.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.2,108.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.51,112.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.23,114.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.2,115.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.13,117.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.100,119.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.3,121.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.2,123.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.32,128.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.44,132.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:132.56,134.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.5,135.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.40,140.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.20,141.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.3,145.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.2,147.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.12,149.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.52,154.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.38,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.2,158.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.27,159.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:159.34,160.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.3,162.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.36,163.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:167.2,167.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.67,177.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:177.25,180.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.18,182.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.9,185.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.80,187.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.9,191.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:191.18,193.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.9,195.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.54,197.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.9,200.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:200.24,202.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.9,205.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.5,207.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:213.46,217.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.34,219.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.5,220.37 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.37,222.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.5,223.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.34,225.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.38,227.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.5,229.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.83,236.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.102,238.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.36,240.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.136,242.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.4,245.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:245.34,247.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.2,251.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.65,252.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.53,254.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.37,256.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.137,258.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.5,261.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.35,263.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.80,272.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.22,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,277.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.40,279.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.34,281.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.31,282.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.3,285.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.16,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,288.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.32,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.2,292.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.36,297.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.39,302.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.13,304.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.2,307.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:307.66,309.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.2,311.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.54,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,314.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.51,316.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,319.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.69,322.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.2,323.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.43,329.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.13,331.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.11,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.14,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.56,347.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.89,349.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.2,350.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.52,355.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.32,357.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.28,359.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.3,360.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.34,362.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.42,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:368.2,371.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.27,373.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.2,374.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.36,376.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,380.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.49,382.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:382.24,384.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:387.2,388.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:388.25,390.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,391.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.33,393.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,395.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:399.67,401.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:401.35,403.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.2,405.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.31,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,408.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.69,412.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.40,414.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.5,415.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.50,420.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:420.25,424.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.18,426.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.9,429.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:429.38,431.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.9,433.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.52,435.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.9,439.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.18,441.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.9,443.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.55,445.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.9,447.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.5,449.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.67,455.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.31,457.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:457.18,458.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.9,462.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.18,463.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.9,465.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.49,467.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.9,469.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.40,471.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.9,474.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:474.54,476.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.9,478.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.31,480.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.9,483.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:483.56,485.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.9,487.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.5,489.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:85.90,88.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:88.20,90.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,93.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:93.23,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:96.2,97.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:97.22,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:100.2,101.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:101.27,103.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:104.2,110.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:110.38,113.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:113.8,115.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:116.5,119.38 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:119.38,121.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.5,122.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.38,124.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.5,126.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.49,126.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.76,126.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.5,127.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.50,127.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.78,127.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.5,128.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.49,128.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.76,128.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.5,129.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.36,129.82 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.87,129.149 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.5,132.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.27,132.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.5,133.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.28,133.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.5,134.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.27,134.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.5,135.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.32,135.93 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,139.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:139.46,139.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.46,141.64 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:150.2,150.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:153.30,154.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.6,156.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:156.20,158.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.3,159.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.17,161.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:162.3,163.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.52,165.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.3,167.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.23,169.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:171.3,172.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.15,174.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 0
@@ -1309,136 +1363,155 @@ 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/internal/appconfig/config.go:55.29,73.2 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:77.35,79.22 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:79.22,81.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:83.5,84.19 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:84.19,87.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:87.11,88.91 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:88.91,90.10 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.5,96.53 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.53,98.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:99.5,99.15 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:103.66,105.16 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:105.16,106.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:106.43,108.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.3,109.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:111.2,115.45 4 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:115.45,116.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.20,118.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.3,119.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:121.2,121.22 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.37,127.2 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:130.39,131.25 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:131.25,133.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.56 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.56,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.34 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.34,139.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.2,140.32 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.32,142.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.2,143.32 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.32,145.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.5,146.39 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,148.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.5,149.41 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.41,151.6 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.5,152.39 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.39,152.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.5,153.39 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.39,153.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.2,154.38 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.38,156.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.2,157.53 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.53,159.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:163.47,164.58 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:164.58,166.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.2,167.56 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.56,169.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.2,170.36 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.36,172.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.2,173.58 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.58,175.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.2,176.56 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.56,178.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.2,179.36 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.36,181.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.2,182.59 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.59,184.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.2,185.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.57,187.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.2,188.37 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.37,190.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:193.38,195.72 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.72,197.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:197.8,199.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.17,201.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.3,202.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:204.5,204.27 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.43,216.37 3 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:216.37,216.79 1 20
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.5,217.44 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.44,219.20 2 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:219.20,219.39 1 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.9,221.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.23,221.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.42,221.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.88,221.103 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:222.9,222.23 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.5,224.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.54,226.20 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:226.20,226.41 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.9,228.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:228.23,229.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.30,229.73 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:230.13,230.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:232.9,232.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.5,235.50 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.50,237.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.5,238.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.51,240.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.60,243.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.5,244.58 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.58,246.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.5,247.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.57,249.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.5,250.64 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.64,252.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.5,253.62 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.62,255.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.5,256.62 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.62,258.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.63 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.63,261.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.57,265.33 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.33,266.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:266.51,268.14 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.9,270.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.5,272.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.47,274.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.54,277.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.5,278.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.51,278.86 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.5,279.63 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.63,279.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.5,281.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.54,281.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.5,282.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.51,282.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:62.29,85.2 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.35,91.22 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:91.22,93.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:95.5,96.19 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:96.19,99.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:99.11,100.91 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:100.91,102.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.5,108.53 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.53,110.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:111.5,111.15 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:115.66,117.16 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:117.16,118.43 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:118.43,120.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:121.3,121.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:123.2,127.45 4 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:127.45,128.20 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:128.20,130.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:131.3,131.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:133.2,133.22 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:136.37,139.2 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.39,143.25 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:143.25,145.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,146.56 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.56,148.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.2,149.34 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.34,151.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.2,152.32 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.32,154.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.2,155.32 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.32,157.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.5,158.39 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.39,160.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.5,161.41 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.41,163.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.5,164.39 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.39,164.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.5,165.39 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.39,165.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.5,166.41 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.41,168.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.5,169.58 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.58,171.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.5,172.59 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.59,174.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.5,175.58 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.58,177.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.5,178.36 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.36,180.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.5,181.56 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.56,183.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:187.47,188.58 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:188.58,190.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.2,191.56 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.56,193.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.2,194.36 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.36,196.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.2,197.58 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.58,199.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.2,200.56 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.56,202.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.2,203.36 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.36,205.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.2,206.59 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.59,208.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.2,209.57 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.57,211.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.2,212.37 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.37,214.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:217.38,219.72 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:219.72,221.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:221.8,223.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:223.17,225.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:226.3,226.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:228.5,228.27 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:235.43,240.37 3 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:240.37,240.79 1 24
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.44 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.44,243.20 2 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:243.20,243.39 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:244.9,245.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.23,245.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.42,245.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.88,245.103 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:246.9,246.23 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.5,248.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.54,250.20 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:250.20,250.41 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:251.9,252.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:252.23,253.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:253.30,253.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:254.13,254.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:256.9,256.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.50,261.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.51,264.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.5,265.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.60,267.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.5,268.58 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.58,270.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.5,271.57 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.57,273.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.5,274.64 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.64,276.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.62 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.62,279.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.5,280.62 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.62,282.6 2 0
codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,283.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.5,285.55 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.55,285.93 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.52 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.52,286.88 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.5,287.64 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.64,287.106 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.5,289.13 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.13,291.6 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:292.5,292.16 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,285.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.57 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:289.33,290.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:290.51,292.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.9,294.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.5,296.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.50,296.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.5,297.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.51,297.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.5,298.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.50,298.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.5,299.52 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.52,302.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:302.33,303.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:303.51,305.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:307.9,307.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.5,309.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.47,311.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.5,314.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,314.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.5,315.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.51,315.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.63 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.63,316.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.5,318.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.54,318.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.5,319.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.51,319.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.5,320.63 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.63,320.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.55 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.55,322.93 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.5,323.52 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.52,323.88 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.5,324.64 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.64,324.106 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.5,326.13 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.13,328.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:329.5,329.16 1 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 1
codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 1
codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
@@ -1495,7 +1568,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,122.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -1934,29 +2007,29 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:288.74,290.22 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:290.22,295.49 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:295.49,297.4 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:297.9,300.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.9,302.83 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.83,304.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.9,306.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.33,308.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.3,310.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.27,311.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.34,312.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.38,313.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.35,315.7 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:317.5,317.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:320.4,320.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:325.2,326.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.36,328.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.2,330.76 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.76,332.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:333.2,334.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.35,335.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.14,337.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:339.2,339.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:342.137,347.24 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:347.24,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:350.2,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:435.74,444.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.9,303.126 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.126,305.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.9,307.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.33,309.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.3,311.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.27,312.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.34,313.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.38,314.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:314.35,316.7 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:318.5,318.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:321.4,321.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.2,327.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:327.36,329.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.5,331.122 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.122,333.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.2,335.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.35,336.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:336.14,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:340.2,340.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:436.74,445.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:16.48,18.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:18.55,19.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.23,21.4 1 0
@@ -2154,8 +2227,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.2,81.51 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.51,83.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:85.2,90.86 4 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:90.86,95.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.2,96.87 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.87,99.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.5,96.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.73,99.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.2,101.83 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.83,104.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:107.5,107.129 1 0
@@ -2177,169 +2250,184 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:152.2,155.42 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:155.42,157.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.8,160.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,161.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,166.79 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:166.79,168.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.63,171.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:173.2,173.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:177.119,181.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.24,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:184.2,185.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.13,187.68 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:187.68,189.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.2,191.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.19,193.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:195.2,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.12,198.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.28,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:202.3,202.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,206.50 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:206.50,208.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,209.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:213.193,215.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:215.9,217.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.2,223.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.32,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:226.2,227.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.24,229.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:230.2,236.33 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.33,238.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:239.5,240.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.40,242.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:242.20,244.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.21,246.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.4,247.59 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.59,249.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.4,253.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.40,257.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.8,259.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.23,261.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:262.2,262.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.55,269.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.15,271.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.5,272.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.9,276.26 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.26,278.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.9,280.23 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:280.23,282.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.9,285.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.27,288.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.24,289.24 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.60,299.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.22,301.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.5,303.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.9,307.29 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.29,311.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.31,314.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:315.28,317.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.9,323.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:328.177,334.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.33,336.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.2,337.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.18,339.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:340.2,340.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.101,346.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:346.57,347.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.78,349.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.2,351.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.19,353.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.2,354.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.19,356.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.2,357.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.61,358.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.57,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:13.45,15.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:15.55,18.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.47,23.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,24.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:24.32,26.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:27.3,29.44 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:33.46,35.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:35.55,38.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:44.76,46.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:46.14,48.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:50.2,51.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,167.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:167.27,167.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.5,168.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.43,169.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:169.41,169.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:170.9,171.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:171.43,172.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:172.27,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:178.5,178.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:182.119,186.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:186.24,188.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:189.2,190.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.13,192.68 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:192.68,194.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.2,196.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.19,198.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:200.2,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:201.12,203.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:203.28,205.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:207.3,207.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,211.50 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:211.50,213.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:214.2,214.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.193,220.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.9,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.2,228.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.32,230.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:231.2,232.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:232.24,234.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:235.2,241.33 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.33,243.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.5,245.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:245.40,247.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.20,249.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.4,252.59 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.59,254.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.4,258.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.40,262.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.8,264.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.23,266.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.55,274.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:274.15,276.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.5,277.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.9,281.26 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.26,283.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:284.9,285.23 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:285.23,287.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:288.9,290.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:291.27,293.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.24,294.24 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.60,304.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:304.22,306.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.5,308.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:308.9,312.29 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.29,316.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.31,319.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:320.28,322.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.9,328.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:333.177,339.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:339.33,341.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.2,342.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.18,344.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:345.2,345.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:349.101,351.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.57,352.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:352.78,354.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.2,356.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.19,358.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.2,359.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.19,361.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.61,363.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.57,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:18.45,20.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:20.55,23.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:26.47,28.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:28.55,29.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.32,31.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:32.3,34.44 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:38.46,40.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:40.55,43.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:49.76,51.14 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:51.14,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.2,54.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.26,56.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:57.2,58.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.13,60.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.2,61.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.30,63.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.28,69.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,75.43 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.43,78.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:79.2,79.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.50,88.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.24,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:91.2,92.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.35,94.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.2,95.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,98.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.14,99.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.39,101.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.4,103.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.3,105.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.12,106.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,110.17 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.17,111.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,115.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.63,117.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,118.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.80,119.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,140.18 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.18,143.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.4,145.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.17,147.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.4,148.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,151.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.110,159.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.14,161.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.2,174.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.96,181.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.14,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.2,187.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.31,188.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.53,190.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.12,192.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.3,194.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.61,195.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.3,198.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:198.14,200.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.36,203.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.4,205.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.53,209.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.12,211.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,216.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.2,219.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.26,220.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.35,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.35,225.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.2,228.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.45,234.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.39,236.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.63,238.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.32,242.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,243.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.17,245.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.2,247.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.21,249.48 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.10,251.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.68,263.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.46,273.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.61,291.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.59,296.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:296.15,299.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:55.2,56.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:56.14,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.2,59.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.26,61.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,63.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:63.13,65.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.2,66.30 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.30,68.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,71.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:71.28,74.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.2,80.43 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.43,83.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:84.2,84.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.50,93.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.24,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.2,97.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.5,100.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.33,103.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.14,104.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.39,106.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.4,108.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.9,110.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.18,111.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.9,114.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.31,115.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.9,118.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.43,119.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.9,122.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.18,122.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:123.9,125.44 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.44,126.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.28,126.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.9,128.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.23,128.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.3,131.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.63,133.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.3,134.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.80,135.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.9,141.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.19,142.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,146.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:146.38,156.18 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.18,159.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.4,161.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:161.17,163.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.4,164.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:173.110,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.14,177.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.2,190.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.96,197.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.14,199.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.2,203.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.31,204.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:204.53,206.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.12,208.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.61,211.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,214.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:214.14,216.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.36,219.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.4,221.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.53,225.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.12,227.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,232.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.2,235.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:235.26,236.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.35,238.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.35,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,244.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.45,250.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.20,252.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.5,254.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.53,256.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.46,257.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:257.27,259.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.5,263.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.35,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:267.5,268.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.24,270.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:271.13,272.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.68,284.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:287.46,294.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:297.61,312.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.59,317.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:317.15,320.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.58,13.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.5,14.22 1 0
@@ -2356,218 +2444,238 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:15.2,26.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:29.38,31.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:33.46,35.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:37.31,40.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:13.55,15.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:15.32,17.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.2,18.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.41,27.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.32,39.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:39.23,41.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:42.2,43.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.24,45.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.2,49.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.15,51.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.2,55.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.51,60.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.41,62.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:63.2,65.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.110,69.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:69.14,73.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.2,76.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.118,80.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.14,83.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:83.16,86.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.35,88.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.4,89.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.36,91.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.4,94.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.59,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.2,103.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.51,107.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:107.23,109.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.2,110.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.13,112.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.100,114.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.3,116.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.32,123.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.44,127.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.53,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.2,130.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:133.40,135.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.20,136.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.40,138.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.3,140.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.2,142.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.12,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.2,145.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.52,149.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.38,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.2,153.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.27,154.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.34,155.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.3,157.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.36,158.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.3,160.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.2,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.67,173.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:173.22,175.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.12,177.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.3,180.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.63,182.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.3,185.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.12,187.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.3,189.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.48,191.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.18,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:201.2,201.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.46,209.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:209.32,211.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.2,212.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.34,214.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.2,215.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.32,217.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.32,219.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.2,221.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.83,228.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.102,230.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:230.36,232.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.136,234.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:235.4,237.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.34,239.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.2,243.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.65,244.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.53,246.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.37,248.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.137,250.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.5,253.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:253.35,255.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.2,259.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.80,264.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.22,266.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,269.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:269.40,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.2,272.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.34,273.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:273.31,274.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.3,277.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.16,278.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.3,280.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.32,282.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.36,289.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.39,294.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:294.13,296.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:297.2,299.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.66,301.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.2,303.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.54,305.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.2,306.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.51,308.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.69,314.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.2,315.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.43,321.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.13,323.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,325.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:325.11,327.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.2,329.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.14,331.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.56,339.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.89,341.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.2,342.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:346.52,347.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.32,349.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.28,351.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.3,352.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.34,354.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.3,355.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.42,357.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.3,358.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.2,363.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.27,365.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.2,366.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.36,368.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.2,372.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.49,374.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.24,376.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:379.2,380.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.25,382.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.33,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.2,387.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.67,393.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:393.35,395.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:396.2,397.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.31,399.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:400.2,400.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.69,404.37 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.37,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,407.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:410.50,412.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.22,414.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.12,416.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:417.3,419.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.32,421.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.3,423.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.35,425.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.3,428.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,432.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.49,434.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,436.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.2,438.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.67,444.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:444.28,446.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.12,447.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.3,451.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.12,452.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.3,454.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.43,456.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.3,458.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.23,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.3,463.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.48,465.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.3,467.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.25,469.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:471.3,472.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.50,474.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:475.3,476.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.2,478.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:72.90,75.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:75.20,77.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:78.2,80.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:80.23,82.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:83.2,84.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:84.22,86.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:87.2,88.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:88.27,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,97.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.38,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:100.8,102.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:103.5,106.38 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:106.38,108.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.5,109.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.38,111.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:113.2,115.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:115.46,115.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.46,117.64 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:126.2,126.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.30,130.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:130.6,132.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.20,134.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.3,135.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.17,137.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:138.3,139.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.52,141.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.3,143.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.23,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:147.3,148.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:148.15,150.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,20.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.32,22.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.2,23.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:27.41,32.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.41,39.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:41.32,44.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.23,46.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.2,48.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:48.24,50.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.2,54.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.15,56.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.2,60.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:64.51,65.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:65.41,67.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,70.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:73.110,74.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.14,78.3 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.2,81.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:84.118,85.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.14,88.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.16,91.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.35,93.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.4,94.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.36,96.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,99.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.59,101.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.4,102.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.2,108.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.51,112.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.23,114.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.2,115.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.13,117.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.100,119.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.3,121.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.2,123.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.32,128.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.44,132.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:132.56,134.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.5,135.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.40,140.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.20,141.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.3,145.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.2,147.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.12,149.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.52,154.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.38,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.2,158.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.27,159.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:159.34,160.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.3,162.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.36,163.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:167.2,167.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.67,177.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:177.25,180.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.18,182.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.9,185.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.80,187.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.9,191.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:191.18,193.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.9,195.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.54,197.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.9,200.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:200.24,202.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.9,205.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.5,207.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:213.46,217.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.34,219.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.5,220.37 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.37,222.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.5,223.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.34,225.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.38,227.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.5,229.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.83,236.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.102,238.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.36,240.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.136,242.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.4,245.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:245.34,247.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.2,251.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.65,252.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.53,254.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.37,256.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.137,258.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.5,261.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.35,263.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.80,272.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.22,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,277.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.40,279.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.34,281.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.31,282.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.3,285.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.16,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,288.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.32,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.2,292.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.36,297.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.39,302.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.13,304.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.2,307.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:307.66,309.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.2,311.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.54,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,314.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.51,316.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,319.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.69,322.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.2,323.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.43,329.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.13,331.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.11,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.14,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.56,347.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.89,349.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.2,350.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.52,355.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.32,357.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.28,359.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.3,360.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.34,362.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.42,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:368.2,371.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.27,373.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.2,374.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.36,376.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,380.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.49,382.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:382.24,384.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:387.2,388.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:388.25,390.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,391.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.33,393.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,395.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:399.67,401.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:401.35,403.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.2,405.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.31,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,408.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.69,412.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.40,414.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.5,415.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.50,420.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:420.25,424.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.18,426.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.9,429.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:429.38,431.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.9,433.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.52,435.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.9,439.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.18,441.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.9,443.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.55,445.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.9,447.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.5,449.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.67,455.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.31,457.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:457.18,458.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.9,462.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.18,463.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.9,465.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.49,467.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.9,469.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.40,471.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.9,474.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:474.54,476.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.9,478.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.31,480.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.9,483.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:483.56,485.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.9,487.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.5,489.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:85.90,88.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:88.20,90.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,93.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:93.23,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:96.2,97.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:97.22,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:100.2,101.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:101.27,103.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:104.2,110.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:110.38,113.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:113.8,115.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:116.5,119.38 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:119.38,121.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.5,122.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.38,124.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.5,126.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.49,126.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.76,126.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.5,127.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.50,127.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.78,127.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.5,128.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.49,128.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.76,128.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.5,129.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.36,129.82 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.87,129.149 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.5,132.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.27,132.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.5,133.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.28,133.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.5,134.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.27,134.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.5,135.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.32,135.93 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,139.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:139.46,139.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.46,141.64 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:150.2,150.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:153.30,154.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.6,156.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:156.20,158.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.3,159.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.17,161.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:162.3,163.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.52,165.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.3,167.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.23,169.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:171.3,172.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.15,174.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 0
@@ -2603,136 +2711,155 @@ 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/internal/appconfig/config.go:55.29,73.2 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:77.35,79.22 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:79.22,81.6 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:83.5,84.19 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:84.19,87.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:87.11,88.91 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:88.91,90.10 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.5,96.53 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.53,98.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:99.5,99.15 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:103.66,105.16 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:105.16,106.43 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:106.43,108.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.3,109.18 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:111.2,115.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:115.45,116.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.20,118.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.3,119.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:121.2,121.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.37,127.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:130.39,131.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:131.25,133.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.56,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.34,139.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.2,140.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.32,142.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.2,143.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.32,145.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.5,146.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,148.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.5,149.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.41,151.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.5,152.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.39,152.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.5,153.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.39,153.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.2,154.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.38,156.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.2,157.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.53,159.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:163.47,164.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:164.58,166.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.2,167.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.56,169.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.2,170.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.36,172.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.2,173.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.58,175.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.2,176.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.56,178.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.2,179.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.36,181.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.2,182.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.59,184.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.2,185.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.57,187.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.2,188.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.37,190.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:193.38,195.72 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.72,197.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:197.8,199.17 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.17,201.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.3,202.70 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:204.5,204.27 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.43,216.37 3 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:216.37,216.79 1 20
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.5,217.44 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.44,219.20 2 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:219.20,219.39 1 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.9,221.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.23,221.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.42,221.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.88,221.103 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:222.9,222.23 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.5,224.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.54,226.20 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:226.20,226.41 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.9,228.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:228.23,229.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.30,229.73 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:230.13,230.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:232.9,232.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.5,235.50 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.50,237.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.5,238.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.51,240.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.60,243.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.5,244.58 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.58,246.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.5,247.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.57,249.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.5,250.64 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.64,252.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.5,253.62 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.62,255.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.5,256.62 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.62,258.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.63 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.63,261.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.57,265.33 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.33,266.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:266.51,268.14 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.9,270.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.5,272.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.47,274.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.54,277.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.5,278.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.51,278.86 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.5,279.63 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.63,279.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.5,281.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.54,281.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.5,282.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.51,282.86 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,283.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.5,285.55 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.55,285.93 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.52 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.52,286.88 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.5,287.64 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.64,287.106 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.5,289.13 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.13,291.6 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:292.5,292.16 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:62.29,85.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.35,91.22 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:91.22,93.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:95.5,96.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:96.19,99.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:99.11,100.91 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:100.91,102.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.5,108.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.53,110.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:111.5,111.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:115.66,117.16 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:117.16,118.43 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:118.43,120.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:121.3,121.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:123.2,127.45 4 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:127.45,128.20 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:128.20,130.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:131.3,131.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:133.2,133.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:136.37,139.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.39,143.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:143.25,145.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,146.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.56,148.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.2,149.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.34,151.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.2,152.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.32,154.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.2,155.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.32,157.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.5,158.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.39,160.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.5,161.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.41,163.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.5,164.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.39,164.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.5,165.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.39,165.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.5,166.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.41,168.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.5,169.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.58,171.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.5,172.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.59,174.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.5,175.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.58,177.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.5,178.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.36,180.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.5,181.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.56,183.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:187.47,188.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:188.58,190.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.2,191.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.56,193.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.2,194.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.36,196.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.2,197.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.58,199.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.2,200.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.56,202.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.2,203.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.36,205.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.2,206.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.59,208.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.2,209.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.57,211.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.2,212.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.37,214.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:217.38,219.72 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:219.72,221.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:221.8,223.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:223.17,225.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:226.3,226.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:228.5,228.27 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:235.43,240.37 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:240.37,240.79 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.44 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.44,243.20 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:243.20,243.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:244.9,245.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.23,245.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.42,245.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.88,245.103 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:246.9,246.23 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.5,248.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.54,250.20 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:250.20,250.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:251.9,252.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:252.23,253.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:253.30,253.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:254.13,254.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:256.9,256.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.50,261.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.51,264.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.5,265.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.60,267.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.5,268.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.58,270.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.5,271.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.57,273.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.5,274.64 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.64,276.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.62,279.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.5,280.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.62,282.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,285.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:289.33,290.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:290.51,292.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.9,294.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.5,296.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.50,296.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.5,297.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.51,297.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.5,298.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.50,298.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.5,299.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.52,302.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:302.33,303.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:303.51,305.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:307.9,307.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.5,309.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.47,311.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.5,314.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,314.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.5,315.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.51,315.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.63 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.63,316.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.5,318.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.54,318.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.5,319.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.51,319.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.5,320.63 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.63,320.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.55,322.93 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.5,323.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.52,323.88 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.5,324.64 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.64,324.106 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.5,326.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.13,328.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:329.5,329.16 1 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
@@ -2766,30 +2893,30 @@ codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:49.37,51.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:65.19,67.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.39 3 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.39,84.6 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.5,87.39 2 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.39,89.6 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 5
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 5
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,122.2 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.39 3 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.39,84.6 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.5,87.39 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.39,89.6 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -2964,11 +3091,11 @@ codeberg.org/snonux/hexai/internal/llm/ollama.go:205.53,207.3 1 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:208.2,210.43 3 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:210.43,213.3 2 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:214.2,215.68 2 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:95.108,96.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:96.20,98.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:99.2,100.27 2 0
@@ -2986,8 +3113,8 @@ codeberg.org/snonux/hexai/internal/llm/openai.go:128.16,130.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.2,131.27 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.27,134.3 2 0
codeberg.org/snonux/hexai/internal/llm/openai.go:135.2,137.21 3 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:146.126,147.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:147.20,149.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:150.2,151.27 2 0
@@ -3059,14 +3186,14 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:60.73,60.92 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:61.45,62.26 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:62.26,62.66 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.16 2 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:87.16,89.6 1 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:90.5,90.14 1 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:91.19,92.50 1 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:92.50,94.10 1 1
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.9,96.41 1 5
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.41,99.10 2 3
-codeberg.org/snonux/hexai/internal/llm/provider.go:100.9,100.103 1 5
+codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.16 2 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:87.16,89.6 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:90.5,90.14 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:91.19,92.50 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:92.50,94.10 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.9,96.41 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.41,99.10 2 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:100.9,100.103 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:101.19,102.41 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:102.41,105.10 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:106.9,106.89 1 0
@@ -3077,21 +3204,21 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:111.42,114.10 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:115.9,115.108 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:116.13,117.61 1 0
codeberg.org/snonux/hexai/internal/llm/util.go:6.47,6.77 1 0
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 5
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:17.4,19.12 2 0
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:19.12,21.3 1 0
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:22.2,24.29 2 0
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:24.29,27.3 1 0
-codeberg.org/snonux/hexai/internal/logging/logging.go:27.26,27.37 1 1
-codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 6
-codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 2
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:17.4,19.12 2 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:19.12,21.3 1 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:22.2,24.29 2 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:24.29,27.3 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:27.26,27.37 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 4
+codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 0
codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 7
-codeberg.org/snonux/hexai/internal/logging/logging.go:46.37,47.25 1 1
-codeberg.org/snonux/hexai/internal/logging/logging.go:47.25,48.32 1 1
-codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 0
-codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 1
-codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 0
+codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 3
+codeberg.org/snonux/hexai/internal/logging/logging.go:46.37,47.25 1 5
+codeberg.org/snonux/hexai/internal/logging/logging.go:47.25,48.32 1 4
+codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 1
codeberg.org/snonux/hexai/internal/lsp/context.go:15.96,17.14 2 0
codeberg.org/snonux/hexai/internal/lsp/context.go:18.17,19.19 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:20.16,21.41 1 0
@@ -3228,29 +3355,29 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:288.74,290.22 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:290.22,295.49 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:295.49,297.4 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:297.9,300.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.9,302.83 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.83,304.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.9,306.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.33,308.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.3,310.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.27,311.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.34,312.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.38,313.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.35,315.7 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:317.5,317.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:320.4,320.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:325.2,326.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.36,328.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.2,330.76 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.76,332.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:333.2,334.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.35,335.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.14,337.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:339.2,339.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:342.137,347.24 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:347.24,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:350.2,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:435.74,444.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.9,303.126 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.126,305.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.9,307.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.33,309.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.3,311.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.27,312.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.34,313.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.38,314.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:314.35,316.7 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:318.5,318.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:321.4,321.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.2,327.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:327.36,329.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.5,331.122 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.122,333.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.2,335.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.35,336.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:336.14,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:340.2,340.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:436.74,445.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:16.48,18.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:18.55,19.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.23,21.4 1 0
@@ -3448,8 +3575,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.2,81.51 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.51,83.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:85.2,90.86 4 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:90.86,95.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.2,96.87 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.87,99.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.5,96.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.73,99.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.2,101.83 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.83,104.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:107.5,107.129 1 0
@@ -3471,169 +3598,184 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:152.2,155.42 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:155.42,157.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.8,160.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,161.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,166.79 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:166.79,168.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.63,171.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:173.2,173.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:177.119,181.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.24,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:184.2,185.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.13,187.68 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:187.68,189.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.2,191.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.19,193.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:195.2,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.12,198.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.28,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:202.3,202.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,206.50 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:206.50,208.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,209.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:213.193,215.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:215.9,217.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.2,223.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.32,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:226.2,227.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.24,229.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:230.2,236.33 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.33,238.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:239.5,240.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.40,242.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:242.20,244.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.21,246.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.4,247.59 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.59,249.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.4,253.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.40,257.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.8,259.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.23,261.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:262.2,262.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.55,269.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.15,271.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.5,272.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.9,276.26 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.26,278.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.9,280.23 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:280.23,282.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.9,285.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.27,288.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.24,289.24 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.60,299.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.22,301.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.5,303.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.9,307.29 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.29,311.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.31,314.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:315.28,317.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.9,323.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:328.177,334.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.33,336.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.2,337.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.18,339.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:340.2,340.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.101,346.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:346.57,347.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.78,349.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.2,351.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.19,353.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.2,354.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.19,356.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.2,357.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.61,358.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.57,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:13.45,15.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:15.55,18.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.47,23.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,24.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:24.32,26.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:27.3,29.44 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:33.46,35.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:35.55,38.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:44.76,46.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:46.14,48.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:50.2,51.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,167.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:167.27,167.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.5,168.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.43,169.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:169.41,169.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:170.9,171.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:171.43,172.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:172.27,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:178.5,178.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:182.119,186.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:186.24,188.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:189.2,190.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.13,192.68 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:192.68,194.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.2,196.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.19,198.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:200.2,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:201.12,203.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:203.28,205.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:207.3,207.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,211.50 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:211.50,213.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:214.2,214.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.193,220.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.9,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.2,228.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.32,230.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:231.2,232.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:232.24,234.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:235.2,241.33 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.33,243.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.5,245.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:245.40,247.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.20,249.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.4,252.59 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.59,254.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.4,258.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.40,262.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.8,264.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.23,266.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.55,274.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:274.15,276.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.5,277.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.9,281.26 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.26,283.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:284.9,285.23 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:285.23,287.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:288.9,290.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:291.27,293.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.24,294.24 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.60,304.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:304.22,306.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.5,308.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:308.9,312.29 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.29,316.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.31,319.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:320.28,322.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.9,328.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:333.177,339.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:339.33,341.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.2,342.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.18,344.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:345.2,345.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:349.101,351.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.57,352.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:352.78,354.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.2,356.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.19,358.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.2,359.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.19,361.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.61,363.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.57,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:18.45,20.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:20.55,23.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:26.47,28.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:28.55,29.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.32,31.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:32.3,34.44 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:38.46,40.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:40.55,43.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:49.76,51.14 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:51.14,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.2,54.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.26,56.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:57.2,58.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.13,60.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.2,61.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.30,63.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.28,69.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,75.43 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.43,78.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:79.2,79.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.50,88.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.24,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:91.2,92.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.35,94.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.2,95.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,98.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.14,99.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.39,101.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.4,103.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.3,105.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.12,106.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,110.17 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.17,111.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,115.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.63,117.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,118.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.80,119.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,140.18 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.18,143.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.4,145.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.17,147.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.4,148.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,151.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.110,159.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.14,161.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.2,174.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.96,181.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.14,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.2,187.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.31,188.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.53,190.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.12,192.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.3,194.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.61,195.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.3,198.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:198.14,200.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.36,203.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.4,205.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.53,209.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.12,211.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,216.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.2,219.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.26,220.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.35,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.35,225.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.2,228.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.45,234.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.39,236.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.63,238.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.32,242.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,243.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.17,245.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.2,247.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.21,249.48 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.10,251.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.68,263.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.46,273.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.61,291.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.59,296.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:296.15,299.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:55.2,56.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:56.14,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.2,59.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.26,61.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,63.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:63.13,65.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.2,66.30 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.30,68.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,71.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:71.28,74.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.2,80.43 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.43,83.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:84.2,84.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.50,93.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.24,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.2,97.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.5,100.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.33,103.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.14,104.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.39,106.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.4,108.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.9,110.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.18,111.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.9,114.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.31,115.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.9,118.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.43,119.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.9,122.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.18,122.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:123.9,125.44 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.44,126.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.28,126.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.9,128.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.23,128.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.3,131.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.63,133.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.3,134.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.80,135.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.9,141.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.19,142.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,146.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:146.38,156.18 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.18,159.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.4,161.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:161.17,163.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.4,164.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:173.110,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.14,177.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.2,190.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.96,197.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.14,199.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.2,203.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.31,204.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:204.53,206.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.12,208.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.61,211.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,214.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:214.14,216.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.36,219.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.4,221.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.53,225.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.12,227.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,232.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.2,235.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:235.26,236.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.35,238.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.35,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,244.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.45,250.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.20,252.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.5,254.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.53,256.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.46,257.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:257.27,259.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.5,263.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.35,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:267.5,268.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.24,270.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:271.13,272.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.68,284.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:287.46,294.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:297.61,312.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.59,317.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:317.15,320.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.58,13.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.5,14.22 1 0
@@ -3650,221 +3792,241 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:15.2,26.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:29.38,31.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:33.46,35.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:37.31,40.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:13.55,15.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:15.32,17.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.2,18.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.41,27.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.32,39.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:39.23,41.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:42.2,43.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.24,45.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.2,49.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.15,51.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.2,55.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.51,60.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.41,62.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:63.2,65.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.110,69.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:69.14,73.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.2,76.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.118,80.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.14,83.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:83.16,86.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.35,88.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.4,89.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.36,91.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.4,94.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.59,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.2,103.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.51,107.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:107.23,109.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.2,110.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.13,112.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.100,114.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.3,116.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.32,123.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.44,127.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.53,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.2,130.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:133.40,135.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.20,136.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.40,138.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.3,140.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.2,142.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.12,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.2,145.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.52,149.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.38,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.2,153.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.27,154.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.34,155.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.3,157.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.36,158.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.3,160.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.2,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.67,173.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:173.22,175.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.12,177.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.3,180.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.63,182.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.3,185.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.12,187.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.3,189.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.48,191.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.18,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:201.2,201.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.46,209.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:209.32,211.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.2,212.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.34,214.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.2,215.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.32,217.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.32,219.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.2,221.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.83,228.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.102,230.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:230.36,232.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.136,234.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:235.4,237.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.34,239.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.2,243.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.65,244.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.53,246.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.37,248.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.137,250.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.5,253.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:253.35,255.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.2,259.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.80,264.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.22,266.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,269.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:269.40,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.2,272.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.34,273.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:273.31,274.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.3,277.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.16,278.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.3,280.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.32,282.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.36,289.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.39,294.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:294.13,296.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:297.2,299.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.66,301.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.2,303.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.54,305.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.2,306.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.51,308.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.69,314.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.2,315.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.43,321.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.13,323.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,325.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:325.11,327.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.2,329.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.14,331.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.56,339.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.89,341.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.2,342.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:346.52,347.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.32,349.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.28,351.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.3,352.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.34,354.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.3,355.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.42,357.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.3,358.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.2,363.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.27,365.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.2,366.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.36,368.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.2,372.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.49,374.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.24,376.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:379.2,380.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.25,382.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.33,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.2,387.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.67,393.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:393.35,395.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:396.2,397.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.31,399.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:400.2,400.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.69,404.37 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.37,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,407.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:410.50,412.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.22,414.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.12,416.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:417.3,419.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.32,421.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.3,423.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.35,425.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.3,428.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,432.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.49,434.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,436.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.2,438.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.67,444.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:444.28,446.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.12,447.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.3,451.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.12,452.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.3,454.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.43,456.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.3,458.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.23,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.3,463.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.48,465.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.3,467.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.25,469.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:471.3,472.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.50,474.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:475.3,476.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.2,478.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:72.90,75.20 3 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:75.20,77.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:78.2,80.23 3 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:80.23,82.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:83.2,84.22 2 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:84.22,86.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:87.2,88.27 2 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:88.27,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,97.38 6 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.38,100.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:100.8,102.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:103.5,106.38 4 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:106.38,108.6 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.5,109.38 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.38,111.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:113.2,115.46 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:115.46,115.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.46,117.64 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:126.2,126.10 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.30,130.6 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:130.6,132.20 2 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.20,134.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.3,135.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.17,137.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:138.3,139.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.52,141.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.3,143.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.23,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:147.3,148.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:148.15,150.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 1
-codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 1
-codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,20.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.32,22.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.2,23.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:27.41,32.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.41,39.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:41.32,44.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.23,46.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.2,48.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:48.24,50.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.2,54.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.15,56.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.2,60.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:64.51,65.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:65.41,67.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,70.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:73.110,74.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.14,78.3 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.2,81.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:84.118,85.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.14,88.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.16,91.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.35,93.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.4,94.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.36,96.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,99.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.59,101.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.4,102.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.2,108.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.51,112.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.23,114.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.2,115.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.13,117.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.100,119.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.3,121.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.2,123.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.32,128.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.44,132.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:132.56,134.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.5,135.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.40,140.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.20,141.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.3,145.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.2,147.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.12,149.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.52,154.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.38,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.2,158.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.27,159.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:159.34,160.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.3,162.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.36,163.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:167.2,167.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.67,177.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:177.25,180.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.18,182.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.9,185.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.80,187.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.9,191.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:191.18,193.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.9,195.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.54,197.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.9,200.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:200.24,202.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.9,205.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.5,207.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:213.46,217.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.34,219.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.5,220.37 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.37,222.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.5,223.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.34,225.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.38,227.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.5,229.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.83,236.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.102,238.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.36,240.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.136,242.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.4,245.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:245.34,247.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.2,251.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.65,252.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.53,254.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.37,256.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.137,258.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.5,261.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.35,263.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.80,272.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.22,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,277.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.40,279.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.34,281.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.31,282.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.3,285.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.16,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,288.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.32,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.2,292.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.36,297.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.39,302.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.13,304.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.2,307.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:307.66,309.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.2,311.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.54,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,314.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.51,316.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,319.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.69,322.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.2,323.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.43,329.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.13,331.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.11,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.14,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.56,347.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.89,349.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.2,350.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.52,355.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.32,357.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.28,359.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.3,360.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.34,362.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.42,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:368.2,371.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.27,373.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.2,374.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.36,376.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,380.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.49,382.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:382.24,384.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:387.2,388.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:388.25,390.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,391.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.33,393.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,395.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:399.67,401.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:401.35,403.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.2,405.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.31,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,408.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.69,412.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.40,414.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.5,415.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.50,420.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:420.25,424.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.18,426.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.9,429.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:429.38,431.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.9,433.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.52,435.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.9,439.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.18,441.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.9,443.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.55,445.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.9,447.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.5,449.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.67,455.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.31,457.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:457.18,458.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.9,462.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.18,463.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.9,465.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.49,467.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.9,469.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.40,471.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.9,474.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:474.54,476.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.9,478.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.31,480.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.9,483.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:483.56,485.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.9,487.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.5,489.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:85.90,88.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:88.20,90.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,93.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:93.23,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:96.2,97.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:97.22,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:100.2,101.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:101.27,103.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:104.2,110.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:110.38,113.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:113.8,115.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:116.5,119.38 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:119.38,121.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.5,122.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.38,124.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.5,126.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.49,126.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.76,126.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.5,127.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.50,127.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.78,127.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.5,128.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.49,128.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.76,128.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.5,129.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.36,129.82 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.87,129.149 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.5,132.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.27,132.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.5,133.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.28,133.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.5,134.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.27,134.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.5,135.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.32,135.93 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,139.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:139.46,139.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.46,141.64 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:150.2,150.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:153.30,154.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.6,156.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:156.20,158.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.3,159.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.17,161.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:162.3,163.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.52,165.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.3,167.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.23,169.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:171.3,172.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.15,174.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:22.3,22.17 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:22.17,23.9 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:25.3,26.22 2 0
@@ -3897,136 +4059,155 @@ 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/internal/appconfig/config.go:55.29,73.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:77.35,79.22 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:79.22,81.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:83.5,84.19 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:84.19,87.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:87.11,88.91 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:88.91,90.10 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.5,96.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.53,98.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:99.5,99.15 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:103.66,105.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:105.16,106.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:106.43,108.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.3,109.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:111.2,115.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:115.45,116.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.20,118.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.3,119.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:121.2,121.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.37,127.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:130.39,131.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:131.25,133.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.56,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.34,139.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.2,140.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.32,142.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.2,143.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.32,145.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.5,146.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,148.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.5,149.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.41,151.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.5,152.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.39,152.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.5,153.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.39,153.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.2,154.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.38,156.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.2,157.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.53,159.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:163.47,164.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:164.58,166.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.2,167.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.56,169.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.2,170.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.36,172.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.2,173.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.58,175.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.2,176.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.56,178.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.2,179.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.36,181.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.2,182.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.59,184.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.2,185.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.57,187.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.2,188.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.37,190.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:193.38,195.72 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.72,197.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:197.8,199.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.17,201.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.3,202.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:204.5,204.27 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.43,216.37 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:216.37,216.79 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.5,217.44 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.44,219.20 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:219.20,219.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.9,221.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.23,221.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.42,221.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.88,221.103 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:222.9,222.23 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.5,224.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.54,226.20 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:226.20,226.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.9,228.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:228.23,229.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.30,229.73 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:230.13,230.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:232.9,232.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.5,235.50 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.50,237.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.5,238.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.51,240.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.60,243.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.5,244.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.58,246.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.5,247.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.57,249.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.5,250.64 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.64,252.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.5,253.62 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.62,255.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.5,256.62 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.62,258.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.63,261.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.57,265.33 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.33,266.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:266.51,268.14 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.9,270.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.5,272.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.47,274.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.54,277.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.5,278.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.51,278.86 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.5,279.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.63,279.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.5,281.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.54,281.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.5,282.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.51,282.86 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,283.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.5,285.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.55,285.93 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.52 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.52,286.88 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.5,287.64 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.64,287.106 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.5,289.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.13,291.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:292.5,292.16 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:62.29,85.2 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.35,91.22 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:91.22,93.6 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:95.5,96.19 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:96.19,99.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:99.11,100.91 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:100.91,102.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.5,108.53 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.53,110.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:111.5,111.15 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:115.66,117.16 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:117.16,118.43 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:118.43,120.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:121.3,121.18 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:123.2,127.45 4 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:127.45,128.20 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:128.20,130.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:131.3,131.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:133.2,133.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:136.37,139.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.39,143.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:143.25,145.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,146.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.56,148.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.2,149.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.34,151.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.2,152.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.32,154.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.2,155.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.32,157.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.5,158.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.39,160.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.5,161.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.41,163.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.5,164.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.39,164.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.5,165.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.39,165.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.5,166.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.41,168.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.5,169.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.58,171.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.5,172.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.59,174.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.5,175.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.58,177.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.5,178.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.36,180.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.5,181.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.56,183.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:187.47,188.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:188.58,190.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.2,191.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.56,193.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.2,194.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.36,196.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.2,197.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.58,199.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.2,200.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.56,202.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.2,203.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.36,205.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.2,206.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.59,208.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.2,209.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.57,211.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.2,212.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.37,214.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:217.38,219.72 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:219.72,221.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:221.8,223.17 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:223.17,225.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:226.3,226.70 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:228.5,228.27 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:235.43,240.37 3 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:240.37,240.79 1 24
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.44 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.44,243.20 2 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:243.20,243.39 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:244.9,245.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.23,245.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.42,245.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.88,245.103 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:246.9,246.23 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.5,248.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.54,250.20 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:250.20,250.41 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:251.9,252.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:252.23,253.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:253.30,253.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:254.13,254.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:256.9,256.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.50,261.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.51,264.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.5,265.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.60,267.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.5,268.58 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.58,270.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.5,271.57 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.57,273.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.5,274.64 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.64,276.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.62 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.62,279.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.5,280.62 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.62,282.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,285.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.57 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:289.33,290.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:290.51,292.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.9,294.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.5,296.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.50,296.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.5,297.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.51,297.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.5,298.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.50,298.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.5,299.52 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.52,302.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:302.33,303.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:303.51,305.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:307.9,307.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.5,309.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.47,311.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.5,314.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,314.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.5,315.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.51,315.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.63 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.63,316.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.5,318.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.54,318.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.5,319.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.51,319.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.5,320.63 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.63,320.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.55 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.55,322.93 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.5,323.52 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.52,323.88 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.5,324.64 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.64,324.106 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.5,326.13 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.13,328.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:329.5,329.16 1 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
@@ -4060,30 +4241,30 @@ codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 1
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 6
codeberg.org/snonux/hexai/internal/hexailsp/run.go:49.37,51.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 6
codeberg.org/snonux/hexai/internal/hexailsp/run.go:65.19,67.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.39 3 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.39,84.6 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.5,87.39 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.39,89.6 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,122.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.39 3 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.39,84.6 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.5,87.39 2 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.39,89.6 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 5
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 5
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 6
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -4258,11 +4439,11 @@ codeberg.org/snonux/hexai/internal/llm/ollama.go:205.53,207.3 1 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:208.2,210.43 3 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:210.43,213.3 2 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:214.2,215.68 2 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 5
codeberg.org/snonux/hexai/internal/llm/openai.go:95.108,96.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:96.20,98.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:99.2,100.27 2 0
@@ -4280,8 +4461,8 @@ codeberg.org/snonux/hexai/internal/llm/openai.go:128.16,130.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.2,131.27 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.27,134.3 2 0
codeberg.org/snonux/hexai/internal/llm/openai.go:135.2,137.21 3 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 5
codeberg.org/snonux/hexai/internal/llm/openai.go:146.126,147.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:147.20,149.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:150.2,151.27 2 0
@@ -4353,14 +4534,14 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:60.73,60.92 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:61.45,62.26 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:62.26,62.66 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.16 2 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:87.16,89.6 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:90.5,90.14 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:91.19,92.50 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:92.50,94.10 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.9,96.41 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.41,99.10 2 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:100.9,100.103 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.16 2 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:87.16,89.6 1 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:90.5,90.14 1 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:91.19,92.50 1 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:92.50,94.10 1 1
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.9,96.41 1 5
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.41,99.10 2 3
+codeberg.org/snonux/hexai/internal/llm/provider.go:100.9,100.103 1 5
codeberg.org/snonux/hexai/internal/llm/provider.go:101.19,102.41 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:102.41,105.10 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:106.9,106.89 1 0
@@ -4371,21 +4552,21 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:111.42,114.10 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:115.9,115.108 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:116.13,117.61 1 0
codeberg.org/snonux/hexai/internal/llm/util.go:6.47,6.77 1 0
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:17.4,19.12 2 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:19.12,21.3 1 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:22.2,24.29 2 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:24.29,27.3 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:27.26,27.37 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 0
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 5
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:17.4,19.12 2 0
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:19.12,21.3 1 0
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:22.2,24.29 2 0
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:24.29,27.3 1 0
+codeberg.org/snonux/hexai/internal/logging/logging.go:27.26,27.37 1 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 6
+codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 2
codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 3
-codeberg.org/snonux/hexai/internal/logging/logging.go:46.37,47.25 1 5
-codeberg.org/snonux/hexai/internal/logging/logging.go:47.25,48.32 1 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 7
+codeberg.org/snonux/hexai/internal/logging/logging.go:46.37,47.25 1 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:47.25,48.32 1 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 0
+codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:15.96,17.14 2 0
codeberg.org/snonux/hexai/internal/lsp/context.go:18.17,19.19 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:20.16,21.41 1 0
@@ -4522,29 +4703,29 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:288.74,290.22 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:290.22,295.49 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:295.49,297.4 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:297.9,300.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.9,302.83 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.83,304.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.9,306.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.33,308.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.3,310.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.27,311.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.34,312.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.38,313.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.35,315.7 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:317.5,317.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:320.4,320.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:325.2,326.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.36,328.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.2,330.76 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.76,332.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:333.2,334.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.35,335.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.14,337.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:339.2,339.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:342.137,347.24 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:347.24,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:350.2,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:435.74,444.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.9,303.126 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.126,305.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.9,307.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.33,309.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.3,311.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.27,312.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.34,313.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.38,314.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:314.35,316.7 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:318.5,318.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:321.4,321.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.2,327.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:327.36,329.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.5,331.122 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.122,333.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.2,335.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.35,336.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:336.14,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:340.2,340.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:436.74,445.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:16.48,18.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:18.55,19.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.23,21.4 1 0
@@ -4742,8 +4923,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.2,81.51 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.51,83.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:85.2,90.86 4 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:90.86,95.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.2,96.87 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.87,99.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.5,96.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.73,99.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.2,101.83 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.83,104.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:107.5,107.129 1 0
@@ -4765,169 +4946,184 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:152.2,155.42 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:155.42,157.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.8,160.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,161.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,166.79 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:166.79,168.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.63,171.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:173.2,173.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:177.119,181.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.24,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:184.2,185.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.13,187.68 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:187.68,189.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.2,191.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.19,193.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:195.2,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.12,198.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.28,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:202.3,202.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,206.50 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:206.50,208.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,209.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:213.193,215.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:215.9,217.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.2,223.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.32,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:226.2,227.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.24,229.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:230.2,236.33 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.33,238.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:239.5,240.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.40,242.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:242.20,244.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.21,246.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.4,247.59 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.59,249.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.4,253.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.40,257.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.8,259.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.23,261.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:262.2,262.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.55,269.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.15,271.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.5,272.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.9,276.26 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.26,278.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.9,280.23 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:280.23,282.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.9,285.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.27,288.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.24,289.24 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.60,299.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.22,301.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.5,303.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.9,307.29 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.29,311.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.31,314.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:315.28,317.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.9,323.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:328.177,334.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.33,336.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.2,337.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.18,339.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:340.2,340.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.101,346.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:346.57,347.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.78,349.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.2,351.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.19,353.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.2,354.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.19,356.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.2,357.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.61,358.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.57,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:13.45,15.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:15.55,18.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.47,23.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,24.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:24.32,26.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:27.3,29.44 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:33.46,35.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:35.55,38.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:44.76,46.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:46.14,48.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:50.2,51.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,167.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:167.27,167.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.5,168.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.43,169.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:169.41,169.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:170.9,171.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:171.43,172.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:172.27,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:178.5,178.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:182.119,186.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:186.24,188.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:189.2,190.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.13,192.68 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:192.68,194.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.2,196.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.19,198.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:200.2,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:201.12,203.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:203.28,205.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:207.3,207.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,211.50 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:211.50,213.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:214.2,214.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.193,220.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.9,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.2,228.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.32,230.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:231.2,232.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:232.24,234.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:235.2,241.33 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.33,243.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.5,245.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:245.40,247.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.20,249.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.4,252.59 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.59,254.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.4,258.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.40,262.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.8,264.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.23,266.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.55,274.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:274.15,276.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.5,277.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.9,281.26 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.26,283.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:284.9,285.23 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:285.23,287.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:288.9,290.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:291.27,293.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.24,294.24 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.60,304.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:304.22,306.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.5,308.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:308.9,312.29 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.29,316.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.31,319.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:320.28,322.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.9,328.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:333.177,339.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:339.33,341.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.2,342.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.18,344.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:345.2,345.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:349.101,351.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.57,352.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:352.78,354.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.2,356.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.19,358.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.2,359.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.19,361.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.61,363.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.57,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:18.45,20.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:20.55,23.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:26.47,28.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:28.55,29.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.32,31.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:32.3,34.44 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:38.46,40.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:40.55,43.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:49.76,51.14 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:51.14,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.2,54.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.26,56.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:57.2,58.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.13,60.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.2,61.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.30,63.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.28,69.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,75.43 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.43,78.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:79.2,79.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.50,88.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.24,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:91.2,92.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.35,94.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.2,95.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,98.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.14,99.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.39,101.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.4,103.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.3,105.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.12,106.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,110.17 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.17,111.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,115.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.63,117.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,118.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.80,119.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,140.18 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.18,143.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.4,145.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.17,147.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.4,148.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,151.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.110,159.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.14,161.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.2,174.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.96,181.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.14,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.2,187.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.31,188.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.53,190.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.12,192.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.3,194.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.61,195.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.3,198.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:198.14,200.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.36,203.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.4,205.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.53,209.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.12,211.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,216.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.2,219.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.26,220.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.35,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.35,225.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.2,228.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.45,234.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.39,236.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.63,238.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.32,242.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,243.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.17,245.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.2,247.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.21,249.48 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.10,251.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.68,263.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.46,273.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.61,291.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.59,296.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:296.15,299.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:55.2,56.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:56.14,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.2,59.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.26,61.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,63.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:63.13,65.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.2,66.30 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.30,68.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,71.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:71.28,74.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.2,80.43 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.43,83.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:84.2,84.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.50,93.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.24,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.2,97.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.5,100.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.33,103.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.14,104.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.39,106.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.4,108.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.9,110.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.18,111.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.9,114.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.31,115.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.9,118.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.43,119.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.9,122.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.18,122.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:123.9,125.44 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.44,126.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.28,126.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.9,128.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.23,128.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.3,131.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.63,133.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.3,134.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.80,135.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.9,141.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.19,142.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,146.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:146.38,156.18 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.18,159.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.4,161.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:161.17,163.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.4,164.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:173.110,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.14,177.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.2,190.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.96,197.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.14,199.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.2,203.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.31,204.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:204.53,206.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.12,208.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.61,211.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,214.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:214.14,216.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.36,219.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.4,221.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.53,225.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.12,227.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,232.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.2,235.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:235.26,236.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.35,238.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.35,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,244.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.45,250.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.20,252.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.5,254.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.53,256.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.46,257.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:257.27,259.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.5,263.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.35,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:267.5,268.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.24,270.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:271.13,272.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.68,284.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:287.46,294.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:297.61,312.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.59,317.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:317.15,320.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.58,13.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.5,14.22 1 0
@@ -4944,221 +5140,241 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:15.2,26.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:29.38,31.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:33.46,35.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:37.31,40.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:13.55,15.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:15.32,17.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.2,18.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.41,27.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.32,39.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:39.23,41.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:42.2,43.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.24,45.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.2,49.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.15,51.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.2,55.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.51,60.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.41,62.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:63.2,65.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.110,69.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:69.14,73.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.2,76.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.118,80.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.14,83.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:83.16,86.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.35,88.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.4,89.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.36,91.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.4,94.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.59,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.2,103.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.51,107.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:107.23,109.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.2,110.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.13,112.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.100,114.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.3,116.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.32,123.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.44,127.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.53,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.2,130.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:133.40,135.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.20,136.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.40,138.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.3,140.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.2,142.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.12,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.2,145.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.52,149.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.38,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.2,153.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.27,154.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.34,155.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.3,157.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.36,158.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.3,160.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.2,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.67,173.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:173.22,175.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.12,177.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.3,180.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.63,182.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.3,185.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.12,187.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.3,189.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.48,191.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.18,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:201.2,201.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.46,209.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:209.32,211.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.2,212.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.34,214.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.2,215.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.32,217.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.32,219.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.2,221.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.83,228.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.102,230.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:230.36,232.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.136,234.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:235.4,237.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.34,239.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.2,243.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.65,244.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.53,246.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.37,248.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.137,250.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.5,253.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:253.35,255.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.2,259.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.80,264.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.22,266.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,269.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:269.40,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.2,272.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.34,273.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:273.31,274.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.3,277.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.16,278.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.3,280.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.32,282.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.36,289.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.39,294.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:294.13,296.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:297.2,299.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.66,301.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.2,303.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.54,305.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.2,306.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.51,308.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.69,314.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.2,315.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.43,321.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.13,323.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,325.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:325.11,327.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.2,329.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.14,331.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.56,339.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.89,341.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.2,342.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:346.52,347.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.32,349.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.28,351.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.3,352.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.34,354.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.3,355.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.42,357.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.3,358.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.2,363.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.27,365.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.2,366.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.36,368.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.2,372.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.49,374.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.24,376.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:379.2,380.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.25,382.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.33,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.2,387.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.67,393.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:393.35,395.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:396.2,397.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.31,399.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:400.2,400.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.69,404.37 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.37,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,407.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:410.50,412.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.22,414.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.12,416.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:417.3,419.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.32,421.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.3,423.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.35,425.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.3,428.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,432.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.49,434.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,436.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.2,438.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.67,444.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:444.28,446.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.12,447.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.3,451.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.12,452.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.3,454.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.43,456.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.3,458.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.23,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.3,463.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.48,465.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.3,467.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.25,469.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:471.3,472.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.50,474.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:475.3,476.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.2,478.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:72.90,75.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:75.20,77.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:78.2,80.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:80.23,82.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:83.2,84.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:84.22,86.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:87.2,88.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:88.27,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,97.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.38,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:100.8,102.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:103.5,106.38 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:106.38,108.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.5,109.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.38,111.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:113.2,115.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:115.46,115.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.46,117.64 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:126.2,126.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.30,130.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:130.6,132.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.20,134.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.3,135.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.17,137.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:138.3,139.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.52,141.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.3,143.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.23,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:147.3,148.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:148.15,150.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,20.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.32,22.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.2,23.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:27.41,32.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.41,39.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:41.32,44.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.23,46.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.2,48.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:48.24,50.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.2,54.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.15,56.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.2,60.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:64.51,65.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:65.41,67.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,70.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:73.110,74.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.14,78.3 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.2,81.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:84.118,85.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.14,88.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.16,91.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.35,93.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.4,94.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.36,96.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,99.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.59,101.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.4,102.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.2,108.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.51,112.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.23,114.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.2,115.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.13,117.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.100,119.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.3,121.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.2,123.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.32,128.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.44,132.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:132.56,134.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.5,135.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.40,140.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.20,141.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.3,145.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.2,147.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.12,149.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.52,154.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.38,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.2,158.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.27,159.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:159.34,160.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.3,162.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.36,163.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:167.2,167.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.67,177.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:177.25,180.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.18,182.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.9,185.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.80,187.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.9,191.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:191.18,193.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.9,195.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.54,197.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.9,200.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:200.24,202.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.9,205.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.5,207.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:213.46,217.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.34,219.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.5,220.37 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.37,222.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.5,223.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.34,225.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.38,227.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.5,229.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.83,236.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.102,238.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.36,240.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.136,242.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.4,245.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:245.34,247.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.2,251.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.65,252.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.53,254.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.37,256.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.137,258.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.5,261.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.35,263.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.80,272.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.22,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,277.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.40,279.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.34,281.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.31,282.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.3,285.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.16,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,288.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.32,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.2,292.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.36,297.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.39,302.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.13,304.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.2,307.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:307.66,309.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.2,311.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.54,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,314.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.51,316.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,319.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.69,322.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.2,323.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.43,329.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.13,331.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.11,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.14,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.56,347.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.89,349.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.2,350.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.52,355.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.32,357.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.28,359.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.3,360.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.34,362.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.42,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:368.2,371.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.27,373.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.2,374.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.36,376.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,380.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.49,382.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:382.24,384.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:387.2,388.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:388.25,390.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,391.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.33,393.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,395.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:399.67,401.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:401.35,403.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.2,405.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.31,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,408.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.69,412.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.40,414.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.5,415.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.50,420.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:420.25,424.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.18,426.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.9,429.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:429.38,431.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.9,433.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.52,435.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.9,439.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.18,441.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.9,443.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.55,445.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.9,447.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.5,449.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.67,455.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.31,457.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:457.18,458.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.9,462.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.18,463.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.9,465.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.49,467.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.9,469.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.40,471.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.9,474.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:474.54,476.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.9,478.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.31,480.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.9,483.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:483.56,485.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.9,487.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.5,489.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:85.90,88.20 3 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:88.20,90.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,93.23 3 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:93.23,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:96.2,97.22 2 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:97.22,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:100.2,101.27 2 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:101.27,103.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:104.2,110.38 6 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:110.38,113.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:113.8,115.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:116.5,119.38 4 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:119.38,121.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.5,122.38 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.38,124.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.5,126.49 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.49,126.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.76,126.111 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.5,127.50 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.50,127.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.78,127.115 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.5,128.49 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.49,128.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.76,128.111 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.5,129.36 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.36,129.82 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.87,129.149 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.5,132.27 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.27,132.63 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.5,133.28 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.28,133.66 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.5,134.27 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.27,134.63 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.5,135.32 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.32,135.93 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,139.46 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:139.46,139.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.46,141.64 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:150.2,150.10 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:153.30,154.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.6,156.20 2 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:156.20,158.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.3,159.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.17,161.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:162.3,163.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.52,165.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.3,167.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.23,169.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:171.3,172.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.15,174.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 1
+codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 1
+codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 1
codeberg.org/snonux/hexai/internal/lsp/transport.go:22.3,22.17 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:22.17,23.9 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:25.3,26.22 2 0
@@ -5191,136 +5407,155 @@ 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/internal/appconfig/config.go:55.29,73.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:77.35,79.22 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:79.22,81.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:83.5,84.19 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:84.19,87.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:87.11,88.91 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:88.91,90.10 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.5,96.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.53,98.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:99.5,99.15 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:103.66,105.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:105.16,106.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:106.43,108.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.3,109.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:111.2,115.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:115.45,116.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.20,118.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.3,119.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:121.2,121.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.37,127.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:130.39,131.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:131.25,133.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.56,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.34,139.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.2,140.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.32,142.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.2,143.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.32,145.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.5,146.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,148.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.5,149.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.41,151.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.5,152.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.39,152.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.5,153.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.39,153.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.2,154.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.38,156.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.2,157.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.53,159.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:163.47,164.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:164.58,166.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.2,167.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.56,169.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.2,170.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.36,172.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.2,173.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.58,175.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.2,176.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.56,178.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.2,179.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.36,181.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.2,182.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.59,184.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.2,185.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.57,187.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.2,188.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.37,190.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:193.38,195.72 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.72,197.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:197.8,199.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.17,201.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.3,202.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:204.5,204.27 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.43,216.37 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:216.37,216.79 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.5,217.44 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.44,219.20 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:219.20,219.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.9,221.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.23,221.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.42,221.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.88,221.103 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:222.9,222.23 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.5,224.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.54,226.20 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:226.20,226.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.9,228.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:228.23,229.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.30,229.73 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:230.13,230.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:232.9,232.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.5,235.50 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.50,237.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.5,238.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.51,240.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.60,243.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.5,244.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.58,246.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.5,247.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.57,249.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.5,250.64 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.64,252.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.5,253.62 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.62,255.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.5,256.62 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.62,258.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.63,261.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.57,265.33 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.33,266.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:266.51,268.14 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.9,270.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.5,272.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.47,274.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.54,277.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.5,278.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.51,278.86 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.5,279.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.63,279.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.5,281.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.54,281.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.5,282.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.51,282.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:62.29,85.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.35,91.22 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:91.22,93.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:95.5,96.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:96.19,99.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:99.11,100.91 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:100.91,102.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.5,108.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.53,110.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:111.5,111.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:115.66,117.16 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:117.16,118.43 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:118.43,120.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:121.3,121.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:123.2,127.45 4 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:127.45,128.20 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:128.20,130.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:131.3,131.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:133.2,133.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:136.37,139.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.39,143.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:143.25,145.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,146.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.56,148.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.2,149.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.34,151.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.2,152.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.32,154.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.2,155.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.32,157.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.5,158.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.39,160.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.5,161.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.41,163.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.5,164.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.39,164.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.5,165.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.39,165.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.5,166.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.41,168.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.5,169.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.58,171.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.5,172.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.59,174.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.5,175.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.58,177.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.5,178.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.36,180.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.5,181.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.56,183.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:187.47,188.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:188.58,190.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.2,191.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.56,193.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.2,194.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.36,196.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.2,197.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.58,199.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.2,200.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.56,202.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.2,203.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.36,205.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.2,206.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.59,208.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.2,209.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.57,211.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.2,212.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.37,214.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:217.38,219.72 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:219.72,221.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:221.8,223.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:223.17,225.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:226.3,226.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:228.5,228.27 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:235.43,240.37 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:240.37,240.79 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.44 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.44,243.20 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:243.20,243.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:244.9,245.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.23,245.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.42,245.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.88,245.103 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:246.9,246.23 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.5,248.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.54,250.20 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:250.20,250.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:251.9,252.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:252.23,253.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:253.30,253.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:254.13,254.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:256.9,256.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.50,261.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.51,264.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.5,265.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.60,267.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.5,268.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.58,270.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.5,271.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.57,273.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.5,274.64 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.64,276.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.62,279.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.5,280.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.62,282.6 2 0
codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,283.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.5,285.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.55,285.93 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.52 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.52,286.88 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.5,287.64 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.64,287.106 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.5,289.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.13,291.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:292.5,292.16 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,285.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:289.33,290.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:290.51,292.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.9,294.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.5,296.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.50,296.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.5,297.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.51,297.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.5,298.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.50,298.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.5,299.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.52,302.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:302.33,303.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:303.51,305.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:307.9,307.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.5,309.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.47,311.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.5,314.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,314.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.5,315.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.51,315.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.63 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.63,316.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.5,318.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.54,318.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.5,319.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.51,319.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.5,320.63 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.63,320.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.55,322.93 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.5,323.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.52,323.88 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.5,324.64 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.64,324.106 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.5,326.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.13,328.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:329.5,329.16 1 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
@@ -5377,7 +5612,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,122.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 8
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 8
@@ -5816,29 +6051,29 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:288.74,290.22 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:290.22,295.49 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:295.49,297.4 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:297.9,300.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.9,302.83 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.83,304.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.9,306.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.33,308.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.3,310.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.27,311.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.34,312.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.38,313.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.35,315.7 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:317.5,317.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:320.4,320.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:325.2,326.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.36,328.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.2,330.76 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.76,332.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:333.2,334.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.35,335.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.14,337.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:339.2,339.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:342.137,347.24 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:347.24,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:350.2,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:435.74,444.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.9,303.126 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.126,305.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.9,307.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.33,309.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.3,311.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.27,312.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.34,313.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.38,314.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:314.35,316.7 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:318.5,318.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:321.4,321.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.2,327.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:327.36,329.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.5,331.122 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.122,333.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.2,335.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.35,336.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:336.14,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:340.2,340.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:436.74,445.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:16.48,18.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:18.55,19.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.23,21.4 1 0
@@ -6036,8 +6271,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.2,81.51 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.51,83.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:85.2,90.86 4 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:90.86,95.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.2,96.87 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.87,99.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.5,96.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.73,99.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.2,101.83 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.83,104.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:107.5,107.129 1 0
@@ -6059,169 +6294,184 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:152.2,155.42 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:155.42,157.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.8,160.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,161.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,166.79 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:166.79,168.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.63,171.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:173.2,173.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:177.119,181.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.24,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:184.2,185.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.13,187.68 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:187.68,189.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.2,191.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.19,193.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:195.2,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.12,198.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.28,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:202.3,202.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,206.50 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:206.50,208.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,209.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:213.193,215.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:215.9,217.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.2,223.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.32,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:226.2,227.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.24,229.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:230.2,236.33 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.33,238.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:239.5,240.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.40,242.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:242.20,244.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.21,246.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.4,247.59 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.59,249.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.4,253.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.40,257.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.8,259.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.23,261.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:262.2,262.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.55,269.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.15,271.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.5,272.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.9,276.26 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.26,278.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.9,280.23 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:280.23,282.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.9,285.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.27,288.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.24,289.24 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.60,299.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.22,301.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.5,303.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.9,307.29 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.29,311.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.31,314.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:315.28,317.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.9,323.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:328.177,334.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.33,336.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.2,337.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.18,339.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:340.2,340.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.101,346.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:346.57,347.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.78,349.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.2,351.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.19,353.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.2,354.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.19,356.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.2,357.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.61,358.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.57,360.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:13.45,15.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:15.55,18.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.47,23.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,24.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:24.32,26.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:27.3,29.44 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:33.46,35.55 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:35.55,38.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:44.76,46.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:46.14,48.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:50.2,51.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,167.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:167.27,167.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.5,168.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.43,169.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:169.41,169.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:170.9,171.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:171.43,172.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:172.27,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:178.5,178.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:182.119,186.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:186.24,188.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:189.2,190.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.13,192.68 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:192.68,194.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.2,196.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.19,198.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:200.2,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:201.12,203.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:203.28,205.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:207.3,207.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,211.50 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:211.50,213.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:214.2,214.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.193,220.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.9,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.2,228.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.32,230.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:231.2,232.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:232.24,234.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:235.2,241.33 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.33,243.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.5,245.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:245.40,247.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.20,249.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.4,252.59 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.59,254.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.4,258.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.40,262.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.8,264.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.23,266.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.55,274.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:274.15,276.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.5,277.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.9,281.26 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.26,283.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:284.9,285.23 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:285.23,287.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:288.9,290.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:291.27,293.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.24,294.24 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.60,304.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:304.22,306.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.5,308.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:308.9,312.29 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.29,316.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.31,319.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:320.28,322.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.9,328.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:333.177,339.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:339.33,341.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.2,342.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.18,344.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:345.2,345.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:349.101,351.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.57,352.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:352.78,354.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.2,356.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.19,358.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.2,359.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.19,361.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.61,363.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.57,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:18.45,20.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:20.55,23.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:26.47,28.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:28.55,29.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.32,31.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:32.3,34.44 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:38.46,40.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:40.55,43.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:49.76,51.14 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:51.14,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.2,54.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.26,56.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:57.2,58.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.13,60.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.2,61.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.30,63.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.28,69.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,75.43 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.43,78.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:79.2,79.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.50,88.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.24,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:91.2,92.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.35,94.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.2,95.30 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,98.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.14,99.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.39,101.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.4,103.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.3,105.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.12,106.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,110.17 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.17,111.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,115.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.63,117.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,118.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.80,119.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,140.18 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.18,143.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.4,145.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.17,147.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.4,148.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,151.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.110,159.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.14,161.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.2,174.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.96,181.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.14,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.2,187.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.31,188.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.53,190.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.12,192.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.3,194.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.61,195.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.3,198.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:198.14,200.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.36,203.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.4,205.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.53,209.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.12,211.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,216.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.2,219.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.26,220.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.35,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.35,225.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.2,228.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.45,234.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.39,236.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.63,238.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.32,242.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,243.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.17,245.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.2,247.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.21,249.48 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.10,251.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.68,263.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.46,273.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.61,291.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.59,296.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:296.15,299.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:55.2,56.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:56.14,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.2,59.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.26,61.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,63.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:63.13,65.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.2,66.30 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.30,68.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,71.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:71.28,74.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.2,80.43 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.43,83.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:84.2,84.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.50,93.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.24,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.2,97.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.5,100.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.33,103.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.14,104.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.39,106.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.4,108.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.9,110.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.18,111.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.9,114.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.31,115.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.9,118.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.43,119.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.9,122.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.18,122.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:123.9,125.44 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.44,126.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.28,126.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.9,128.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.23,128.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.3,131.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.63,133.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.3,134.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.80,135.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.9,141.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.19,142.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,146.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:146.38,156.18 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.18,159.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.4,161.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:161.17,163.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.4,164.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:173.110,175.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.14,177.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.2,190.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.96,197.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.14,199.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.2,203.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.31,204.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:204.53,206.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.12,208.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.61,211.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,214.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:214.14,216.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.36,219.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.4,221.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.53,225.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.12,227.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,232.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.2,235.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:235.26,236.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.35,238.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.35,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,244.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.45,250.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.20,252.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.5,254.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.53,256.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.46,257.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:257.27,259.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.5,263.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.35,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:267.5,268.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.24,270.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:271.13,272.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.68,284.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:287.46,294.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:297.61,312.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.59,317.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:317.15,320.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.58,13.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.5,14.22 1 0
@@ -6238,218 +6488,238 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:15.2,26.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:29.38,31.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:33.46,35.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:37.31,40.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:13.55,15.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:15.32,17.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.2,18.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.41,27.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.32,39.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:39.23,41.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:42.2,43.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.24,45.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.2,49.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.15,51.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.2,55.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.51,60.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.41,62.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:63.2,65.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.110,69.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:69.14,73.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.2,76.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.118,80.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.14,83.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:83.16,86.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.35,88.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.4,89.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.36,91.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.4,94.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.59,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.2,103.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.51,107.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:107.23,109.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.2,110.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.13,112.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.100,114.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.3,116.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.32,123.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.44,127.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.53,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.2,130.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:133.40,135.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.20,136.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.40,138.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.3,140.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.2,142.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.12,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.2,145.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.52,149.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.38,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.2,153.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.27,154.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.34,155.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.3,157.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.36,158.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.3,160.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.2,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.67,173.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:173.22,175.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.12,177.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.3,180.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.63,182.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.3,185.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.12,187.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.3,189.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.48,191.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.18,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:201.2,201.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.46,209.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:209.32,211.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.2,212.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.34,214.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.2,215.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.32,217.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.32,219.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.2,221.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.83,228.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.102,230.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:230.36,232.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.136,234.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:235.4,237.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.34,239.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.2,243.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.65,244.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.53,246.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.37,248.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.137,250.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.5,253.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:253.35,255.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.2,259.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.80,264.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.22,266.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,269.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:269.40,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.2,272.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.34,273.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:273.31,274.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.3,277.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.16,278.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.3,280.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.32,282.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.36,289.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.39,294.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:294.13,296.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:297.2,299.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.66,301.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.2,303.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.54,305.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.2,306.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.51,308.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.69,314.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.2,315.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.43,321.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.13,323.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,325.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:325.11,327.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.2,329.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.14,331.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.56,339.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.89,341.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.2,342.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:346.52,347.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.32,349.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.28,351.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.3,352.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.34,354.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.3,355.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.42,357.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.3,358.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.2,363.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.27,365.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.2,366.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.36,368.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.2,372.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.49,374.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.24,376.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:379.2,380.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.25,382.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.33,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.2,387.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.67,393.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:393.35,395.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:396.2,397.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.31,399.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:400.2,400.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.69,404.37 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.37,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,407.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:410.50,412.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.22,414.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.12,416.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:417.3,419.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.32,421.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.3,423.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.35,425.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.3,428.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,432.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.49,434.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,436.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.2,438.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.67,444.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:444.28,446.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.12,447.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.3,451.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.12,452.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.3,454.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.43,456.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.3,458.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.23,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.3,463.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.48,465.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.3,467.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.25,469.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:471.3,472.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.50,474.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:475.3,476.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.2,478.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:72.90,75.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:75.20,77.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:78.2,80.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:80.23,82.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:83.2,84.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:84.22,86.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:87.2,88.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:88.27,90.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,97.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.38,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:100.8,102.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:103.5,106.38 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:106.38,108.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.5,109.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.38,111.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:113.2,115.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:115.46,115.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.46,117.64 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:126.2,126.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.30,130.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:130.6,132.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.20,134.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.3,135.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.17,137.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:138.3,139.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.52,141.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.3,143.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.23,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:147.3,148.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:148.15,150.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,20.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.32,22.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.2,23.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:27.41,32.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.41,39.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:41.32,44.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.23,46.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.2,48.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:48.24,50.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.2,54.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.15,56.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.2,60.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:64.51,65.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:65.41,67.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,70.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:73.110,74.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.14,78.3 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.2,81.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:84.118,85.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.14,88.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.16,91.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.35,93.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.4,94.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.36,96.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,99.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.59,101.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.4,102.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.2,108.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.51,112.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.23,114.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.2,115.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.13,117.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.100,119.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.3,121.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.2,123.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.32,128.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.44,132.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:132.56,134.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.5,135.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.40,140.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.20,141.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.3,145.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.2,147.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.12,149.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.52,154.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.38,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.2,158.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.27,159.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:159.34,160.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.3,162.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.36,163.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:167.2,167.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.67,177.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:177.25,180.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.18,182.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.9,185.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.80,187.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.9,191.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:191.18,193.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.9,195.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.54,197.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.9,200.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:200.24,202.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.9,205.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.5,207.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:213.46,217.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.34,219.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.5,220.37 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.37,222.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.5,223.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.34,225.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.38,227.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.5,229.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.83,236.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.102,238.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.36,240.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.136,242.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.4,245.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:245.34,247.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.2,251.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.65,252.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.53,254.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.37,256.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.137,258.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.5,261.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.35,263.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.80,272.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.22,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,277.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.40,279.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.34,281.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.31,282.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.3,285.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.16,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,288.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.32,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.2,292.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.36,297.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.39,302.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.13,304.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.2,307.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:307.66,309.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.2,311.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.54,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,314.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.51,316.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,319.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.69,322.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.2,323.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.43,329.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.13,331.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.11,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.14,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.56,347.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.89,349.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.2,350.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.52,355.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.32,357.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.28,359.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.3,360.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.34,362.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.42,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:368.2,371.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.27,373.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.2,374.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.36,376.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,380.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.49,382.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:382.24,384.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:387.2,388.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:388.25,390.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,391.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.33,393.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,395.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:399.67,401.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:401.35,403.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.2,405.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.31,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,408.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.69,412.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.40,414.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.5,415.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.50,420.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:420.25,424.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.18,426.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.9,429.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:429.38,431.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.9,433.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.52,435.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.9,439.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.18,441.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.9,443.55 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.55,445.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.9,447.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.5,449.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.67,455.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.31,457.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:457.18,458.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.9,462.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.18,463.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.9,465.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.49,467.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.9,469.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.40,471.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.9,474.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:474.54,476.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.9,478.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.31,480.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.9,483.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:483.56,485.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.9,487.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.5,489.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:85.90,88.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:88.20,90.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,93.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:93.23,95.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:96.2,97.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:97.22,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:100.2,101.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:101.27,103.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:104.2,110.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:110.38,113.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:113.8,115.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:116.5,119.38 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:119.38,121.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.5,122.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.38,124.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.5,126.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.49,126.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.76,126.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.5,127.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.50,127.73 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.78,127.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.5,128.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.49,128.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.76,128.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.5,129.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.36,129.82 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.87,129.149 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.5,132.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.27,132.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.5,133.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.28,133.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.5,134.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.27,134.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.5,135.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.32,135.93 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,139.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:139.46,139.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.46,141.64 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:150.2,150.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:153.30,154.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.6,156.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:156.20,158.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.3,159.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.17,161.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:162.3,163.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.52,165.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.3,167.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.23,169.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:171.3,172.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.15,174.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 0
@@ -6490,136 +6760,155 @@ 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/internal/appconfig/config.go:55.29,73.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:77.35,79.22 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:79.22,81.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:83.5,84.19 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:84.19,87.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:87.11,88.91 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:88.91,90.10 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.5,96.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.53,98.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:99.5,99.15 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:103.66,105.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:105.16,106.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:106.43,108.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.3,109.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:111.2,115.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:115.45,116.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.20,118.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.3,119.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:121.2,121.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.37,127.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:130.39,131.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:131.25,133.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.56,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.34,139.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.2,140.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.32,142.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.2,143.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:143.32,145.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.5,146.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,148.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.5,149.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:149.41,151.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.5,152.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:152.39,152.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.5,153.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.39,153.94 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.2,154.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:154.38,156.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.2,157.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:157.53,159.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:163.47,164.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:164.58,166.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.2,167.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:167.56,169.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.2,170.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:170.36,172.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.2,173.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:173.58,175.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.2,176.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:176.56,178.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.2,179.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:179.36,181.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.2,182.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:182.59,184.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.2,185.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:185.57,187.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.2,188.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:188.37,190.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:193.38,195.72 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.72,197.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:197.8,199.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.17,201.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.3,202.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:204.5,204.27 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.43,216.37 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:216.37,216.79 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.5,217.44 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.44,219.20 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:219.20,219.39 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.9,221.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.23,221.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.42,221.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:221.88,221.103 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:222.9,222.23 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.5,224.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:224.54,226.20 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:226.20,226.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.9,228.23 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:228.23,229.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.30,229.73 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:230.13,230.30 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:232.9,232.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.5,235.50 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:235.50,237.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.5,238.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:238.51,240.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:241.60,243.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.5,244.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:244.58,246.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.5,247.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:247.57,249.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.5,250.64 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:250.64,252.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.5,253.62 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:253.62,255.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.5,256.62 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.62,258.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.63,261.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:262.57,265.33 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.33,266.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:266.51,268.14 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.9,270.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.5,272.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:272.47,274.6 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:277.54,277.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.5,278.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.51,278.86 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.5,279.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:279.63,279.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.5,281.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:281.54,281.91 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.5,282.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.51,282.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:62.29,85.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.35,91.22 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:91.22,93.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:95.5,96.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:96.19,99.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:99.11,100.91 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:100.91,102.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.5,108.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:108.53,110.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:111.5,111.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:115.66,117.16 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:117.16,118.43 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:118.43,120.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:121.3,121.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:123.2,127.45 4 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:127.45,128.20 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:128.20,130.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:131.3,131.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:133.2,133.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:136.37,139.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.39,143.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:143.25,145.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,146.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.56,148.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.2,149.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:149.34,151.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.2,152.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:152.32,154.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.2,155.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:155.32,157.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.5,158.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:158.39,160.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.5,161.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:161.41,163.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.5,164.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:164.39,164.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.5,165.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:165.39,165.94 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.5,166.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:166.41,168.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.5,169.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:169.58,171.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.5,172.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:172.59,174.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.5,175.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:175.58,177.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.5,178.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:178.36,180.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.5,181.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:181.56,183.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:187.47,188.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:188.58,190.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.2,191.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:191.56,193.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.2,194.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:194.36,196.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.2,197.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:197.58,199.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.2,200.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:200.56,202.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.2,203.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:203.36,205.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.2,206.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:206.59,208.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.2,209.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:209.57,211.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.2,212.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:212.37,214.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:217.38,219.72 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:219.72,221.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:221.8,223.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:223.17,225.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:226.3,226.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:228.5,228.27 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:235.43,240.37 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:240.37,240.79 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.5,241.44 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:241.44,243.20 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:243.20,243.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:244.9,245.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.23,245.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.42,245.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:245.88,245.103 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:246.9,246.23 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.5,248.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:248.54,250.20 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:250.20,250.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:251.9,252.23 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:252.23,253.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:253.30,253.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:254.13,254.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:256.9,256.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.5,259.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:259.50,261.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.5,262.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:262.51,264.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.5,265.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:265.60,267.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.5,268.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:268.58,270.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.5,271.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:271.57,273.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.5,274.64 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:274.64,276.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.5,277.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:277.62,279.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.5,280.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:280.62,282.6 2 0
codeberg.org/snonux/hexai/internal/appconfig/config.go:283.5,283.63 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,283.104 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.5,285.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:285.55,285.93 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.52 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.52,286.88 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.5,287.64 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:287.64,287.106 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.5,289.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:289.13,291.6 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:292.5,292.16 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:283.63,285.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.5,286.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:289.33,290.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:290.51,292.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.9,294.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.5,296.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:296.50,296.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.5,297.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:297.51,297.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.5,298.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:298.50,298.84 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.5,299.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:299.52,302.33 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:302.33,303.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:303.51,305.14 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:307.9,307.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.5,309.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:309.47,311.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.5,314.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,314.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.5,315.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:315.51,315.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.63 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.63,316.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.5,318.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:318.54,318.91 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.5,319.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:319.51,319.86 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.5,320.63 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:320.63,320.104 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.55,322.93 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.5,323.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:323.52,323.88 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.5,324.64 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:324.64,324.106 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.5,326.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:326.13,328.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:329.5,329.16 1 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
@@ -6676,7 +6965,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,122.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -7084,19 +7373,19 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:87.30,88.63 1 4
codeberg.org/snonux/hexai/internal/lsp/handlers.go:88.63,90.4 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers.go:92.2,93.33 2 16
codeberg.org/snonux/hexai/internal/lsp/handlers.go:117.72,120.2 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:191.151,194.24 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:191.151,194.24 2 12
codeberg.org/snonux/hexai/internal/lsp/handlers.go:194.24,196.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:197.2,199.24 3 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:197.2,199.24 3 12
codeberg.org/snonux/hexai/internal/lsp/handlers.go:199.24,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:202.2,204.24 3 11
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:204.24,207.3 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:208.2,209.32 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:202.2,204.24 3 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:204.24,207.3 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:208.2,209.32 2 12
codeberg.org/snonux/hexai/internal/lsp/handlers.go:209.32,211.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:212.2,213.14 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:212.2,213.14 2 12
codeberg.org/snonux/hexai/internal/lsp/handlers.go:213.14,215.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:217.2,231.12 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:234.64,238.9 4 9
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:238.9,240.3 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:217.2,231.12 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:234.64,238.9 4 10
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:238.9,240.3 1 9
codeberg.org/snonux/hexai/internal/lsp/handlers.go:242.2,243.16 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers.go:246.56,249.24 3 9
codeberg.org/snonux/hexai/internal/lsp/handlers.go:249.24,251.3 1 1
@@ -7115,29 +7404,29 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:288.74,290.22 1 21
codeberg.org/snonux/hexai/internal/lsp/handlers.go:290.22,295.49 2 8
codeberg.org/snonux/hexai/internal/lsp/handlers.go:295.49,297.4 1 7
codeberg.org/snonux/hexai/internal/lsp/handlers.go:297.9,300.4 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.9,302.83 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:302.83,304.10 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.9,306.33 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:306.33,308.10 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.3,310.27 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:310.27,311.34 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.34,312.38 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.38,313.35 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.35,315.7 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:317.5,317.17 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:320.4,320.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:325.2,326.36 2 13
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.36,328.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.2,330.76 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:330.76,332.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:333.2,334.35 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.35,335.14 1 26
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.14,337.4 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:339.2,339.14 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:342.137,347.24 5 10
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:347.24,349.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:350.2,360.4 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:435.74,444.2 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.9,303.126 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:303.126,305.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.9,307.33 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:307.33,309.10 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.3,311.27 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:311.27,312.34 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:312.34,313.38 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:313.38,314.35 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:314.35,316.7 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:318.5,318.17 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:321.4,321.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:326.2,327.36 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:327.36,329.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.5,331.122 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:331.122,333.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.2,335.35 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.35,336.14 1 34
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:336.14,338.4 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:340.2,340.14 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 10
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:436.74,445.2 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:16.48,18.55 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:18.55,19.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.23,21.4 1 0
@@ -7330,13 +7619,13 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:57.2,57.46 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:62.99,65.2 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:67.98,70.2 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:72.160,77.52 4 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:77.52,80.3 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.2,81.51 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:77.52,80.3 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.2,81.51 1 10
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:81.51,83.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:85.2,90.86 4 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:85.2,90.86 4 10
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:90.86,95.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.2,96.87 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.87,99.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.5,96.73 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:96.73,99.6 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.2,101.83 1 8
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:101.83,104.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:107.5,107.129 1 8
@@ -7352,175 +7641,190 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:131.16,135.3 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:136.2,140.19 4 7
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:140.19,142.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:143.2,144.75 2 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:148.38,149.16 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:148.38,149.16 1 11
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:149.16,151.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:152.2,155.42 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:155.42,157.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:152.2,155.42 2 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:155.42,157.3 1 6
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.8,160.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,161.27 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,166.79 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:166.79,168.63 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.63,171.4 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:173.2,173.14 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:177.119,181.24 2 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.24,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:184.2,185.13 2 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.13,187.68 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:187.68,189.4 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.2,191.19 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:191.19,193.3 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:195.2,196.12 2 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.12,198.28 2 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.28,200.12 2 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:202.3,202.8 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,206.50 3 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:206.50,208.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,209.23 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:213.193,215.9 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:215.9,217.3 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.2,223.32 6 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.32,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:226.2,227.24 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.24,229.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:230.2,236.33 5 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.33,238.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:239.5,240.40 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.40,242.20 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:242.20,244.21 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.21,246.5 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.4,247.59 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.59,249.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.4,253.40 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.40,257.5 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.8,259.23 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.23,261.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:262.2,262.19 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.55,269.15 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.15,271.6 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.5,272.9 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.9,276.26 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.26,278.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.9,280.23 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:280.23,282.10 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.9,285.16 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.27,288.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.24,289.24 0 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.60,299.22 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.22,301.6 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.5,303.9 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.9,307.29 4 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.29,311.20 4 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.31,314.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:315.28,317.25 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.9,323.20 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:328.177,334.33 3 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.33,336.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.2,337.18 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.18,339.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:340.2,340.17 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.101,346.57 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:346.57,347.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.78,349.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.2,351.19 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.19,353.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.2,354.19 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.19,356.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.2,357.61 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.61,358.57 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.57,360.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.16 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:13.45,15.55 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:15.55,18.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.47,23.55 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,24.32 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:24.32,26.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:27.3,29.44 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:33.46,35.55 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:35.55,38.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:44.76,46.14 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:46.14,48.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:50.2,51.14 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:51.14,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.2,54.26 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.26,56.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:57.2,58.13 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.13,60.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.2,61.30 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:61.30,63.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.28 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.28,69.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,75.43 5 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.43,78.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:79.2,79.27 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.50,88.24 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.24,90.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:91.2,92.35 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.35,94.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.2,95.30 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,98.14 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:98.14,99.39 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.39,101.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.4,103.9 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.3,105.12 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.12,106.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,110.17 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.17,111.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.3,115.63 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.63,117.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,118.80 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.80,119.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,140.18 9 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.18,143.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.4,145.17 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.17,147.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.4,148.61 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,151.8 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.110,159.14 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.14,161.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.2,174.54 8 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.96,181.14 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.14,183.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.2,187.31 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.31,188.53 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.53,190.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.12 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.12,192.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.3,194.61 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:194.61,195.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.3,198.14 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:198.14,200.36 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.36,203.13 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.4,205.9 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.53 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.53,209.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.12 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.12,211.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,216.6 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.2,219.26 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:219.26,220.35 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.35,222.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.35 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.35,225.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.2,228.13 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:232.45,234.39 2 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.39,236.63 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.63,238.4 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.32 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.32,242.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,243.17 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.17,245.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.2,247.14 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.21,249.48 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.10,251.12 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.68,263.2 6 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:266.46,273.2 6 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.61,291.2 9 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.59,296.15 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:296.15,299.6 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,161.27 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:165.91,167.27 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:167.27,167.43 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.5,168.43 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.43,169.41 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:169.41,169.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:170.9,171.43 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:171.43,172.27 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:172.27,175.14 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:178.5,178.17 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:182.119,186.24 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:186.24,188.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:189.2,190.13 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.13,192.68 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:192.68,194.4 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.2,196.19 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:196.19,198.3 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:200.2,201.12 2 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:201.12,203.28 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:203.28,205.12 2 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:207.3,207.8 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.2,211.50 3 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:211.50,213.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:214.2,214.23 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:218.193,220.9 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.9,222.3 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.2,228.32 6 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.32,230.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:231.2,232.24 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:232.24,234.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:235.2,241.33 5 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.33,243.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.5,245.40 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:245.40,247.20 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.20,249.21 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.21,251.5 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.4,252.59 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.59,254.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.4,258.40 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.40,262.5 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.8,264.23 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.23,266.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.2,267.19 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.55,274.15 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:274.15,276.6 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.5,277.9 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.9,281.26 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.26,283.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:284.9,285.23 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:285.23,287.10 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:288.9,290.16 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:291.27,293.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.24,294.24 0 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:302.60,304.22 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:304.22,306.6 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.5,308.9 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:308.9,312.29 4 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.29,316.20 4 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.31,319.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:320.28,322.25 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.9,328.20 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:333.177,339.33 3 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:339.33,341.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.2,342.18 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.18,344.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:345.2,345.17 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:349.101,351.57 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.57,352.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:352.78,354.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.2,356.19 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.19,358.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.2,359.19 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:359.19,361.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.2,362.61 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.61,363.57 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.57,365.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.16 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:18.45,20.55 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:20.55,23.3 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:26.47,28.55 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:28.55,29.32 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.32,31.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:32.3,34.44 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:38.46,40.55 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:40.55,43.3 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:49.76,51.14 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:51.14,53.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:55.2,56.14 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:56.14,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.2,59.26 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.26,61.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,63.13 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:63.13,65.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.2,66.30 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.30,68.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:70.2,71.28 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:71.28,74.3 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:75.2,80.43 5 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:80.43,83.3 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:84.2,84.27 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:92.50,93.24 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.24,95.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.2,97.35 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,99.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.5,100.33 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.33,103.14 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.14,104.39 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.39,106.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.4,108.9 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.9,110.18 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.18,111.21 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.9,114.31 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:114.31,115.21 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.9,118.43 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.43,119.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.9,122.18 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.18,122.28 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:123.9,125.44 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.44,126.28 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.28,126.53 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.9,128.23 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.23,128.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.3,131.63 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.63,133.4 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.3,134.80 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.80,135.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.9,141.19 4 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.19,142.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,146.38 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:146.38,156.18 9 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.18,159.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.4,161.17 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:161.17,163.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.4,164.61 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.8 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:173.110,175.14 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.14,177.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:179.2,190.54 8 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.96,197.14 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.14,199.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:200.2,203.31 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.31,204.53 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:204.53,206.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.3,207.12 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.12,208.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.3,210.61 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.61,211.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.3,214.14 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:214.14,216.36 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:216.36,219.13 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.4,221.9 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.3,223.53 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.53,225.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.3,226.12 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:226.12,227.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:229.3,232.6 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.2,235.26 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:235.26,236.35 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.35,238.4 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,239.35 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.35,241.4 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.2,244.13 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.45,250.20 2 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:250.20,252.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.5,254.53 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.53,256.46 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.46,257.27 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:257.27,259.14 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.5,263.35 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.35,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:267.5,268.17 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.24,270.54 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:271.13,272.18 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.68,284.2 6 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:287.46,294.2 6 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:297.61,312.2 9 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:316.59,317.15 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:317.15,320.6 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.58 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.58,13.6 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.5,14.22 1 1
@@ -7537,218 +7841,238 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:15.2,26.27 2 2
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:29.38,31.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:33.46,35.2 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:37.31,40.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:13.55,15.32 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:15.32,17.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.2,18.13 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.41,27.2 4 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.32,39.23 3 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:39.23,41.3 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:42.2,43.24 2 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.24,45.3 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.2,49.15 4 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.15,51.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.2,55.211 4 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.51,60.41 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.41,62.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:63.2,65.71 3 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.110,69.14 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:69.14,73.3 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.2,76.18 3 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.118,80.14 1 15
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.14,83.16 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:83.16,86.35 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.35,88.5 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.4,89.36 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.36,91.5 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.4,94.59 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.59,96.5 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.21 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.2,103.19 4 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.51,107.23 1 21
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:107.23,109.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.2,110.13 1 21
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.13,112.100 2 37
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.100,114.12 2 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.3,116.8 1 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.11 1 21
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.32,123.2 1 24
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.44,127.53 1 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.53,129.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.2,130.40 1 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:133.40,135.20 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.20,136.40 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.40,138.12 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.3,140.8 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.2,142.12 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.12,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.2,145.17 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.52,149.38 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.38,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.2,153.27 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.27,154.34 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.34,155.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.3,157.36 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.36,158.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.3,160.25 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.2,162.34 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.67,173.22 2 46
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:173.22,175.12 2 58
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.12,177.4 1 30
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.3,180.63 2 28
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.63,182.12 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.3,185.12 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.12,187.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.3,189.48 2 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.48,191.12 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.18 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.18,196.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.29 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:201.2,201.24 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.46,209.32 2 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:209.32,211.3 1 16
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.2,212.34 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.34,214.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.2,215.32 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.32,217.32 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.32,219.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.2,221.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.83,228.102 2 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.102,230.36 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:230.36,232.136 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.136,234.5 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:235.4,237.34 3 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.34,239.5 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.2,243.65 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.65,244.53 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.53,246.37 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.37,248.137 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.137,250.6 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.5,253.35 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:253.35,255.6 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.2,259.19 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.80,264.22 1 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.22,266.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,269.40 3 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:269.40,271.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.2,272.34 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.34,273.31 1 94
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:273.31,274.12 1 75
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.3,277.16 2 19
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.16,278.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.3,280.32 1 19
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.32,282.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.19 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.36,289.2 1 94
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.39,294.13 2 30
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:294.13,296.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:297.2,299.66 3 30
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.66,301.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.2,303.54 2 30
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.54,305.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.2,306.51 1 30
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.51,308.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.69 3 30
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.69,314.3 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.2,315.10 1 22
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.43,321.13 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.13,323.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,325.11 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:325.11,327.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.2,329.14 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.14,331.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.19 2 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.56,339.89 2 16
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.89,341.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.2,342.14 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:346.52,347.32 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.32,349.28 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.28,351.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.3,352.34 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.34,354.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.3,355.42 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.42,357.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.3,358.49 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.2,363.27 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.27,365.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.2,366.36 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.36,368.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.2,372.49 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.49,374.24 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.24,376.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:379.2,380.25 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.25,382.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.33 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.33,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.2,387.19 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.67,393.35 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:393.35,395.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:396.2,397.31 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.31,399.3 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:400.2,400.14 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.69,404.37 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.37,406.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,407.47 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:410.50,412.22 2 51
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.22,414.12 2 55
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.12,416.4 1 34
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:417.3,419.32 3 21
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.32,421.4 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.3,423.35 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.35,425.12 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.3,428.12 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,432.49 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.49,434.12 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,436.14 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.2,438.14 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.67,444.28 3 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:444.28,446.12 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.12,447.9 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.3,451.12 3 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.12,452.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.3,454.43 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.43,456.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.3,458.23 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.23,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.3,463.48 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.48,465.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.3,467.25 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.25,469.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:471.3,472.50 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.50,474.4 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:475.3,476.22 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.2,478.14 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:72.90,75.20 3 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:75.20,77.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:78.2,80.23 3 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:80.23,82.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:83.2,84.22 2 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:84.22,86.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:87.2,88.27 2 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:88.27,90.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,97.38 6 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.38,100.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:100.8,102.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:103.5,106.38 4 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:106.38,108.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.5,109.38 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:109.38,111.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:113.2,115.46 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:115.46,115.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.46,117.64 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:126.2,126.10 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.30,130.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:130.6,132.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.20,134.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.3,135.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:135.17,137.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:138.3,139.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.52,141.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.3,143.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:143.23,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:147.3,148.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:148.15,150.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,20.32 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.32,22.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.2,23.13 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:27.41,32.2 4 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.41,39.2 4 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:41.32,44.23 3 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.23,46.3 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.2,48.24 2 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:48.24,50.3 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.2,54.15 4 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.15,56.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.2,60.211 4 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:64.51,65.41 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:65.41,67.3 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,70.71 3 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:73.110,74.14 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:74.14,78.3 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.2,81.18 3 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:84.118,85.14 1 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.14,88.16 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.16,91.35 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.35,93.5 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.4,94.36 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.36,96.5 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,99.59 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.59,101.5 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.4,102.21 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.2,108.19 4 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.51,112.23 1 21
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.23,114.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.2,115.13 1 21
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.13,117.100 2 37
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.100,119.12 2 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.3,121.8 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.2,123.11 1 21
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.32,128.2 1 24
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.44,132.56 1 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:132.56,134.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.5,135.43 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.40,140.20 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.20,141.40 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.12 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.3,145.8 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.2,147.12 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.12,149.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.17 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.52,154.38 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.38,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.2,158.27 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.27,159.34 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:159.34,160.12 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.3,162.36 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.36,163.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.25 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:167.2,167.34 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.67,177.25 2 46
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:177.25,180.18 2 58
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.18,182.10 1 27
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.9,185.80 2 31
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.80,187.21 2 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.9,191.18 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:191.18,193.10 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.9,195.54 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.54,197.21 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.9,200.24 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:200.24,202.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.9,205.35 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.5,207.27 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:213.46,217.34 3 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.34,219.6 1 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.5,220.37 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.37,222.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.5,223.34 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.34,225.38 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.38,227.10 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.5,229.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.83,236.102 2 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.102,238.36 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.36,240.136 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.136,242.5 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.4,245.34 3 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:245.34,247.5 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.2,251.65 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.65,252.53 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.53,254.37 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.37,256.137 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.137,258.6 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.5,261.35 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.35,263.6 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,267.19 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.80,272.22 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.22,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,277.40 3 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.40,279.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.34 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.34,281.31 1 94
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.31,282.12 1 75
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.3,285.16 2 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.16,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,288.32 1 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.32,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.2,292.19 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.36,297.2 1 94
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.39,302.13 2 30
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.13,304.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.2,307.66 3 30
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:307.66,309.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.2,311.54 2 30
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.54,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,314.51 1 30
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.51,316.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,319.69 3 30
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:319.69,322.3 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.2,323.10 1 22
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.43,329.13 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.13,331.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,333.11 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.11,335.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.14 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.14,339.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.19 2 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.56,347.89 2 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:347.89,349.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.2,350.14 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.52,355.32 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:355.32,357.28 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.28,359.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.3,360.34 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.34,362.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.42 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.42,365.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.49 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:368.2,371.27 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.27,373.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.2,374.36 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.36,376.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,380.49 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.49,382.24 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:382.24,384.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:387.2,388.25 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:388.25,390.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,391.33 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.33,393.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,395.19 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:399.67,401.35 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:401.35,403.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.2,405.31 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.31,407.3 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,408.14 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.69,412.40 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.40,414.6 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.5,415.50 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.50,420.25 2 49
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:420.25,424.18 3 50
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.18,426.10 1 32
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.9,429.38 3 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:429.38,431.10 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.9,433.52 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.52,435.21 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:438.9,439.18 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.18,441.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.9,443.55 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.55,445.21 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.9,447.20 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.5,449.17 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.67,455.31 3 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.31,457.18 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:457.18,458.18 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.9,462.18 3 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:462.18,463.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.9,465.49 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.49,467.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.9,469.40 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.40,471.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.9,474.54 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:474.54,476.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.9,478.31 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.31,480.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.9,483.56 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:483.56,485.10 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.9,487.28 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.5,489.17 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:85.90,88.20 3 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:88.20,90.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:91.2,93.23 3 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:93.23,95.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:96.2,97.22 2 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:97.22,99.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:100.2,101.27 2 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:101.27,103.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:104.2,110.38 6 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:110.38,113.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:113.8,115.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:116.5,119.38 4 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:119.38,121.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.5,122.38 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:122.38,124.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.5,126.49 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.49,126.71 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.76,126.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.5,127.50 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.50,127.73 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.78,127.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.5,128.49 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.49,128.71 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:128.76,128.111 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.5,129.36 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.36,129.82 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.87,129.149 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.5,132.27 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.27,132.63 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.5,133.28 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:133.28,133.66 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.5,134.27 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.27,134.63 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.5,135.32 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:135.32,135.93 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,139.46 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:139.46,139.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.46,141.64 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:150.2,150.10 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:153.30,154.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.6,156.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:156.20,158.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.3,159.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:159.17,161.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:162.3,163.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.52,165.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.3,167.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.23,169.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:171.3,172.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.15,174.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:14.48,17.6 3 1
codeberg.org/snonux/hexai/internal/lsp/transport.go:17.6,19.17 2 2
codeberg.org/snonux/hexai/internal/lsp/transport.go:19.17,21.4 1 0
diff --git a/docs/usage-examples.md b/docs/usage.md
index 9abb0b8..c74ee7d 100644
--- a/docs/usage-examples.md
+++ b/docs/usage.md
@@ -33,7 +33,7 @@ Note: additional LSPs (`gopls`, `golangci-lint-lsp`) are optional; Hexai works w
Ask a question at the end of a line and receive the answer inline.
- End your question line with a trigger: `?>`, `!>`, or `:>`.
-- Hexai removes only the trailing `>` from the question line (and keeps your trailing punctuation). The inline code-completion trigger `;;text;` remains unchanged.
+- Hexai removes only the trailing `>` from the question line (and keeps your trailing punctuation). Inline code-completion triggers now use `>text>` (inline) or `>>text>` (line-replace).
- It inserts a blank line, then a reply line prefixed with `> `, then one extra newline so most
editors place the cursor on a fresh blank line after the answer.
- If a `>` reply already exists below the question, Hexai won’t answer again.
@@ -52,12 +52,12 @@ Context: Hexai includes up to the three most recent Q/A pairs above the question
## Inline triggers
-Hexai supports inline prompt tags you can type in code to request an action from the LLM and then auto-clean the tag. The strict semicolon form is supported:
+Hexai supports inline prompt tags you can type in code to request an action from the LLM and then auto-clean the tag. The new `>`-based forms are:
-- `;do something;` — Hexai uses the text between semicolons as the instruction and removes only the prompt. Strict form requires no space after the first `;` and no space before the closing `;`.
-- `;;do someting;` - Same as above, but replace the current line with the completion
+- `>do something>` — uses the text between `>` markers as the instruction and removes only the prompt. Strict form requires no space after the first `>` and no space before the closing `>`.
+- `>>do something>` — same as above, but replaces the entire current line with the completion.
-Spaced variants (e.g., `; spaced ;`) are ignored.
+Spaced variants (e.g., `> spaced >`) are ignored.
## Code actions
diff --git a/internal/appconfig/config.go b/internal/appconfig/config.go
index 2110831..d19ea18 100644
--- a/internal/appconfig/config.go
+++ b/internal/appconfig/config.go
@@ -36,6 +36,13 @@ type App struct {
TriggerCharacters []string `json:"trigger_characters"`
Provider string `json:"provider"`
+ // Inline prompt trigger characters (default: >text> and >>text>)
+ InlineOpen string `json:"inline_open"`
+ InlineClose string `json:"inline_close"`
+ // In-editor chat triggers (default: suffix ">" after one of [?, !, :, ;])
+ ChatSuffix string `json:"chat_suffix"`
+ ChatPrefixes []string `json:"chat_prefixes"`
+
// Provider-specific options
OpenAIBaseURL string `json:"openai_base_url"`
OpenAIModel string `json:"openai_model"`
@@ -69,6 +76,11 @@ func newDefaultConfig() App {
ManualInvokeMinPrefix: 0,
CompletionDebounceMs: 200,
CompletionThrottleMs: 0,
+ // Inline/chat trigger defaults
+ InlineOpen: ">",
+ InlineClose: ">",
+ ChatSuffix: ">",
+ ChatPrefixes: []string{"?", "!", ":", ";"},
}
}
@@ -151,12 +163,24 @@ func (a *App) mergeBasics(other *App) {
}
if other.CompletionDebounceMs > 0 { a.CompletionDebounceMs = other.CompletionDebounceMs }
if other.CompletionThrottleMs > 0 { a.CompletionThrottleMs = other.CompletionThrottleMs }
- if len(other.TriggerCharacters) > 0 {
- a.TriggerCharacters = slices.Clone(other.TriggerCharacters)
- }
- if s := strings.TrimSpace(other.Provider); s != "" {
- a.Provider = s
- }
+ if len(other.TriggerCharacters) > 0 {
+ a.TriggerCharacters = slices.Clone(other.TriggerCharacters)
+ }
+ if s := strings.TrimSpace(other.InlineOpen); s != "" {
+ a.InlineOpen = s
+ }
+ if s := strings.TrimSpace(other.InlineClose); s != "" {
+ a.InlineClose = s
+ }
+ if s := strings.TrimSpace(other.ChatSuffix); s != "" {
+ a.ChatSuffix = s
+ }
+ if len(other.ChatPrefixes) > 0 {
+ a.ChatPrefixes = slices.Clone(other.ChatPrefixes)
+ }
+ if s := strings.TrimSpace(other.Provider); s != "" {
+ a.Provider = s
+ }
}
// mergeProviderFields merges per-provider configuration.
@@ -269,6 +293,19 @@ func loadFromEnv(logger *log.Logger) *App {
}
any = true
}
+ if s := getenv("HEXAI_INLINE_OPEN"); s != "" { out.InlineOpen = s; any = true }
+ if s := getenv("HEXAI_INLINE_CLOSE"); s != "" { out.InlineClose = s; any = true }
+ if s := getenv("HEXAI_CHAT_SUFFIX"); s != "" { out.ChatSuffix = s; any = true }
+ if s := getenv("HEXAI_CHAT_PREFIXES"); s != "" {
+ parts := strings.Split(s, ",")
+ out.ChatPrefixes = nil
+ for _, p := range parts {
+ if t := strings.TrimSpace(p); t != "" {
+ out.ChatPrefixes = append(out.ChatPrefixes, t)
+ }
+ }
+ any = true
+ }
if s := getenv("HEXAI_PROVIDER"); s != "" {
out.Provider = s; any = true
}
diff --git a/internal/hexailsp/run.go b/internal/hexailsp/run.go
index 0df8256..c12018f 100644
--- a/internal/hexailsp/run.go
+++ b/internal/hexailsp/run.go
@@ -118,5 +118,9 @@ func makeServerOptions(cfg appconfig.App, logContext bool, client llm.Client) ls
ManualInvokeMinPrefix: cfg.ManualInvokeMinPrefix,
CompletionDebounceMs: cfg.CompletionDebounceMs,
CompletionThrottleMs: cfg.CompletionThrottleMs,
+ InlineOpen: cfg.InlineOpen,
+ InlineClose: cfg.InlineClose,
+ ChatSuffix: cfg.ChatSuffix,
+ ChatPrefixes: cfg.ChatPrefixes,
}
}
diff --git a/internal/llm/copilot_http_test.go b/internal/llm/copilot_http_test.go
index 53f831c..180e43e 100644
--- a/internal/llm/copilot_http_test.go
+++ b/internal/llm/copilot_http_test.go
@@ -10,12 +10,14 @@ import (
"testing"
"time"
"encoding/base64"
+ "os"
)
type rtFunc2 func(*http.Request) (*http.Response, error)
func (f rtFunc2) RoundTrip(r *http.Request) (*http.Response, error) { return f(r) }
func TestCopilot_EnsureSession_AndChat_Success(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
// Mock chat endpoint
chatSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/chat/completions" { t.Fatalf("unexpected path: %s", r.URL.Path) }
@@ -73,6 +75,7 @@ func TestCopilot_CodeCompletion_Success(t *testing.T) {
}
func TestCopilot_Chat_MultiChoice_And_ErrorBody(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
// Chat multi-choice: return two choices; client returns first content
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{
@@ -109,6 +112,7 @@ func TestCopilot_Chat_MultiChoice_And_ErrorBody(t *testing.T) {
}
func TestCopilot_Chat_NoChoices_Error(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{"choices": []any{}})
}))
@@ -127,6 +131,7 @@ func TestCopilot_Chat_NoChoices_Error(t *testing.T) {
}
func TestCopilot_Chat_DecodeError_StatusOK(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
// Chat returns 200 but invalid JSON; expect decode error
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "{invalid")
diff --git a/internal/llm/ollama_test.go b/internal/llm/ollama_test.go
index 8d77a58..15f9cff 100644
--- a/internal/llm/ollama_test.go
+++ b/internal/llm/ollama_test.go
@@ -9,6 +9,7 @@ import (
"strings"
"testing"
"time"
+ "os"
)
func TestBuildOllamaRequest_OptionsAndStream(t *testing.T) {
@@ -40,6 +41,7 @@ func TestOllama_NameAndModel(t *testing.T) {
}
func TestOllamaChat_Success(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost || r.URL.Path != "/api/chat" { t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path) }
w.Header().Set("Content-Type", "application/json")
@@ -54,6 +56,7 @@ func TestOllamaChat_Success(t *testing.T) {
}
func TestOllamaChat_EmptyContent(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{"message": map[string]string{"role":"assistant","content":""}, "done": true})
}))
@@ -66,6 +69,7 @@ func TestOllamaChat_EmptyContent(t *testing.T) {
}
func TestOllamaChat_Non2xx(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
// API error string
ts1 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(400)
@@ -102,6 +106,7 @@ func TestOllamaChat_HTTPError(t *testing.T) {
}
func TestOllamaChat_DecodeError(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("{bad json}"))
}))
@@ -119,6 +124,7 @@ func TestHandleOllamaNon2xx_OK(t *testing.T) {
}
func TestOllamaChatStream_Success(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
// two JSON objects back-to-back
@@ -136,6 +142,7 @@ func TestOllamaChatStream_Success(t *testing.T) {
}
func TestOllamaChatStream_ErrorEvent(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{"error":"oops"})
}))
@@ -148,6 +155,7 @@ func TestOllamaChatStream_ErrorEvent(t *testing.T) {
}
func TestOllamaChatStream_DecodeError(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = w.Write([]byte("{not json}"))
}))
diff --git a/internal/llm/openai_http_test.go b/internal/llm/openai_http_test.go
index 808bb2b..ac7b897 100644
--- a/internal/llm/openai_http_test.go
+++ b/internal/llm/openai_http_test.go
@@ -9,9 +9,11 @@ import (
"testing"
"strings"
"time"
+ "os"
)
func TestOpenAI_Chat_Success(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/chat/completions" { t.Fatalf("unexpected path: %s", r.URL.Path) }
_ = json.NewEncoder(w).Encode(map[string]any{"choices": []map[string]any{{"index":0, "message": map[string]string{"role":"assistant","content":"OK"}}}})
@@ -29,6 +31,7 @@ func TestOpenAI_Chat_MissingKey(t *testing.T) {
}
func TestOpenAI_ChatStream_SSE(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Return SSE-like stream
w.Header().Set("Content-Type", "text/event-stream")
@@ -49,6 +52,7 @@ func TestHandleOpenAINon2xx_NoErrorBody(t *testing.T) {
}
func TestOpenAI_ChatStream_SSE_ErrorChunk(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/event-stream")
io.WriteString(w, "data: {\"error\":{\"message\":\"oops\"}}\n\n")
@@ -64,6 +68,7 @@ func TestOpenAI_ChatStream_SSE_ErrorChunk(t *testing.T) {
}
func TestOpenAI_Chat_NoChoices_Error(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{"choices": []any{}})
}))
@@ -76,6 +81,7 @@ func TestOpenAI_Chat_NoChoices_Error(t *testing.T) {
}
func TestOpenAI_ChatStream_SSE_EmptyDelta_NoError(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/event-stream")
io.WriteString(w, "data: {\\\"choices\\\":[{\\\"delta\\\":{\\\"content\\\":\\\"\\\"}}]}\\n\\n")
@@ -92,6 +98,7 @@ func TestOpenAI_ChatStream_SSE_EmptyDelta_NoError(t *testing.T) {
}
func TestOpenAI_Chat_DecodeError_StatusOK(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
// Return status 200 but invalid JSON body; Chat should return an error
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
@@ -106,6 +113,7 @@ func TestOpenAI_Chat_DecodeError_StatusOK(t *testing.T) {
}
func TestOpenAI_Chat_MultiChoiceAndErrorBody(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
// Multi-choice success: return two choices with different finish reasons
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_ = json.NewEncoder(w).Encode(map[string]any{
diff --git a/internal/llm/openai_sse_negative_test.go b/internal/llm/openai_sse_negative_test.go
index 22b938c..8da5526 100644
--- a/internal/llm/openai_sse_negative_test.go
+++ b/internal/llm/openai_sse_negative_test.go
@@ -6,9 +6,11 @@ import (
"net/http"
"net/http/httptest"
"testing"
+ "os"
)
func TestOpenAI_ChatStream_SSE_MalformedChunk(t *testing.T) {
+ if os.Getenv("HEXAI_TEST_SKIP_NET") == "1" { t.Skip("skip network-bound tests in restricted environments") }
// Malformed JSON chunk should be skipped; no onDelta calls; no error.
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/event-stream")
@@ -24,4 +26,3 @@ func TestOpenAI_ChatStream_SSE_MalformedChunk(t *testing.T) {
}
if got != "" { t.Fatalf("expected no deltas for malformed chunk, got %q", got) }
}
-
diff --git a/internal/lsp/codeaction_test.go b/internal/lsp/codeaction_test.go
index 5a74d66..4de0790 100644
--- a/internal/lsp/codeaction_test.go
+++ b/internal/lsp/codeaction_test.go
@@ -22,7 +22,7 @@ func TestBuildRewriteCodeAction_LazyAndResolves(t *testing.T) {
s := newTestServer()
s.llmClient = fakeLLM{resp: "REWRITTEN"}
p := CodeActionParams{TextDocument: TextDocumentIdentifier{URI: "file:///t.go"}, Range: Range{Start: Position{Line: 1, Character: 2}, End: Position{Line: 3, Character: 4}}}
- sel := ";rewrite;\nold code"
+ sel := ">rewrite>\nold code"
ca := s.buildRewriteCodeAction(p, sel)
if ca == nil {
t.Fatalf("expected code action")
diff --git a/internal/lsp/completion_prefix_strip_test.go b/internal/lsp/completion_prefix_strip_test.go
index 99a08d6..e8e70f5 100644
--- a/internal/lsp/completion_prefix_strip_test.go
+++ b/internal/lsp/completion_prefix_strip_test.go
@@ -55,30 +55,30 @@ func TestTryLLMCompletion_ManualInvokeAfterWhitespace_Allows(t *testing.T) {
}
}
-func TestTryLLMCompletion_InlineSemicolonPromptAlwaysTriggers(t *testing.T) {
- s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
- s.llmClient = fakeLLM{resp: "replacement"}
- line := "prefix ;do something; suffix"
- // No trigger char immediately before cursor; place cursor at end
- p := CompletionParams{Position: Position{Line: 0, Character: len(line)}, TextDocument: TextDocumentIdentifier{URI: "file://inline.go"}}
- items, ok := s.tryLLMCompletion(p, "", line, "", "", "", false, "")
- if !ok || len(items) == 0 {
- t.Fatalf("expected completion to trigger on inline ;text; prompt")
- }
+func TestTryLLMCompletion_InlinePromptAlwaysTriggers(t *testing.T) {
+ s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
+ s.llmClient = fakeLLM{resp: "replacement"}
+ line := "prefix >do something> suffix"
+ // No trigger char immediately before cursor; place cursor at end
+ p := CompletionParams{Position: Position{Line: 0, Character: len(line)}, TextDocument: TextDocumentIdentifier{URI: "file://inline.go"}}
+ items, ok := s.tryLLMCompletion(p, "", line, "", "", "", false, "")
+ if !ok || len(items) == 0 {
+ t.Fatalf("expected completion to trigger on inline >text> prompt")
+ }
}
-func TestTryLLMCompletion_DoubleSemicolonEmpty_DoesNotAutoTrigger(t *testing.T) {
+func TestTryLLMCompletion_DoubleOpenEmpty_DoesNotAutoTrigger(t *testing.T) {
s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
fake := &countingLLM{}
s.llmClient = fake
- line := ";; " // empty content after ';;' should not force-trigger
+ line := ">> " // empty content after double-open should not force-trigger
p := CompletionParams{Position: Position{Line: 0, Character: len(line)}, TextDocument: TextDocumentIdentifier{URI: "file://empty-inline.go"}}
items, ok := s.tryLLMCompletion(p, "", line, "", "", "", false, "")
if !ok {
t.Fatalf("expected ok=true for non-trigger path")
}
if len(items) != 0 {
- t.Fatalf("expected no items when inline ';;' is empty")
+ t.Fatalf("expected no items when inline double-open is empty")
}
if fake.calls != 0 {
t.Fatalf("LLM should not be called; calls=%d", fake.calls)
@@ -86,63 +86,63 @@ func TestTryLLMCompletion_DoubleSemicolonEmpty_DoesNotAutoTrigger(t *testing.T)
}
func TestHasDoubleSemicolonTrigger_Variants(t *testing.T) {
- if hasDoubleSemicolonTrigger(";;") {
- t.Fatalf("bare ';;' should not trigger")
- }
- if hasDoubleSemicolonTrigger(";; ;") {
- t.Fatalf("';;' followed by space should not trigger")
- }
- if hasDoubleSemicolonTrigger(";;;") {
- t.Fatalf("';;;' should not trigger (no content)")
- }
- if !hasDoubleSemicolonTrigger(";;x;") {
- t.Fatalf("expected trigger for ';;x;' pattern")
- }
+ if hasDoubleOpenTrigger(">>") {
+ t.Fatalf("bare double-open should not trigger")
+ }
+ if hasDoubleOpenTrigger(">> ") {
+ t.Fatalf("double-open followed by space should not trigger")
+ }
+ if hasDoubleOpenTrigger(">>>") {
+ t.Fatalf("';;;' should not trigger (no content)")
+ }
+ if !hasDoubleOpenTrigger(">>x>") {
+ t.Fatalf("expected trigger for ';;x;' pattern")
+ }
}
-func TestBareDoubleSemicolonPreventsAutoTriggerEvenWithOtherTriggers(t *testing.T) {
- s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
- fake := &countingLLM{}
- s.llmClient = fake
- // Place a '.' earlier but also include bare ';;' at end; should not auto-trigger
- line := "obj. call ;;"
+func TestBareDoubleOpenPreventsAutoTriggerEvenWithOtherTriggers(t *testing.T) {
+ s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
+ fake := &countingLLM{}
+ s.llmClient = fake
+ // Place a '.' earlier but also include bare double-open at end; should not auto-trigger
+ line := "obj. call >>"
p := CompletionParams{Position: Position{Line: 0, Character: len(line)}, TextDocument: TextDocumentIdentifier{URI: "file://bare-ds.go"}}
items, ok := s.tryLLMCompletion(p, "", line, "", "", "", false, "")
if !ok {
t.Fatalf("expected ok=true (handled), but not auto-triggering")
}
- if len(items) != 0 {
- t.Fatalf("expected no items due to bare ';;'")
- }
+ if len(items) != 0 {
+ t.Fatalf("expected no items due to bare double-open")
+ }
if fake.calls != 0 {
t.Fatalf("LLM should not be called; calls=%d", fake.calls)
}
}
-func TestBareDoubleSemicolonOnNextLine_PreventsAutoTrigger(t *testing.T) {
- s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
- fake := &countingLLM{}
- s.llmClient = fake
- current := "expression := flag.String(\"expression\", \"\", \"Expression to evaluate\")"
- below := ";;"
+func TestBareDoubleOpenOnNextLine_PreventsAutoTrigger(t *testing.T) {
+ s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
+ fake := &countingLLM{}
+ s.llmClient = fake
+ current := "expression := flag.String(\"expression\", \"\", \"Expression to evaluate\")"
+ below := ">>"
p := CompletionParams{Position: Position{Line: 0, Character: len(current)}, TextDocument: TextDocumentIdentifier{URI: "file://nextline.go"}}
items, ok := s.tryLLMCompletion(p, "", current, below, "", "", false, "")
if !ok {
t.Fatalf("expected ok=true handled")
}
- if len(items) != 0 {
- t.Fatalf("expected no items due to bare ';;' on next line")
- }
+ if len(items) != 0 {
+ t.Fatalf("expected no items due to bare double-open on next line")
+ }
if fake.calls != 0 {
t.Fatalf("LLM should not be called; calls=%d", fake.calls)
}
}
-func TestBareDoubleSemicolonPreventsManualInvoke(t *testing.T) {
- s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
- fake := &countingLLM{}
- s.llmClient = fake
- line := ";;"
+func TestBareDoubleOpenPreventsManualInvoke(t *testing.T) {
+ s := &Server{maxTokens: 32, triggerChars: []string{".", ":", "/", "_"}, compCache: make(map[string]string)}
+ fake := &countingLLM{}
+ s.llmClient = fake
+ line := ">>"
p := CompletionParams{Position: Position{Line: 0, Character: len(line)}, TextDocument: TextDocumentIdentifier{URI: "file://bare-ds-manual.go"}}
// Simulate manual invoke
p.Context = json.RawMessage([]byte(`{"triggerKind":1}`))
@@ -150,9 +150,9 @@ func TestBareDoubleSemicolonPreventsManualInvoke(t *testing.T) {
if !ok {
t.Fatalf("expected ok=true (handled)")
}
- if len(items) != 0 {
- t.Fatalf("expected no items for bare ';;' even with manual invoke")
- }
+ if len(items) != 0 {
+ t.Fatalf("expected no items for bare double-open even with manual invoke")
+ }
if fake.calls != 0 {
t.Fatalf("LLM should not be called; calls=%d", fake.calls)
}
diff --git a/internal/lsp/debounce_throttle_more_test.go b/internal/lsp/debounce_throttle_more_test.go
new file mode 100644
index 0000000..cb11ea4
--- /dev/null
+++ b/internal/lsp/debounce_throttle_more_test.go
@@ -0,0 +1,36 @@
+package lsp
+
+import (
+ "context"
+ "testing"
+ "time"
+)
+
+func TestWaitForDebounce_WaitsRoughlyDebounce(t *testing.T) {
+ s := newTestServer()
+ s.completionDebounce = 20 * time.Millisecond
+ s.mu.Lock()
+ s.lastInput = time.Now()
+ s.mu.Unlock()
+ start := time.Now()
+ s.waitForDebounce(context.Background())
+ if elapsed := time.Since(start); elapsed < 15*time.Millisecond {
+ t.Fatalf("debounce did not wait long enough: %v", elapsed)
+ }
+}
+
+func TestWaitForThrottle_WaitsRoughlyInterval(t *testing.T) {
+ s := newTestServer()
+ s.throttleInterval = 20 * time.Millisecond
+ s.mu.Lock()
+ s.lastLLMCall = time.Now()
+ s.mu.Unlock()
+ start := time.Now()
+ if !s.waitForThrottle(context.Background()) {
+ t.Fatalf("waitForThrottle returned false")
+ }
+ if elapsed := time.Since(start); elapsed < 15*time.Millisecond {
+ t.Fatalf("throttle did not wait long enough: %v", elapsed)
+ }
+}
+
diff --git a/internal/lsp/document_test.go b/internal/lsp/document_test.go
index 4bd96e2..5fee18b 100644
--- a/internal/lsp/document_test.go
+++ b/internal/lsp/document_test.go
@@ -9,10 +9,20 @@ import (
)
func newTestServer() *Server {
- return &Server{
- logger: log.New(io.Discard, "", 0),
- docs: make(map[string]*document),
- }
+ s := &Server{
+ logger: log.New(io.Discard, "", 0),
+ docs: make(map[string]*document),
+ inlineOpen: ">",
+ inlineClose: ">",
+ chatSuffix: ">",
+ chatPrefixes: []string{"?","!",":",";"},
+ }
+ // Keep package-level helpers in sync for tests using free functions
+ inlineOpenChar = '>'
+ inlineCloseChar = '>'
+ chatSuffixChar = '>'
+ chatPrefixSingles = []string{"?","!",":",";"}
+ return s
}
func TestSplitLines(t *testing.T) {
@@ -60,6 +70,15 @@ func TestLineContext_EmptyDoc(t *testing.T) {
}
}
+func TestDocBeforeAfter_ClampsIndices(t *testing.T) {
+ s := newTestServer()
+ uri := "file:///clamp.go"
+ s.setDocument(uri, "abc\nxyz")
+ // Position beyond document length should be clamped safely
+ before, after := s.docBeforeAfter(uri, Position{Line: 99, Character: 99})
+ if before == "" && after == "" { t.Fatalf("expected some text with clamped indices") }
+}
+
func TestTrimLen(t *testing.T) {
long := strings.Repeat("a", 205)
got := trimLen(long)
diff --git a/internal/lsp/handlers.go b/internal/lsp/handlers.go
index 547be67..5e7d86d 100644
--- a/internal/lsp/handlers.go
+++ b/internal/lsp/handlers.go
@@ -51,7 +51,7 @@ func findFirstInstructionInLine(line string) (instr string, cleaned string, ok b
text string
}
cands := []cand{}
- if t, l, r, ok := findStrictSemicolonTag(line); ok {
+ if t, l, r, ok := findStrictInlineTag(line); ok {
cands = append(cands, cand{start: l, end: r, text: t})
}
if i := strings.Index(line, "/*"); i >= 0 {
@@ -298,8 +298,9 @@ func (s *Server) isTriggerEvent(p CompletionParams, current string) bool {
b, _ := json.Marshal(p.Context)
_ = json.Unmarshal(b, &ctx)
}
- // If the line contains a bare ';;' (no ';;text;'), do not treat as a trigger source.
- if strings.Contains(current, ";;") && !hasDoubleSemicolonTrigger(current) {
+ // If configured and the line contains a bare double-open marker (e.g., '>>' with no '>>text>'),
+ // do not treat as a trigger source.
+ if s.inlineOpen != "" && strings.Contains(current, s.inlineOpen+s.inlineOpen) && !hasDoubleOpenTrigger(current) {
return false
}
// TriggerKind 1 = Invoked (manual). Always allow manual invoke.
@@ -326,10 +327,10 @@ func (s *Server) isTriggerEvent(p CompletionParams, current string) bool {
if idx <= 0 || idx > len(current) {
return false
}
- // Bare ';;' should not trigger via fallback char either
- if strings.Contains(current, ";;") && !hasDoubleSemicolonTrigger(current) {
- return false
- }
+ // Bare double-open should not trigger via fallback char either (only when configured)
+ if s.inlineOpen != "" && strings.Contains(current, s.inlineOpen+s.inlineOpen) && !hasDoubleOpenTrigger(current) {
+ return false
+ }
ch := string(current[idx-1])
for _, c := range s.triggerChars {
if c == ch {
diff --git a/internal/lsp/handlers_completion.go b/internal/lsp/handlers_completion.go
index 576fc3d..036e591 100644
--- a/internal/lsp/handlers_completion.go
+++ b/internal/lsp/handlers_completion.go
@@ -93,10 +93,10 @@ func (s *Server) tryLLMCompletion(p CompletionParams, above, current, below, fun
logging.AnsiGreen, logging.PreviewForLog(cleaned), logging.AnsiBase)
return s.makeCompletionItems(cleaned, inParams, current, p, docStr), true
}
- if (isBareDoubleSemicolon(current) || isBareDoubleSemicolon(below)) && !manualInvoke {
- logging.Logf("lsp ", "%scompletion skip=empty-double-semicolon line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
- return []CompletionItem{}, true
- }
+ if (isBareDoubleOpen(current) || isBareDoubleOpen(below)) {
+ logging.Logf("lsp ", "%scompletion skip=empty-double-semicolon line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
+ return []CompletionItem{}, true
+ }
if !inParams && !s.prefixHeuristicAllows(inlinePrompt, current, p, manualInvoke) {
logging.Logf("lsp ", "%scompletion skip=short-prefix line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
@@ -163,14 +163,19 @@ func parseManualInvoke(ctx any) bool {
// shouldSuppressForChatTriggerEOL returns true when a chat trigger like ">" follows ?, !, :, or ; at EOL.
func (s *Server) shouldSuppressForChatTriggerEOL(current string, p CompletionParams) bool {
- if t := strings.TrimRight(current, " \t"); len(t) >= 2 && t[len(t)-1] == '>' {
- prev := t[len(t)-2]
- if prev == '?' || prev == '!' || prev == ':' || prev == ';' {
- logging.Logf("lsp ", "completion skip=chat-trigger-eol uri=%s line=%d", p.TextDocument.URI, p.Position.Line)
- return true
- }
- }
- return false
+ t := strings.TrimRight(current, " \t")
+ if s.chatSuffix == "" { return false }
+ if strings.HasSuffix(t, s.chatSuffix) {
+ if len(t) < len(s.chatSuffix)+1 { return false }
+ prev := string(t[len(t)-len(s.chatSuffix)-1])
+ for _, pf := range s.chatPrefixes {
+ if prev == pf {
+ logging.Logf("lsp ", "completion skip=chat-trigger-eol uri=%s line=%d", p.TextDocument.URI, p.Position.Line)
+ return true
+ }
+ }
+ }
+ return false
}
// prefixHeuristicAllows applies minimal prefix rules unless inlinePrompt or structural triggers apply.
@@ -244,12 +249,12 @@ func (s *Server) tryProviderNativeCompletion(current string, p CompletionParams,
if cleaned != "" {
cleaned = stripDuplicateGeneralPrefix(current[:p.Position.Character], cleaned)
}
- if cleaned != "" && hasDoubleSemicolonTrigger(current) {
- indent := leadingIndent(current)
- if indent != "" {
- cleaned = applyIndent(indent, cleaned)
- }
- }
+ if cleaned != "" && hasDoubleOpenTrigger(current) {
+ indent := leadingIndent(current)
+ if indent != "" {
+ cleaned = applyIndent(indent, cleaned)
+ }
+ }
if strings.TrimSpace(cleaned) != "" {
key := s.completionCacheKey(p, above, current, below, funcCtx, inParams, hasExtra, extraText)
s.completionCachePut(key, cleaned)
@@ -354,10 +359,10 @@ func (s *Server) postProcessCompletion(text string, leftOfCursor string, current
if cleaned != "" {
cleaned = stripDuplicateGeneralPrefix(leftOfCursor, cleaned)
}
- if cleaned != "" && hasDoubleSemicolonTrigger(currentLine) {
- if indent := leadingIndent(currentLine); indent != "" {
- cleaned = applyIndent(indent, cleaned)
- }
- }
+ if cleaned != "" && hasDoubleOpenTrigger(currentLine) {
+ if indent := leadingIndent(currentLine); indent != "" {
+ cleaned = applyIndent(indent, cleaned)
+ }
+ }
return cleaned
}
diff --git a/internal/lsp/handlers_document.go b/internal/lsp/handlers_document.go
index 5b83d78..3f9d4b0 100644
--- a/internal/lsp/handlers_document.go
+++ b/internal/lsp/handlers_document.go
@@ -10,6 +10,11 @@ import (
"time"
)
+// Package-level chat trigger vars for helpers without Server receiver.
+// NewServer assigns these from configuration on startup.
+var chatSuffixChar byte = '>'
+var chatPrefixSingles = []string{"?", "!", ":", ";"}
+
func (s *Server) handleDidOpen(req Request) {
var p DidOpenTextDocumentParams
if err := json.Unmarshal(req.Params, &p); err == nil {
@@ -92,7 +97,7 @@ func (s *Server) detectAndHandleChat(uri string) {
if d == nil || len(d.lines) == 0 {
return
}
- for i, raw := range d.lines {
+ for i, raw := range d.lines {
// Find last non-space character index
j := len(raw) - 1
for j >= 0 {
@@ -102,14 +107,25 @@ func (s *Server) detectAndHandleChat(uri string) {
}
break
}
- if j < 1 {
- continue
- } // need at least two chars
- pair := raw[j-1 : j+1]
- isTrigger := pair == "?>" || pair == "!>" || pair == ":>" || pair == ";>"
- if !isTrigger {
- continue
- }
+ if j < 0 {
+ continue
+ }
+ // Check suffix/prefix according to configuration
+ if s.chatSuffix == "" {
+ continue
+ }
+ // Last non-space must equal suffix
+ if string(raw[j]) != s.chatSuffix {
+ continue
+ }
+ // Require at least one char before suffix and that char must be in chatPrefixes
+ if j < 1 { continue }
+ prev := string(raw[j-1])
+ isTrigger := false
+ for _, pfx := range s.chatPrefixes {
+ if prev == pfx { isTrigger = true; break }
+ }
+ if !isTrigger { continue }
// Avoid double-answering: if the next non-empty line starts with '>' we skip.
k := i + 1
for k < len(d.lines) && strings.TrimSpace(d.lines[k]) == "" {
@@ -119,9 +135,9 @@ func (s *Server) detectAndHandleChat(uri string) {
continue
}
// Derive prompt by removing only the trailing '>'
- removeCount := 1
+ removeCount := len(s.chatSuffix)
base := raw[:j+1-removeCount]
- prompt := strings.TrimSpace(base)
+ prompt := strings.TrimSpace(base)
if prompt == "" {
continue
}
@@ -230,26 +246,27 @@ func (s *Server) buildChatHistory(uri string, lineIdx int, currentPrompt string)
// stripTrailingTrigger removes the trailing chat trigger punctuation from a line if present.
func stripTrailingTrigger(sx string) string {
- s := strings.TrimRight(sx, " \t")
- if len(s) >= 2 && s[len(s)-1] == '>' { // new triggers
- prev := s[len(s)-2]
- if prev == '?' || prev == '!' || prev == ':' || prev == ';' {
- return strings.TrimRight(s[:len(s)-1], " \t")
- }
- }
- if strings.HasSuffix(s, ";;") { // legacy inline cleanup used in history building
- return strings.TrimRight(strings.TrimSuffix(s, ";;"), " \t")
- }
- if len(s) == 0 {
- return sx
- }
- last := s[len(s)-1]
- switch last { // legacy: remove one trailing punctuation
- case '?', '!', ':':
- return strings.TrimRight(s[:len(s)-1], " \t")
- default:
- return sx
- }
+ s := strings.TrimRight(sx, " \t")
+ if len(s) == 0 {
+ return sx
+ }
+ // Configurable suffix removal when preceded by configured prefixes
+ if len(s) >= 2 && s[len(s)-1] == chatSuffixChar {
+ prev := string(s[len(s)-2])
+ for _, pf := range chatPrefixSingles {
+ if prev == pf {
+ return strings.TrimRight(s[:len(s)-1], " \t")
+ }
+ }
+ }
+ // Legacy: remove one trailing punctuation (?, !, :) to build history nicely
+ last := s[len(s)-1]
+ switch last {
+ case '?', '!', ':':
+ return strings.TrimRight(s[:len(s)-1], " \t")
+ default:
+ return sx
+ }
}
// clientApplyEdit sends a workspace/applyEdit request to the client.
diff --git a/internal/lsp/handlers_end_to_end_test.go b/internal/lsp/handlers_end_to_end_test.go
index 73478e9..fd66a3c 100644
--- a/internal/lsp/handlers_end_to_end_test.go
+++ b/internal/lsp/handlers_end_to_end_test.go
@@ -66,6 +66,8 @@ func TestHandleCodeAction_ListsHexaiActions(t *testing.T) {
// Prepare server
var out bytes.Buffer
s := &Server{logger: log.New(io.Discard, "", 0), docs: make(map[string]*document), out: &out}
+ s.chatSuffix = ">"
+ s.chatPrefixes = []string{"?","!",":",";"}
s.llmClient = fakeLLM{resp: "// doc\nfunc add(a,b int) int { return a+b }"}
// Document with a function
@@ -190,7 +192,7 @@ func TestHandle_Dispatch_Initialize(t *testing.T) {
func TestDetectAndHandleChat_InsertsReply(t *testing.T) {
var out bytes.Buffer
- s := &Server{logger: log.New(io.Discard, "", 0), docs: make(map[string]*document), out: &out}
+ s := NewServer(bytes.NewReader(nil), &out, log.New(io.Discard, "", 0), ServerOptions{})
s.llmClient = fakeLLM{resp: tut.MultilineChatReply()}
uri := "file:///chat.go"
// Place a prompt line with a supported trigger at EOL, then a blank line
diff --git a/internal/lsp/handlers_helpers_test.go b/internal/lsp/handlers_helpers_test.go
index eb7f273..24a9690 100644
--- a/internal/lsp/handlers_helpers_test.go
+++ b/internal/lsp/handlers_helpers_test.go
@@ -6,32 +6,32 @@ import (
)
func TestHasDoubleSemicolonTrigger(t *testing.T) {
- cases := []struct {
- line string
- want bool
- }{
- {";;todo; remove this", true},
- {"prefix ;;x; suffix", true},
- {";; spaced ;", false},
- {"no markers", false},
- {";;x ; space before close", false},
- }
- for _, tc := range cases {
- got := hasDoubleSemicolonTrigger(tc.line)
- if got != tc.want {
- t.Fatalf("hasDoubleSemicolonTrigger(%q)=%v want %v", tc.line, got, tc.want)
- }
- }
+ cases := []struct {
+ line string
+ want bool
+ }{
+ {">>todo> remove this", true},
+ {"prefix >>x> suffix", true},
+ {">> spaced >", false},
+ {"no markers", false},
+ {">>x > space before close", false},
+ }
+ for _, tc := range cases {
+ got := hasDoubleOpenTrigger(tc.line)
+ if got != tc.want {
+ t.Fatalf("hasDoubleOpenTrigger(%q)=%v want %v", tc.line, got, tc.want)
+ }
+ }
}
func TestCollectSemicolonMarkers(t *testing.T) {
- line := "keep ;ok; this and ;another; that"
- edits := collectSemicolonMarkers(line, 7)
- if len(edits) != 2 {
- t.Fatalf("expected 2 edits, got %d", len(edits))
- }
- // Validate the first edit aligns with ;ok;
- start := strings.Index(line, ";ok;")
+ line := "keep >ok> this and >another> that"
+ edits := collectSemicolonMarkers(line, 7)
+ if len(edits) != 2 {
+ t.Fatalf("expected 2 edits, got %d", len(edits))
+ }
+ // Validate the first edit aligns with ;ok;
+ start := strings.Index(line, ">ok>")
if start < 0 {
t.Fatalf("test setup: missing ;ok;")
}
@@ -41,11 +41,11 @@ func TestCollectSemicolonMarkers(t *testing.T) {
}
func TestPromptRemovalEditsForLine_WholeLine(t *testing.T) {
- line := ";;todo; remove this whole line"
- edits := promptRemovalEditsForLine(line, 3)
- if len(edits) != 1 {
- t.Fatalf("expected 1 whole-line edit, got %d", len(edits))
- }
+ line := ">>todo> remove this whole line"
+ edits := promptRemovalEditsForLine(line, 3)
+ if len(edits) != 1 {
+ t.Fatalf("expected 1 whole-line edit, got %d", len(edits))
+ }
e := edits[0]
if e.Range.Start.Line != 3 || e.Range.End.Line != 3 || e.Range.Start.Character != 0 || e.Range.End.Character != len(line) {
t.Fatalf("unexpected range for whole-line removal: %+v", e.Range)
diff --git a/internal/lsp/handlers_test.go b/internal/lsp/handlers_test.go
index 5b84254..8fdd34f 100644
--- a/internal/lsp/handlers_test.go
+++ b/internal/lsp/handlers_test.go
@@ -14,8 +14,8 @@ func TestFindFirstInstructionInLine_NoMarker(t *testing.T) {
}
}
-func TestFindFirstInstructionInLine_StrictSemicolon_Basic(t *testing.T) {
- line := "prefix ;rename var; suffix"
+func TestFindFirstInstructionInLine_StrictInline_Basic(t *testing.T) {
+ line := "prefix >rename var> suffix"
instr, cleaned, ok := findFirstInstructionInLine(line)
if !ok {
t.Fatalf("expected ok=true")
@@ -29,8 +29,8 @@ func TestFindFirstInstructionInLine_StrictSemicolon_Basic(t *testing.T) {
}
}
-func TestFindFirstInstructionInLine_StrictSemicolon_TrailingSpacesTrimmed(t *testing.T) {
- line := "code;fix; \t\t"
+func TestFindFirstInstructionInLine_StrictInline_TrailingSpacesTrimmed(t *testing.T) {
+ line := "code>fix> \t\t"
instr, cleaned, ok := findFirstInstructionInLine(line)
if !ok {
t.Fatalf("expected ok=true")
@@ -43,17 +43,17 @@ func TestFindFirstInstructionInLine_StrictSemicolon_TrailingSpacesTrimmed(t *tes
}
}
-func TestFindFirstInstructionInLine_Semicolon_InvalidPatterns(t *testing.T) {
- cases := []string{
- "prefix ; bad; suffix", // space after first ';' ⇒ invalid
- "prefix ;bad ; suffix", // space before closing ';' ⇒ invalid
- "prefix ; ; suffix", // empty inner ⇒ invalid
- }
- for _, line := range cases {
- if instr, _, ok := findFirstInstructionInLine(line); ok && instr != "" {
- t.Fatalf("%q: expected no semicolon instruction; got instr=%q", line, instr)
- }
- }
+func TestFindFirstInstructionInLine_Inline_InvalidPatterns(t *testing.T) {
+ cases := []string{
+ "prefix > bad> suffix", // space after first '>' ⇒ invalid
+ "prefix >bad > suffix", // space before closing '>' ⇒ invalid
+ "prefix > > suffix", // empty inner ⇒ invalid
+ }
+ for _, line := range cases {
+ if instr, _, ok := findFirstInstructionInLine(line); ok && instr != "" {
+ t.Fatalf("%q: expected no inline instruction; got instr=%q", line, instr)
+ }
+ }
}
func TestFindFirstInstructionInLine_CBlockComment(t *testing.T) {
@@ -126,22 +126,22 @@ func TestFindFirstInstructionInLine_DoubleDash(t *testing.T) {
}
}
-func TestFindFirstInstructionInLine_EarliestWins_CommentOverSemicolon(t *testing.T) {
- line := "aa // comment ;not this; trailing"
+func TestFindFirstInstructionInLine_EarliestWins_CommentOverInline(t *testing.T) {
+ line := "aa // comment >not this> trailing"
instr, cleaned, ok := findFirstInstructionInLine(line)
if !ok {
t.Fatalf("expected ok=true")
}
- if instr != "comment ;not this; trailing" {
- t.Fatalf("instr got %q want %q", instr, "comment ;not this; trailing")
- }
+ if instr != "comment >not this> trailing" {
+ t.Fatalf("instr got %q want %q", instr, "comment >not this> trailing")
+ }
if cleaned != "aa" {
t.Fatalf("cleaned got %q want %q", cleaned, "aa")
}
}
-func TestFindFirstInstructionInLine_EarliestWins_SemicolonOverComment(t *testing.T) {
- line := "aa ;short; // comment"
+func TestFindFirstInstructionInLine_EarliestWins_InlineOverComment(t *testing.T) {
+ line := "aa >short> // comment"
instr, cleaned, ok := findFirstInstructionInLine(line)
if !ok {
t.Fatalf("expected ok=true")
@@ -155,21 +155,21 @@ func TestFindFirstInstructionInLine_EarliestWins_SemicolonOverComment(t *testing
}
}
-func TestFindStrictSemicolonTag_Various(t *testing.T) {
- // basic
- if text, l, r, ok := findStrictSemicolonTag("pre;do it;post"); !ok || text != "do it" || l != 3 || r != 10 {
- t.Fatalf("unexpected: ok=%v text=%q l=%d r=%d", ok, text, l, r)
- }
- // at start
- if text, l, r, ok := findStrictSemicolonTag(";x;"); !ok || text != "x" || l != 0 || r != 3 {
- t.Fatalf("unexpected at start: ok=%v text=%q l=%d r=%d", ok, text, l, r)
- }
- // double opening ';' should still allow a tag starting at the second ';'
- if text, _, _, ok := findStrictSemicolonTag("prefix ;;bad; suffix"); !ok || text != "bad" {
- t.Fatalf("unexpected double-open handling: ok=%v text=%q", ok, text)
- }
- // inner spaces directly after first ';' or before last ';' invalidate the tag
- if _, _, _, ok := findStrictSemicolonTag("a; inner ;b"); ok {
- t.Fatalf("expected invalid strict tag due to spaces at boundaries")
- }
+func TestFindStrictInlineTag_Various(t *testing.T) {
+ // basic
+ if text, l, r, ok := findStrictInlineTag("pre>do it>post"); !ok || text != "do it" || l != 3 || r != 10 {
+ t.Fatalf("unexpected: ok=%v text=%q l=%d r=%d", ok, text, l, r)
+ }
+ // at start
+ if text, l, r, ok := findStrictInlineTag(">x>"); !ok || text != "x" || l != 0 || r != 3 {
+ t.Fatalf("unexpected at start: ok=%v text=%q l=%d r=%d", ok, text, l, r)
+ }
+ // double opening '>>' should still allow a tag starting at the second '>'
+ if text, _, _, ok := findStrictInlineTag("prefix >>bad> suffix"); !ok || text != "bad" {
+ t.Fatalf("unexpected double-open handling: ok=%v text=%q", ok, text)
+ }
+ // inner spaces directly after first '>' or before last '>' invalidate the tag
+ if _, _, _, ok := findStrictInlineTag("a> inner >b"); ok {
+ t.Fatalf("expected invalid strict tag due to spaces at boundaries")
+ }
}
diff --git a/internal/lsp/handlers_utils.go b/internal/lsp/handlers_utils.go
index 42b35a5..e2c35e3 100644
--- a/internal/lsp/handlers_utils.go
+++ b/internal/lsp/handlers_utils.go
@@ -9,6 +9,11 @@ import (
"time"
)
+// Configurable inline trigger characters (default to '>') used by free helpers below.
+// NewServer assigns these based on ServerOptions.
+var inlineOpenChar byte = '>'
+var inlineCloseChar byte = '>'
+
// llmRequestOpts builds request options from server settings.
func (s *Server) llmRequestOpts() []llm.RequestOption {
opts := []llm.RequestOption{llm.WithMaxTokens(s.maxTokens)}
@@ -124,10 +129,10 @@ func isIdentChar(ch byte) bool {
// Inline prompt utilities
func lineHasInlinePrompt(line string) bool {
- if _, _, _, ok := findStrictSemicolonTag(line); ok {
- return true
- }
- return hasDoubleSemicolonTrigger(line)
+ if _, _, _, ok := findStrictInlineTag(line); ok {
+ return true
+ }
+ return hasDoubleOpenTrigger(line)
}
func leadingIndent(line string) string {
@@ -164,61 +169,64 @@ func applyIndent(indent, suggestion string) string {
// --- Inline marker parsing and general string utilities ---
-// findStrictSemicolonTag finds ;text; with no space after first ';' and no space
-// before the last ';' on the given line. Returns the text between semicolons,
-// the start index of the opening ';', the end index just after the closing ';',
-// and whether it was found.
-func findStrictSemicolonTag(line string) (string, int, int, bool) {
- pos := 0
- for pos < len(line) {
- j := strings.Index(line[pos:], ";")
- if j < 0 {
- return "", 0, 0, false
- }
- j += pos
- // ensure single ';' (not ';;') and non-space after
- if j+1 >= len(line) || line[j+1] == ';' || line[j+1] == ' ' {
- pos = j + 1
- continue
- }
- k := strings.Index(line[j+1:], ";")
- if k < 0 {
- return "", 0, 0, false
- }
- closeIdx := j + 1 + k
- if closeIdx-1 < 0 || line[closeIdx-1] == ' ' {
- pos = closeIdx + 1
- continue
- }
- inner := strings.TrimSpace(line[j+1 : closeIdx])
- if inner == "" {
- pos = closeIdx + 1
- continue
- }
- end := closeIdx + 1
- return inner, j, end, true
- }
- return "", 0, 0, false
+// findStrictInlineTag finds >text> (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) (string, int, int, bool) {
+ pos := 0
+ for pos < len(line) {
+ // find opening marker
+ j := strings.IndexByte(line[pos:], inlineOpenChar)
+ if j < 0 {
+ return "", 0, 0, false
+ }
+ j += pos
+ // ensure single open (not double) and non-space after
+ if j+1 >= len(line) || line[j+1] == inlineOpenChar || line[j+1] == ' ' {
+ pos = j + 1
+ continue
+ }
+ // find closing marker
+ k := strings.IndexByte(line[j+1:], inlineCloseChar)
+ if k < 0 {
+ return "", 0, 0, false
+ }
+ closeIdx := j + 1 + k
+ if closeIdx-1 < 0 || line[closeIdx-1] == ' ' {
+ pos = closeIdx + 1
+ continue
+ }
+ inner := strings.TrimSpace(line[j+1 : closeIdx])
+ if inner == "" {
+ pos = closeIdx + 1
+ continue
+ }
+ end := closeIdx + 1
+ return inner, j, end, true
+ }
+ return "", 0, 0, false
}
// isBareDoubleSemicolon reports whether the line contains a standalone
// double-semicolon marker with no inline content (";;" possibly with only
// whitespace after it). It explicitly excludes the valid form ";;text;".
-func isBareDoubleSemicolon(line string) bool {
- t := strings.TrimSpace(line)
- if !strings.Contains(t, ";;") {
- return false
- }
- if hasDoubleSemicolonTrigger(t) {
- return false
- }
- if strings.HasPrefix(t, ";;") {
- rest := strings.TrimSpace(t[2:])
- if rest == "" || rest == ";" {
- return true
- }
- }
- return false
+func isBareDoubleOpen(line string) bool {
+ t := strings.TrimSpace(line)
+ // check for double-open pattern
+ dbl := string([]byte{inlineOpenChar, inlineOpenChar})
+ if !strings.Contains(t, dbl) {
+ return false
+ }
+ if hasDoubleOpenTrigger(t) {
+ return false
+ }
+ if strings.HasPrefix(t, dbl) {
+ rest := strings.TrimSpace(t[len(dbl):])
+ if rest == "" || rest == ";" {
+ return true
+ }
+ }
+ return false
}
// stripDuplicateAssignmentPrefix removes a duplicated assignment prefix from the suggestion.
@@ -401,79 +409,82 @@ func (s *Server) collectPromptRemovalEdits(uri string) []TextEdit {
}
func promptRemovalEditsForLine(line string, lineNum int) []TextEdit {
- if hasDoubleSemicolonTrigger(line) {
- return []TextEdit{{Range: Range{Start: Position{Line: lineNum, Character: 0}, End: Position{Line: lineNum, Character: len(line)}}, NewText: ""}}
- }
- return collectSemicolonMarkers(line, lineNum)
+ if hasDoubleOpenTrigger(line) {
+ return []TextEdit{{Range: Range{Start: Position{Line: lineNum, Character: 0}, End: Position{Line: lineNum, Character: len(line)}}, NewText: ""}}
+ }
+ return collectSemicolonMarkers(line, lineNum)
}
-func hasDoubleSemicolonTrigger(line string) bool {
- pos := 0
- for pos < len(line) {
- j := strings.Index(line[pos:], ";;")
- if j < 0 {
- return false
- }
- j += pos
- contentStart := j + 2
- if contentStart >= len(line) {
- return false
- }
- first := line[contentStart]
- if first == ' ' || first == ';' {
- pos = contentStart + 1
- continue
- }
- k := strings.Index(line[contentStart+1:], ";")
- if k < 0 {
- return false
- }
- closeIdx := contentStart + 1 + k
- if closeIdx-1 >= 0 && line[closeIdx-1] == ' ' {
- pos = closeIdx + 1
- continue
- }
- return true
- }
- return false
+func hasDoubleOpenTrigger(line string) bool {
+ pos := 0
+ for pos < len(line) {
+ // look for double-open sequence
+ dbl := string([]byte{inlineOpenChar, inlineOpenChar})
+ j := strings.Index(line[pos:], dbl)
+ if j < 0 {
+ return false
+ }
+ j += pos
+ contentStart := j + len(dbl)
+ if contentStart >= len(line) {
+ return false
+ }
+ first := line[contentStart]
+ if first == ' ' || first == inlineOpenChar {
+ pos = contentStart + 1
+ continue
+ }
+ // find closing
+ k := strings.IndexByte(line[contentStart+1:], inlineCloseChar)
+ if k < 0 {
+ return false
+ }
+ closeIdx := contentStart + 1 + k
+ if closeIdx-1 >= 0 && line[closeIdx-1] == ' ' {
+ pos = closeIdx + 1
+ continue
+ }
+ return true
+ }
+ return false
}
func collectSemicolonMarkers(line string, lineNum int) []TextEdit {
- var edits []TextEdit
- startSemi := 0
- for startSemi < len(line) {
- j := strings.Index(line[startSemi:], ";")
- if j < 0 {
- break
- }
- j += startSemi
- k := strings.Index(line[j+1:], ";")
- if k < 0 {
- break
- }
- if j+1 >= len(line) || line[j+1] == ' ' {
- startSemi = j + 1
- continue
- }
- if line[j+1] == ';' {
- startSemi = j + 2
- continue
- }
- closeIdx := j + 1 + k
- if closeIdx-1 < 0 || line[closeIdx-1] == ' ' {
- startSemi = closeIdx + 1
- continue
- }
- if closeIdx-(j+1) < 1 {
- startSemi = closeIdx + 1
- continue
- }
- endChar := closeIdx + 1
- if endChar < len(line) && line[endChar] == ' ' {
- endChar++
- }
- edits = append(edits, TextEdit{Range: Range{Start: Position{Line: lineNum, Character: j}, End: Position{Line: lineNum, Character: endChar}}, NewText: ""})
- startSemi = endChar
- }
- return edits
+ var edits []TextEdit
+ startSemi := 0
+ for startSemi < len(line) {
+ j := strings.IndexByte(line[startSemi:], inlineOpenChar)
+ if j < 0 {
+ break
+ }
+ j += startSemi
+ k := strings.IndexByte(line[j+1:], inlineCloseChar)
+ if k < 0 {
+ break
+ }
+ if j+1 >= len(line) || line[j+1] == ' ' {
+ startSemi = j + 1
+ continue
+ }
+ if line[j+1] == inlineOpenChar { // skip double-open start
+ startSemi = j + 2
+ continue
+ }
+ closeIdx := j + 1 + k
+ if closeIdx-1 < 0 || line[closeIdx-1] == ' ' {
+ startSemi = closeIdx + 1
+ continue
+ }
+ if closeIdx-(j+1) < 1 {
+ startSemi = closeIdx + 1
+ continue
+ }
+ endChar := closeIdx + 1
+ if endChar < len(line) && line[endChar] == ' ' {
+ endChar++
+ }
+ edits = append(edits, TextEdit{Range: Range{Start: Position{Line: lineNum, Character: j}, End: Position{Line: lineNum, Character: endChar}}, NewText: ""})
+ startSemi = endChar
+ }
+ return edits
}
diff --git a/internal/lsp/helpers_inline_prompt_test.go b/internal/lsp/helpers_inline_prompt_test.go
new file mode 100644
index 0000000..81312b4
--- /dev/null
+++ b/internal/lsp/helpers_inline_prompt_test.go
@@ -0,0 +1,58 @@
+package lsp
+
+import (
+ "encoding/json"
+ "testing"
+)
+
+func TestLineHasInlinePrompt_BasicAndDoubleOpen(t *testing.T) {
+ // Basic inline
+ if !lineHasInlinePrompt("do >task> now") {
+ t.Fatalf("expected inline prompt detection for >text>")
+ }
+ // Double-open variant should be recognized as inline prompt too
+ if !lineHasInlinePrompt(">>replace>") {
+ t.Fatalf("expected inline prompt detection for >>text>")
+ }
+}
+
+func TestIsTriggerEvent_TriggerCharNotAllowed(t *testing.T) {
+ s := newTestServer()
+ s.triggerChars = []string{"."} // only dot allowed
+ p := CompletionParams{Position: Position{Line:0, Character:3}}
+ if s.isTriggerEvent(p, "ab:") { // ':' not in triggerChars
+ t.Fatalf("expected false when TriggerCharacter not configured")
+ }
+}
+
+func TestShouldSuppressForChatTriggerEOL_EmptySuffix_NoSuppression(t *testing.T) {
+ s := newTestServer()
+ s.chatSuffix = "" // disabled
+ p := CompletionParams{Position: Position{Line:0, Character:5}}
+ if s.shouldSuppressForChatTriggerEOL("What?>", p) {
+ t.Fatalf("expected no suppression when chat suffix is empty")
+ }
+}
+
+func TestIsTriggerEvent_TriggerCharacterMissing_ReturnsFalse(t *testing.T) {
+ s := newTestServer()
+ // Context says TriggerCharacter, but none provided
+ ctx := struct{ TriggerKind int `json:"triggerKind"` }{TriggerKind: 2}
+ raw, _ := json.Marshal(ctx)
+ p := CompletionParams{Position: Position{Line:0, Character:1}, Context: json.RawMessage(raw)}
+ if s.isTriggerEvent(p, "a") {
+ t.Fatalf("expected false when TriggerCharacter kind with empty char")
+ }
+}
+
+func TestIsTriggerEvent_TriggerForIncomplete_FallsBackToChar(t *testing.T) {
+ s := newTestServer()
+ s.triggerChars = []string{"."}
+ // TriggerKind=3 should consult fallback char check
+ ctx := struct{ TriggerKind int `json:"triggerKind"` }{TriggerKind: 3}
+ raw, _ := json.Marshal(ctx)
+ p := CompletionParams{Position: Position{Line:0, Character:2}, Context: json.RawMessage(raw)}
+ if !s.isTriggerEvent(p, "x.") {
+ t.Fatalf("expected true via fallback char for TriggerForIncomplete")
+ }
+}
diff --git a/internal/lsp/helpers_more_test.go b/internal/lsp/helpers_more_test.go
index 64631f7..28d78a4 100644
--- a/internal/lsp/helpers_more_test.go
+++ b/internal/lsp/helpers_more_test.go
@@ -14,9 +14,9 @@ func TestLeadingAndApplyIndent(t *testing.T) {
if out == "" || out[:2] != " " { t.Fatalf("applyIndent failed: %q", out) }
}
-func TestFindStrictSemicolonTag(t *testing.T) {
- if _, _, _, ok := findStrictSemicolonTag(";do this; next"); !ok { t.Fatalf("expected strict tag") }
- if _, _, _, ok := findStrictSemicolonTag("; spaced ;"); ok { t.Fatalf("should ignore spaced tag") }
+func TestFindStrictInlineTag(t *testing.T) {
+ if _, _, _, ok := findStrictInlineTag(">do this> next"); !ok { t.Fatalf("expected strict tag") }
+ if _, _, _, ok := findStrictInlineTag("> spaced >"); ok { t.Fatalf("should ignore spaced tag") }
}
// hasDoubleSemicolonTrigger tested elsewhere
@@ -34,6 +34,10 @@ func TestExtractRangeText(t *testing.T) {
// multi-line
got = extractRangeText(d, Range{Start: Position{Line:0, Character:0}, End: Position{Line:2, Character:2}})
if got != "a\nbc\nxy" { t.Fatalf("got %q", got) }
+ // invalid range (start after end) returns empty string
+ if got := extractRangeText(d, Range{Start: Position{Line:1, Character:5}, End: Position{Line:1, Character:2}}); got != "" {
+ t.Fatalf("expected empty for invalid range, got %q", got)
+ }
}
func TestRangesOverlapAndOrder(t *testing.T) {
@@ -47,18 +51,18 @@ func TestRangesOverlapAndOrder(t *testing.T) {
}
func TestPromptRemovalEditsForLine(t *testing.T) {
- edits := promptRemovalEditsForLine(";;do thing;", 3)
+ edits := promptRemovalEditsForLine(">>do thing>", 3)
if len(edits) != 1 || edits[0].Range.Start.Line != 3 {
t.Fatalf("expected full-line removal for double-semicolon")
}
- edits2 := promptRemovalEditsForLine(";act; and ;b;", 1)
+ edits2 := promptRemovalEditsForLine(">act> and >b>", 1)
if len(edits2) == 0 { t.Fatalf("expected edits to remove strict markers") }
}
func TestCollectPromptRemovalEdits_MultiLine(t *testing.T) {
s := newTestServer()
uri := "file:///t.go"
- s.setDocument(uri, "a\n;do; x\n;;wipe;\nend")
+ s.setDocument(uri, "a\n>do> x\n>>wipe>\nend")
edits := s.collectPromptRemovalEdits(uri)
if len(edits) < 2 { t.Fatalf("expected >=2 edits, got %d", len(edits)) }
}
@@ -89,9 +93,9 @@ func TestComputeTextEditAndFilter(t *testing.T) {
if te2 == nil || te2.Range.Start.Character == 0 { t.Fatalf("expected param-range edit") }
}
-func TestIsBareDoubleSemicolon(t *testing.T) {
- if !isBareDoubleSemicolon(";; ") { t.Fatalf("expected true") }
- if isBareDoubleSemicolon(";;x;") { t.Fatalf("expected false for content form") }
+func TestIsBareDoubleOpen(t *testing.T) {
+ if !isBareDoubleOpen(">> ") { t.Fatalf("expected true") }
+ if isBareDoubleOpen(">>x>") { t.Fatalf("expected false for content form") }
}
func TestIsDefiningNewFunction(t *testing.T) {
diff --git a/internal/lsp/init_and_trigger_test.go b/internal/lsp/init_and_trigger_test.go
index cdc907e..64253a9 100644
--- a/internal/lsp/init_and_trigger_test.go
+++ b/internal/lsp/init_and_trigger_test.go
@@ -45,8 +45,7 @@ func TestIsTriggerEvent_Variants(t *testing.T) {
// 3) Fallback char left of cursor
p3 := CompletionParams{Position: Position{Line:0, Character:3}}
if !s.isTriggerEvent(p3, "ab:") { t.Fatalf("fallback char should trigger") }
- // 4) Bare ';;' disables trigger
+ // 4) Bare double-open disables trigger
p4 := CompletionParams{Position: Position{Line:0, Character:2}}
- if s.isTriggerEvent(p4, ";;") { t.Fatalf("bare ;; should not trigger") }
+ if s.isTriggerEvent(p4, ">>") { t.Fatalf("bare double-open should not trigger") }
}
-
diff --git a/internal/lsp/instruction_table_test.go b/internal/lsp/instruction_table_test.go
index e92ffde..06364db 100644
--- a/internal/lsp/instruction_table_test.go
+++ b/internal/lsp/instruction_table_test.go
@@ -8,7 +8,7 @@ func TestFindFirstInstructionInLine_Table(t *testing.T) {
line string
instr string
}{
- {"strict_semicolon", ";do; trailing", "do"},
+ {"strict_inline_marker", ">do> trailing", "do"},
{"c_block", "x /* add docs */ y", "add docs"},
{"html_comment", "<!-- fix --> code", "fix"},
{"slash_slash", "code // please refactor", "please refactor"},
@@ -22,4 +22,3 @@ func TestFindFirstInstructionInLine_Table(t *testing.T) {
}
}
}
-
diff --git a/internal/lsp/llm_stats_test.go b/internal/lsp/llm_stats_test.go
new file mode 100644
index 0000000..9e27823
--- /dev/null
+++ b/internal/lsp/llm_stats_test.go
@@ -0,0 +1,11 @@
+package lsp
+
+import "testing"
+
+func TestLogLLMStats_CoversCounters(t *testing.T) {
+ s := newTestServer()
+ s.incSentCounters(10)
+ s.incRecvCounters(20)
+ s.logLLMStats() // just ensure it does not panic and executes
+}
+
diff --git a/internal/lsp/postprocess_indent_test.go b/internal/lsp/postprocess_indent_test.go
index 4b4ad2a..b546068 100644
--- a/internal/lsp/postprocess_indent_test.go
+++ b/internal/lsp/postprocess_indent_test.go
@@ -2,13 +2,12 @@ package lsp
import "testing"
-func TestPostProcessCompletion_IndentWithDoubleSemicolon(t *testing.T) {
+func TestPostProcessCompletion_IndentWithDoubleOpen(t *testing.T) {
s := newTestServer()
- cleaned := s.postProcessCompletion("a\nb", "", " ;;gen;")
+ cleaned := s.postProcessCompletion("a\nb", "", " >>gen>")
// Expect each non-empty line to be indented by two spaces
want := " a\n b"
if cleaned != want {
t.Fatalf("got %q want %q", cleaned, want)
}
}
-
diff --git a/internal/lsp/provider_native_success_test.go b/internal/lsp/provider_native_success_test.go
index 7db3844..fd7afad 100644
--- a/internal/lsp/provider_native_success_test.go
+++ b/internal/lsp/provider_native_success_test.go
@@ -31,3 +31,24 @@ func TestProviderNativeCompletion_Success(t *testing.T) {
}
}
+type fakeCompleterIndent struct{}
+
+func (fakeCompleterIndent) Chat(context.Context, []llm.Message, ...llm.RequestOption) (string, error) { return "", nil }
+func (fakeCompleterIndent) Name() string { return "prov" }
+func (fakeCompleterIndent) DefaultModel() string { return "m" }
+func (fakeCompleterIndent) CodeCompletion(context.Context, string, string, int, string, float64) ([]string, error) {
+ return []string{"a\nb"}, nil
+}
+
+func TestProviderNativeCompletion_IndentWithDoubleOpen(t *testing.T) {
+ s := newTestServer()
+ s.llmClient = fakeCompleterIndent{}
+ current := " >>do>" // leading indent + double-open marker
+ p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x.go"}, Position: Position{Line: 0, Character: len(current)}}
+ items, ok := s.tryProviderNativeCompletion(current, p, "", "", "func f(){}", "doc", false, "", false)
+ if !ok || len(items) == 0 { t.Fatalf("expected provider-native items") }
+ if items[0].TextEdit == nil { t.Fatalf("expected text edit") }
+ if got := items[0].TextEdit.NewText; len(got) < 2 || got[:2] != " " {
+ t.Fatalf("expected indentation applied, got %q", got)
+ }
+}
diff --git a/internal/lsp/server.go b/internal/lsp/server.go
index 7a1007e..e040d08 100644
--- a/internal/lsp/server.go
+++ b/internal/lsp/server.go
@@ -2,14 +2,15 @@
package lsp
import (
- "bufio"
- "encoding/json"
- "codeberg.org/snonux/hexai/internal/llm"
- "codeberg.org/snonux/hexai/internal/logging"
- "io"
- "log"
- "sync"
- "time"
+ "bufio"
+ "encoding/json"
+ "codeberg.org/snonux/hexai/internal/llm"
+ "codeberg.org/snonux/hexai/internal/logging"
+ "io"
+ "log"
+ "strings"
+ "sync"
+ "time"
)
// Server implements a minimal LSP over stdio.
@@ -51,6 +52,12 @@ type Server struct {
// Dispatch table for JSON-RPC methods → handler functions
handlers map[string]func(Request)
+
+ // Configurable trigger characters
+ inlineOpen string
+ inlineClose string
+ chatSuffix string
+ chatPrefixes []string
}
// ServerOptions collects configuration for NewServer to avoid long parameter lists.
@@ -67,6 +74,12 @@ type ServerOptions struct {
ManualInvokeMinPrefix int
CompletionDebounceMs int
CompletionThrottleMs int
+
+ // Inline/chat triggers
+ InlineOpen string
+ InlineClose string
+ ChatSuffix string
+ ChatPrefixes []string
}
func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server {
@@ -109,6 +122,17 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions)
if opts.CompletionThrottleMs > 0 {
s.throttleInterval = time.Duration(opts.CompletionThrottleMs) * time.Millisecond
}
+ // Trigger character config (with sane defaults if missing)
+ if strings.TrimSpace(opts.InlineOpen) == "" { s.inlineOpen = ">" } else { s.inlineOpen = opts.InlineOpen }
+ if strings.TrimSpace(opts.InlineClose) == "" { s.inlineClose = ">" } else { s.inlineClose = opts.InlineClose }
+ if strings.TrimSpace(opts.ChatSuffix) == "" { s.chatSuffix = ">" } else { s.chatSuffix = opts.ChatSuffix }
+ if len(opts.ChatPrefixes) == 0 { s.chatPrefixes = []string{"?","!",":",";"} } else { s.chatPrefixes = append([]string{}, opts.ChatPrefixes...) }
+
+ // Assign package-level inline trigger chars for free helper functions
+ if s.inlineOpen != "" { inlineOpenChar = s.inlineOpen[0] }
+ if s.inlineClose != "" { inlineCloseChar = s.inlineClose[0] }
+ if s.chatSuffix != "" { chatSuffixChar = s.chatSuffix[0] }
+ if len(s.chatPrefixes) > 0 { chatPrefixSingles = append([]string{}, s.chatPrefixes...) }
// Initialize dispatch table
s.handlers = map[string]func(Request){
"initialize": s.handleInitialize,
diff --git a/internal/lsp/transport_test.go b/internal/lsp/transport_test.go
index 0a01acd..c00b405 100644
--- a/internal/lsp/transport_test.go
+++ b/internal/lsp/transport_test.go
@@ -17,6 +17,20 @@ func TestReadMessage_ParsesContentLength(t *testing.T) {
if err != nil || string(got) != string(body) { t.Fatalf("readMessage failed: %v %q", err, string(got)) }
}
+func TestWriteMessage_FramesJSON(t *testing.T) {
+ var out bytes.Buffer
+ s := &Server{out: &out}
+ payload := struct{ JSONRPC string `json:"jsonrpc"`; Ping string `json:"ping"` }{JSONRPC: "2.0", Ping: "pong"}
+ s.writeMessage(payload)
+ got := out.String()
+ if !bytes.HasPrefix([]byte(got), []byte("Content-Length: ")) { t.Fatalf("missing Content-Length header: %q", got) }
+ // Header/body delimiter must be present
+ idx := bytes.Index([]byte(got), []byte("\r\n\r\n"))
+ if idx < 0 { t.Fatalf("missing CRLFCRLF delimiter: %q", got) }
+ body := got[idx+4:]
+ if body == "" || body[0] != '{' || body[len(body)-1] != '}' { t.Fatalf("body not JSON: %q", body) }
+}
+
func stringInt(n int) string {
if n == 0 { return "0" }
var b [20]byte
@@ -24,4 +38,3 @@ func stringInt(n int) string {
for n > 0 { i--; b[i] = byte('0' + n%10); n /= 10 }
return string(b[i:])
}
-
diff --git a/internal/lsp/triggers_config_test.go b/internal/lsp/triggers_config_test.go
new file mode 100644
index 0000000..7fd6ecd
--- /dev/null
+++ b/internal/lsp/triggers_config_test.go
@@ -0,0 +1,74 @@
+package lsp
+
+import (
+ "bytes"
+ "encoding/json"
+ "io"
+ "log"
+ "testing"
+ "time"
+)
+
+func TestShouldSuppressForChatTriggerEOL_CustomConfig(t *testing.T) {
+ s := newTestServer()
+ // Customize: only ")#" at EOL suppresses
+ s.chatSuffix = "#"
+ s.chatPrefixes = []string{")"}
+
+ p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x"}, Position: Position{Line:0, Character:6}}
+ if !s.shouldSuppressForChatTriggerEOL("ok)#", p) {
+ t.Fatalf("expected suppression for custom prefix+suffix at EOL")
+ }
+ if s.shouldSuppressForChatTriggerEOL("ok]#", p) {
+ t.Fatalf("did not expect suppression for non-matching prefix")
+ }
+}
+
+func TestNewServer_AssignsTriggerGlobals_AndParsingUsesThem(t *testing.T) {
+ var out bytes.Buffer
+ s := NewServer(bytes.NewReader(nil), &out, log.New(io.Discard, "", 0), ServerOptions{
+ InlineOpen: "<", InlineClose: ">", ChatSuffix: ")", ChatPrefixes: []string{":"},
+ })
+ _ = s // ensure server constructed applies globals
+ if inlineOpenChar != '<' || inlineCloseChar != '>' {
+ t.Fatalf("inline markers not applied: %q %q", string(inlineOpenChar), string(inlineCloseChar))
+ }
+ if chatSuffixChar != ')' || len(chatPrefixSingles) == 0 || chatPrefixSingles[0] != ":" {
+ t.Fatalf("chat markers not applied: suffix=%q prefixes=%v", string(chatSuffixChar), chatPrefixSingles)
+ }
+ if txt, l, r, ok := findStrictInlineTag("x<do>y"); !ok || txt != "do" || l != 1 || r != 5 {
+ t.Fatalf("findStrictInlineTag failed: ok=%v txt=%q l=%d r=%d", ok, txt, l, r)
+ }
+ if got := stripTrailingTrigger("note:)"); got != "note:" {
+ t.Fatalf("stripTrailingTrigger failed: %q", got)
+ }
+}
+
+func TestIsTriggerEvent_BareDoubleOpenBlocksEvenWithContextTriggerChar(t *testing.T) {
+ s := newTestServer()
+ s.inlineOpen = ">" // ensure bare ">>" check is active
+ s.triggerChars = []string{"."}
+ // LSP context indicates TriggerCharacter '.' but current line is bare ">>"
+ ctx := struct {
+ TriggerKind int `json:"triggerKind"`
+ TriggerCharacter string `json:"triggerCharacter"`
+ }{TriggerKind: 2, TriggerCharacter: "."}
+ raw, _ := json.Marshal(ctx)
+ p := CompletionParams{Position: Position{Line: 0, Character: 2}, Context: json.RawMessage(raw)}
+ if s.isTriggerEvent(p, ">>") {
+ t.Fatalf("bare double-open should block trigger event even with context trigger char")
+ }
+}
+
+func TestDetectAndHandleChat_CustomConfig_InsertsReply(t *testing.T) {
+ var out bytes.Buffer
+ s := NewServer(bytes.NewReader(nil), &out, log.New(io.Discard, "", 0), ServerOptions{ChatSuffix: "#", ChatPrefixes: []string{")"}})
+ s.llmClient = fakeLLM{resp: "Hello\nmulti-line reply"}
+ uri := "file:///chat2.go"
+ s.setDocument(uri, "ok)#\n\n")
+ out.Reset()
+ s.detectAndHandleChat(uri)
+ // Give time for applyEdit request
+ for i := 0; i < 20 && out.Len() == 0; i++ { time.Sleep(10 * time.Millisecond) }
+ if out.Len() == 0 { t.Fatalf("no output written for custom chat config") }
+}