diff options
| author | Paul Buetow <paul@buetow.org> | 2025-08-16 16:02:47 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-08-16 16:02:47 +0300 |
| commit | 2a7acf566f93a7d660e6909dc6a829e17fe76066 (patch) | |
| tree | 7c27a856d26cd9cf7325af6acec410be97a9162e | |
| parent | 02cc0e3ac6c08f422f11b668c729102fcf0c7f38 (diff) | |
context: log when full-file/window context is skipped because document is not open; add -no-disk-io flag with HEXAI_NO_DISK_IO env; plumb through server
| -rw-r--r-- | README.md | 1 | ||||
| -rw-r--r-- | internal/lsp/context.go | 7 | ||||
| -rw-r--r-- | internal/lsp/server.go | 4 |
3 files changed, 10 insertions, 2 deletions
@@ -47,3 +47,4 @@ Notes: | `-context-window-lines` | `120` | `HEXAI_CONTEXT_WINDOW_LINES` | Lines around cursor when using `window` mode. | | `-max-context-tokens` | `2000` | `HEXAI_MAX_CONTEXT_TOKENS` | Token budget for additional context. | | `-log-preview-limit` | `0` (unlimited) | `HEXAI_LOG_PREVIEW_LIMIT` | Limit characters shown in LLM preview logs. | +| `-no-disk-io` | `true` | `HEXAI_NO_DISK_IO` | Disallow any disk reads for context. | diff --git a/internal/lsp/context.go b/internal/lsp/context.go index c08a865..8b7ed67 100644 --- a/internal/lsp/context.go +++ b/internal/lsp/context.go @@ -33,6 +33,9 @@ func (s *Server) buildAdditionalContext(newFunc bool, uri string, pos Position) func (s *Server) windowContext(uri string, pos Position) string { d := s.getDocument(uri) if d == nil || len(d.lines) == 0 { + if s.logger != nil { + s.logger.Printf("context: window requested but document not open; skipping uri=%s", uri) + } return "" } n := len(d.lines) @@ -52,6 +55,9 @@ func (s *Server) windowContext(uri string, pos Position) string { func (s *Server) fullFileContext(uri string) string { d := s.getDocument(uri) if d == nil { + if s.logger != nil { + s.logger.Printf("context: full-file requested but document not open; skipping uri=%s", uri) + } return "" } return truncateToApproxTokens(d.text, s.maxContextTokens) @@ -77,4 +83,3 @@ func truncateToApproxTokens(text string, maxTokens int) string { } return text[:cut] } - diff --git a/internal/lsp/server.go b/internal/lsp/server.go index 3154613..865d033 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -25,9 +25,10 @@ type Server struct { contextMode string windowLines int maxContextTokens int + noDiskIO bool } -func NewServer(r io.Reader, w io.Writer, logger *log.Logger, logContext bool, maxTokens int, contextMode string, windowLines int, maxContextTokens int) *Server { +func NewServer(r io.Reader, w io.Writer, logger *log.Logger, logContext bool, maxTokens int, contextMode string, windowLines int, maxContextTokens int, noDiskIO bool) *Server { s := &Server{in: bufio.NewReader(r), out: w, logger: logger, docs: make(map[string]*document), logContext: logContext} if maxTokens <= 0 { maxTokens = 500 @@ -45,6 +46,7 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, logContext bool, ma s.contextMode = contextMode s.windowLines = windowLines s.maxContextTokens = maxContextTokens + s.noDiskIO = noDiskIO if c, err := llm.NewDefault(logger); err != nil { s.logger.Printf("llm disabled: %v", err) } else { |
