diff options
| author | Kujtim Hoxha <[email protected]> | 2025-04-03 15:20:15 +0200 |
|---|---|---|
| committer | Kujtim Hoxha <[email protected]> | 2025-04-03 17:23:41 +0200 |
| commit | cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0 (patch) | |
| tree | a822bfde1463a7080c0ea06dd17796d7a1617d3d /internal/app | |
| parent | afd9ad0560d76c2a6d161dad52553b10ff428905 (diff) | |
| download | opencode-cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0.tar.gz opencode-cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0.zip | |
add initial lsp support
Diffstat (limited to 'internal/app')
| -rw-r--r-- | internal/app/services.go | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/internal/app/services.go b/internal/app/services.go index 09c62ca71..60838ccca 100644 --- a/internal/app/services.go +++ b/internal/app/services.go @@ -7,6 +7,8 @@ import ( "github.com/kujtimiihoxha/termai/internal/config" "github.com/kujtimiihoxha/termai/internal/db" "github.com/kujtimiihoxha/termai/internal/logging" + "github.com/kujtimiihoxha/termai/internal/lsp" + "github.com/kujtimiihoxha/termai/internal/lsp/watcher" "github.com/kujtimiihoxha/termai/internal/message" "github.com/kujtimiihoxha/termai/internal/permission" "github.com/kujtimiihoxha/termai/internal/session" @@ -19,23 +21,59 @@ type App struct { Messages message.Service Permissions permission.Service + LSPClients map[string]*lsp.Client + Logger logging.Interface + + ceanups []func() } func New(ctx context.Context, conn *sql.DB) *App { + cfg := config.Get() q := db.New(conn) log := logging.NewLogger(logging.Options{ - Level: config.Get().Log.Level, + Level: cfg.Log.Level, }) sessions := session.NewService(ctx, q) messages := message.NewService(ctx, q) - return &App{ + app := &App{ Context: ctx, Sessions: sessions, Messages: messages, Permissions: permission.Default, Logger: log, + LSPClients: make(map[string]*lsp.Client), + } + + for name, client := range cfg.LSP { + lspClient, err := lsp.NewClient(client.Command, client.Args...) + app.ceanups = append(app.ceanups, func() { + lspClient.Close() + }) + workspaceWatcher := watcher.NewWorkspaceWatcher(lspClient) + if err != nil { + log.Error("Failed to create LSP client for", name, err) + continue + } + + _, err = lspClient.InitializeLSPClient(ctx, config.WorkingDirectory()) + if err != nil { + log.Error("Initialize failed", "error", err) + continue + } + go workspaceWatcher.WatchWorkspace(ctx, config.WorkingDirectory()) + app.LSPClients[name] = lspClient } + return app } +func (a *App) Close() { + for _, cleanup := range a.ceanups { + cleanup() + } + for _, client := range a.LSPClients { + client.Close() + } + a.Logger.Info("App closed") +} |
