diff options
Diffstat (limited to 'internal/lsp/server.go')
| -rw-r--r-- | internal/lsp/server.go | 63 |
1 files changed, 39 insertions, 24 deletions
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 { |
