summaryrefslogtreecommitdiff
path: root/internal/lsp
diff options
context:
space:
mode:
Diffstat (limited to 'internal/lsp')
-rw-r--r--internal/lsp/handlers.go6
-rw-r--r--internal/lsp/handlers_completion.go22
-rw-r--r--internal/lsp/handlers_document.go22
-rw-r--r--internal/lsp/handlers_utils.go6
-rw-r--r--internal/lsp/server.go8
5 files changed, 45 insertions, 19 deletions
diff --git a/internal/lsp/handlers.go b/internal/lsp/handlers.go
index 0f98715..b06b5ea 100644
--- a/internal/lsp/handlers.go
+++ b/internal/lsp/handlers.go
@@ -158,8 +158,10 @@ func (s *Server) checkTriggerFromContext(p CompletionParams, current string, ope
logging.Logf("lsp ", "handleCompletion: unmarshal raw context: %v", err)
}
} else {
- b, _ := json.Marshal(p.Context)
- if err := json.Unmarshal(b, &ctx); err != nil {
+ b, err := json.Marshal(p.Context)
+ if err != nil {
+ logging.Logf("lsp ", "handleCompletion: marshal context: %v", err)
+ } else if err := json.Unmarshal(b, &ctx); err != nil {
logging.Logf("lsp ", "handleCompletion: unmarshal context: %v", err)
}
}
diff --git a/internal/lsp/handlers_completion.go b/internal/lsp/handlers_completion.go
index d6529de..e6d8951 100644
--- a/internal/lsp/handlers_completion.go
+++ b/internal/lsp/handlers_completion.go
@@ -93,8 +93,10 @@ func extractTriggerInfo(p CompletionParams) (kind int, ch string) {
logging.Logf("lsp ", "extractTriggerInfo: unmarshal raw context: %v", err)
}
} else {
- b, _ := json.Marshal(p.Context)
- if err := json.Unmarshal(b, &ctx); err != nil {
+ b, err := json.Marshal(p.Context)
+ if err != nil {
+ logging.Logf("lsp ", "extractTriggerInfo: marshal context: %v", err)
+ } else if err := json.Unmarshal(b, &ctx); err != nil {
logging.Logf("lsp ", "extractTriggerInfo: unmarshal context: %v", err)
}
}
@@ -325,7 +327,10 @@ func (s *Server) executeChatCompletion(ctx context.Context, plan completionPlan,
}
s.incRecvCounters(len(text))
modelUsed := spec.effectiveModel(client.DefaultModel())
- _ = stats.Update(ctx, client.Name(), modelUsed, sentSize, len(text))
+ // Update global stats cache; log but don't fail on stats errors
+ if err := stats.Update(ctx, client.Name(), modelUsed, sentSize, len(text)); err != nil {
+ logging.Logf("lsp ", "stats update error: %v", err)
+ }
s.logLLMStats(modelUsed)
trimmed := strings.TrimSpace(text)
cursorByte := utf16OffsetToByteOffset(plan.current, plan.params.Position.Character)
@@ -357,8 +362,10 @@ func parseManualInvoke(ctx any) bool {
logging.Logf("lsp ", "parseManualInvoke: unmarshal raw context: %v", err)
}
} else {
- b, _ := json.Marshal(ctx)
- if err := json.Unmarshal(b, &c); err != nil {
+ b, err := json.Marshal(ctx)
+ if err != nil {
+ logging.Logf("lsp ", "parseManualInvoke: marshal context: %v", err)
+ } else if err := json.Unmarshal(b, &c); err != nil {
logging.Logf("lsp ", "parseManualInvoke: unmarshal context: %v", err)
}
}
@@ -501,7 +508,10 @@ func (s *Server) tryProviderNativeCompletion(ctx context.Context, plan completio
}
s.incSentCounters(sentBytes)
s.incRecvCounters(len(suggestions[0]))
- _ = stats.Update(ctx2, client.Name(), modelUsed, sentBytes, len(suggestions[0]))
+ // Update global stats cache; log but don't fail on stats errors
+ if err := stats.Update(ctx2, client.Name(), modelUsed, sentBytes, len(suggestions[0])); err != nil {
+ logging.Logf("lsp ", "stats update error: %v", err)
+ }
s.logLLMStats(modelUsed)
cleaned := s.postProcessNativeCompletion(suggestions[0], current, p.Position.Character)
if cleaned == "" {
diff --git a/internal/lsp/handlers_document.go b/internal/lsp/handlers_document.go
index f69c626..7c59aa8 100644
--- a/internal/lsp/handlers_document.go
+++ b/internal/lsp/handlers_document.go
@@ -2,6 +2,7 @@
package lsp
import (
+ "context"
"encoding/json"
"strings"
"time"
@@ -400,9 +401,13 @@ func (s *Server) buildChatMessages(uri string, pos Position, prompt string) []ll
// clientApplyEdit sends a workspace/applyEdit request to the client.
func (s *Server) clientApplyEdit(label string, edit WorkspaceEdit) {
params := ApplyWorkspaceEditParams{Label: label, Edit: edit}
+ b, err := json.Marshal(params)
+ if err != nil {
+ logging.Logf("lsp ", "clientApplyEdit: marshal error: %v", err)
+ return
+ }
id := s.nextReqID()
req := Request{JSONRPC: "2.0", ID: id, Method: "workspace/applyEdit"}
- b, _ := json.Marshal(params)
req.Params = b
s.writeMessage(req)
}
@@ -428,9 +433,13 @@ func (s *Server) clientShowDocument(uri string, sel *Range) {
params.URI = uri
params.TakeFocus = true
params.Selection = sel
+ b, err := json.Marshal(params)
+ if err != nil {
+ logging.Logf("lsp ", "clientShowDocument: marshal error: %v", err)
+ return
+ }
id := s.nextReqID()
req := Request{JSONRPC: "2.0", ID: id, Method: "window/showDocument"}
- b, _ := json.Marshal(params)
req.Params = b
s.writeMessage(req)
}
@@ -440,14 +449,13 @@ func (s *Server) clientShowDocument(uri string, sel *Range) {
// The goroutine respects s.serverCtx so it won't write after shutdown.
func (s *Server) deferShowDocument(uri string, sel Range) {
ctx := s.serverCtx
+ if ctx == nil {
+ // Fallback for tests that don't set a server context.
+ ctx = context.Background()
+ }
s.inflight.Add(1)
go func() {
defer s.inflight.Done()
- if ctx == nil {
- time.Sleep(120 * time.Millisecond)
- s.clientShowDocument(uri, &sel)
- return
- }
select {
case <-time.After(120 * time.Millisecond):
s.clientShowDocument(uri, &sel)
diff --git a/internal/lsp/handlers_utils.go b/internal/lsp/handlers_utils.go
index e3c65a5..048c2fd 100644
--- a/internal/lsp/handlers_utils.go
+++ b/internal/lsp/handlers_utils.go
@@ -278,8 +278,10 @@ func (s *Server) chatWithStats(ctx context.Context, surface surfaceKind, spec re
return "", err
}
s.incRecvCounters(len(txt))
- // Update global stats cache
- _ = stats.Update(ctx, client.Name(), modelUsed, sent, len(txt))
+ // Update global stats cache; log but don't fail on stats errors
+ if err := stats.Update(ctx, client.Name(), modelUsed, sent, len(txt)); err != nil {
+ logging.Logf("lsp ", "stats update error: %v", err)
+ }
s.logLLMStats(modelUsed)
return txt, nil
}
diff --git a/internal/lsp/server.go b/internal/lsp/server.go
index 25c5e5c..7675d34 100644
--- a/internal/lsp/server.go
+++ b/internal/lsp/server.go
@@ -344,13 +344,17 @@ func (s *Server) cancelRequests() {
func (s *Server) emitLLMStartStatus(provider, model string) {
if s.statusSink != nil {
- _ = s.statusSink.SetLLMStart(provider, model)
+ if err := s.statusSink.SetLLMStart(provider, model); err != nil {
+ logging.Logf("lsp ", "status sink SetLLMStart error: %v", err)
+ }
}
}
func (s *Server) emitGlobalStatus(gs GlobalStatus) {
if s.statusSink != nil {
- _ = s.statusSink.SetGlobal(gs)
+ if err := s.statusSink.SetGlobal(gs); err != nil {
+ logging.Logf("lsp ", "status sink SetGlobal error: %v", err)
+ }
}
}