summaryrefslogtreecommitdiff
path: root/internal/lsp/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/lsp/server.go')
-rw-r--r--internal/lsp/server.go63
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 {