From 3ea11bc5d671d962d01b57fa0fba0bda611025fe Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 23 Mar 2026 08:27:18 +0200 Subject: fix: code quality improvements across lsp, askcli, appconfig, integrationtests - lsp/handlers_completion.go: track collectFirstCompletion goroutine in inflight WaitGroup (goroutine leak fix) - lsp/transport.go: use %w instead of %v for error wrapping - askcli/command_list.go: extract handleListWithFilters shared helper; handleList/handleAll/handleReady are now single-liners - askcli/command_list.go, urgency.go, dep.go: log ParseTaskExport errors to stderr instead of returning 1 silently - appconfig/config_load.go: rename 'any' variable to 'found' to avoid shadowing the built-in identifier - llm/provider.go: add explanatory comment for package-level registry - integrationtests/ask_test.go: add //go:build integration tag; move repoRoot init from init() to TestMain with diagnostic error message Co-Authored-By: Claude Sonnet 4.6 --- internal/lsp/handlers_completion.go | 8 +++++++- internal/lsp/transport.go | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'internal/lsp') diff --git a/internal/lsp/handlers_completion.go b/internal/lsp/handlers_completion.go index aa22fc2..527d020 100644 --- a/internal/lsp/handlers_completion.go +++ b/internal/lsp/handlers_completion.go @@ -216,7 +216,13 @@ func collectCompletionResults(results <-chan completionJobResult) []CompletionIt func (s *Server) firstCompletionAndStore(results <-chan completionJobResult, cacheKey string, end func()) ([]CompletionItem, bool) { firstCh := make(chan []CompletionItem, 1) - go s.collectFirstCompletion(results, cacheKey, firstCh, end) + // Track this goroutine in inflight so Run's deferred Wait() catches it + // and prevents use-after-close writes on shutdown. + s.inflight.Add(1) + go func() { + defer s.inflight.Done() + s.collectFirstCompletion(results, cacheKey, firstCh, end) + }() firstItems, ok := <-firstCh if !ok || len(firstItems) == 0 { return nil, false diff --git a/internal/lsp/transport.go b/internal/lsp/transport.go index bca2c37..3547dfa 100644 --- a/internal/lsp/transport.go +++ b/internal/lsp/transport.go @@ -33,7 +33,7 @@ func (s *Server) readMessage() ([]byte, error) { case "content-length": n, err := strconv.Atoi(val) if err != nil { - return nil, fmt.Errorf("invalid Content-Length: %v", err) + return nil, fmt.Errorf("invalid Content-Length: %w", err) } contentLength = n } -- cgit v1.2.3