diff options
| author | Paul Buetow <paul@buetow.org> | 2025-08-16 23:58:40 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-08-16 23:58:40 +0300 |
| commit | 6a1d48036105e92193aef11a15a77a569eeb1562 (patch) | |
| tree | 96bae3cf3e46ab96d6285a18739f3da82b0da7f6 | |
| parent | 37d0049e7a7b55d40af6da1a884810a543fead22 (diff) | |
lsp: refactor NewServer to use options struct
- Introduce ServerOptions to reduce constructor parameter count
- Update main.go call site; preserve defaults and behavior
- Build and run tests
| -rw-r--r-- | cmd/hexai/main.go | 10 | ||||
| -rw-r--r-- | internal/lsp/server.go | 51 |
2 files changed, 38 insertions, 23 deletions
diff --git a/cmd/hexai/main.go b/cmd/hexai/main.go index 65cbfdf..8e446a3 100644 --- a/cmd/hexai/main.go +++ b/cmd/hexai/main.go @@ -63,7 +63,15 @@ func main() { } } - server := lsp.NewServer(os.Stdin, os.Stdout, logger, *logPath != "", cfg.MaxTokens, cfg.ContextMode, cfg.ContextWindowLines, cfg.MaxContextTokens, cfg.NoDiskIO, client) + server := lsp.NewServer(os.Stdin, os.Stdout, logger, lsp.ServerOptions{ + LogContext: *logPath != "", + MaxTokens: cfg.MaxTokens, + ContextMode: cfg.ContextMode, + WindowLines: cfg.ContextWindowLines, + MaxContextTokens: cfg.MaxContextTokens, + NoDiskIO: cfg.NoDiskIO, + Client: client, + }) if err := server.Run(); err != nil { logger.Fatalf("server error: %v", err) } diff --git a/internal/lsp/server.go b/internal/lsp/server.go index c6c3812..81cb661 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -35,28 +35,35 @@ type Server struct { startTime time.Time } -func NewServer(r io.Reader, w io.Writer, logger *log.Logger, logContext bool, maxTokens int, contextMode string, windowLines int, maxContextTokens int, noDiskIO bool, client llm.Client) *Server { - s := &Server{in: bufio.NewReader(r), out: w, logger: logger, docs: make(map[string]*document), logContext: logContext} - if maxTokens <= 0 { - maxTokens = 500 - } - s.maxTokens = maxTokens - if contextMode == "" { - contextMode = "file-on-new-func" - } - if windowLines <= 0 { - windowLines = 120 - } - if maxContextTokens <= 0 { - maxContextTokens = 2000 - } - s.contextMode = contextMode - s.windowLines = windowLines - s.maxContextTokens = maxContextTokens - s.noDiskIO = noDiskIO - s.startTime = time.Now() - s.llmClient = client - return s +// 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 +} + +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 } func (s *Server) Run() error { |
