From dc383b4faef881f3bb22816f42c53a79236a4152 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 17 Aug 2025 00:06:00 +0300 Subject: lsp/config: make completion trigger characters configurable - Add trigger_characters to JSON config and ServerOptions - Store on server and advertise in initialize - Update README and example config - Preserve previous defaults when unset --- internal/lsp/server.go | 63 +++++++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 24 deletions(-) (limited to 'internal/lsp/server.go') diff --git a/internal/lsp/server.go b/internal/lsp/server.go index 81cb661..f828ec8 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -27,6 +27,7 @@ type Server struct { windowLines int maxContextTokens int noDiskIO bool + triggerChars []string // LLM request stats llmReqTotal int64 llmSentBytesTotal int64 @@ -37,33 +38,47 @@ type Server struct { // ServerOptions collects configuration for NewServer to avoid long parameter lists. type ServerOptions struct { - LogContext bool - MaxTokens int - ContextMode string - WindowLines int - MaxContextTokens int - NoDiskIO bool - Client llm.Client + LogContext bool + MaxTokens int + ContextMode string + WindowLines int + MaxContextTokens int + NoDiskIO bool + Client llm.Client + TriggerCharacters []string } func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server { - s := &Server{in: bufio.NewReader(r), out: w, logger: logger, docs: make(map[string]*document), logContext: opts.LogContext} - maxTokens := opts.MaxTokens - if maxTokens <= 0 { maxTokens = 500 } - s.maxTokens = maxTokens - contextMode := opts.ContextMode - if contextMode == "" { contextMode = "file-on-new-func" } - windowLines := opts.WindowLines - if windowLines <= 0 { windowLines = 120 } - maxContextTokens := opts.MaxContextTokens - if maxContextTokens <= 0 { maxContextTokens = 2000 } - s.contextMode = contextMode - s.windowLines = windowLines - s.maxContextTokens = maxContextTokens - s.noDiskIO = opts.NoDiskIO - s.startTime = time.Now() - s.llmClient = opts.Client - return s + s := &Server{in: bufio.NewReader(r), out: w, logger: logger, docs: make(map[string]*document), logContext: opts.LogContext} + maxTokens := opts.MaxTokens + if maxTokens <= 0 { + maxTokens = 500 + } + s.maxTokens = maxTokens + contextMode := opts.ContextMode + if contextMode == "" { + contextMode = "file-on-new-func" + } + windowLines := opts.WindowLines + if windowLines <= 0 { + windowLines = 120 + } + maxContextTokens := opts.MaxContextTokens + if maxContextTokens <= 0 { + maxContextTokens = 2000 + } + s.contextMode = contextMode + s.windowLines = windowLines + s.maxContextTokens = maxContextTokens + s.noDiskIO = opts.NoDiskIO + s.startTime = time.Now() + s.llmClient = opts.Client + if len(opts.TriggerCharacters) == 0 { + s.triggerChars = []string{".", ":", "/", "_"} + } else { + s.triggerChars = append([]string{}, opts.TriggerCharacters...) + } + return s } func (s *Server) Run() error { -- cgit v1.2.3