@@ -35,6 +35,7 @@ type DiagnosticCounts struct {
35type Client struct {
35type Client struct {
36 client *powernap.Client
36 client *powernap.Client
37 name string
37 name string
39 // Working directory this LSP is scoped to.
40 // Working directory this LSP is scoped to.
40 workDir string
41 workDir string
@@ -68,7 +69,7 @@ type Client struct {
70// New creates a new LSP client using the powernap implementation.
71// New creates a new LSP client using the powernap implementation.
71−func New(ctx context.Context, name string, cfg config.LSPConfig, resolver config.VariableResolver) (*Client, error) {
72+func New(ctx context.Context, name string, cfg config.LSPConfig, resolver config.VariableResolver, debug bool) (*Client, error) {
72 client := &Client{
73 client := &Client{
73 name: name,
74 name: name,
74 fileTypes: cfg.FileTypes,
75 fileTypes: cfg.FileTypes,
@@ -76,6 +77,7 @@ func New(ctx context.Context, name string, cfg config.LSPConfig, resolver config
76 openFiles: csync.NewMap[string, *OpenFileInfo](),
77 openFiles: csync.NewMap[string, *OpenFileInfo](),
77 config: cfg,
78 config: cfg,
79 resolver: resolver,
81 resolver: resolver,
81 client.serverState.Store(StateStarting)
83 client.serverState.Store(StateStarting)
@@ -174,7 +176,11 @@ func (c *Client) registerHandlers() {
174 c.RegisterServerRequestHandler("workspace/applyEdit", HandleApplyEdit)
176 c.RegisterServerRequestHandler("workspace/applyEdit", HandleApplyEdit)
175 c.RegisterServerRequestHandler("workspace/configuration", HandleWorkspaceConfiguration)
177 c.RegisterServerRequestHandler("workspace/configuration", HandleWorkspaceConfiguration)
176 c.RegisterServerRequestHandler("client/registerCapability", HandleRegisterCapability)
178 c.RegisterServerRequestHandler("client/registerCapability", HandleRegisterCapability)
177− c.RegisterNotificationHandler("window/showMessage", HandleServerMessage)
179+ c.RegisterNotificationHandler("window/showMessage", func(ctx context.Context, method string, params json.RawMessage) {
181+ HandleServerMessage(ctx, method, params)
178 c.RegisterNotificationHandler("textDocument/publishDiagnostics", func(_ context.Context, _ string, params json.RawMessage) {
184 c.RegisterNotificationHandler("textDocument/publishDiagnostics", func(_ context.Context, _ string, params json.RawMessage) {
179 HandleDiagnostics(c, params)
185 HandleDiagnostics(c, params)
@@ -262,8 +268,6 @@ func (c *Client) SetDiagnosticsCallback(callback func(name string, count int)) {
263// WaitForServerReady waits for the server to be ready
269// WaitForServerReady waits for the server to be ready
264func (c *Client) WaitForServerReady(ctx context.Context) error {
270func (c *Client) WaitForServerReady(ctx context.Context) error {
267 // Set initial state
271 // Set initial state
268 c.SetServerState(StateStarting)
272 c.SetServerState(StateStarting)
@@ -275,7 +279,7 @@ func (c *Client) WaitForServerReady(ctx context.Context) error {
275 ticker := time.NewTicker(500 * time.Millisecond)
279 ticker := time.NewTicker(500 * time.Millisecond)
276 defer ticker.Stop()
280 defer ticker.Stop()
278− if cfg != nil && cfg.Options.DebugLSP {
282+ if c.debug {
279 slog.Debug("Waiting for LSP server to be ready...")
283 slog.Debug("Waiting for LSP server to be ready...")
@@ -289,7 +293,7 @@ func (c *Client) WaitForServerReady(ctx context.Context) error {
289 case <-ticker.C:
293 case <-ticker.C:
290 // Check if client is running
294 // Check if client is running
291 if !c.client.IsRunning() {
295 if !c.client.IsRunning() {
292− if cfg != nil && cfg.Options.DebugLSP {
296+ if c.debug {
293 slog.Debug("LSP server not ready yet", "server", c.name)
297 slog.Debug("LSP server not ready yet", "server", c.name)
@@ -297,7 +301,7 @@ func (c *Client) WaitForServerReady(ctx context.Context) error {
298 // Server is ready
302 // Server is ready
299 c.SetServerState(StateReady)
303 c.SetServerState(StateReady)
300− if cfg != nil && cfg.Options.DebugLSP {
304+ if c.debug {
301 slog.Debug("LSP server is ready")
305 slog.Debug("LSP server is ready")
303 return nil
307 return nil
@@ -416,10 +420,8 @@ func (c *Client) IsFileOpen(filepath string) bool {
417// CloseAllFiles closes all currently open files.
421// CloseAllFiles closes all currently open files.
418func (c *Client) CloseAllFiles(ctx context.Context) {
422func (c *Client) CloseAllFiles(ctx context.Context) {
420− debugLSP := cfg != nil && cfg.Options.DebugLSP
421 for uri := range c.openFiles.Seq2() {
423 for uri := range c.openFiles.Seq2() {
422− if debugLSP {
424+ if c.debug {
423 slog.Debug("Closing file", "file", uri)
425 slog.Debug("Closing file", "file", uri)
425 if err := c.client.NotifyDidCloseTextDocument(ctx, uri); err != nil {
427 if err := c.client.NotifyDidCloseTextDocument(ctx, uri); err != nil {