summaryrefslogtreecommitdiffhomepage
path: root/internal/app
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-03 15:20:15 +0200
committerKujtim Hoxha <[email protected]>2025-04-03 17:23:41 +0200
commitcfdd687216799cb5b47f099f1e7cd5dd16b3bdd0 (patch)
treea822bfde1463a7080c0ea06dd17796d7a1617d3d /internal/app
parentafd9ad0560d76c2a6d161dad52553b10ff428905 (diff)
downloadopencode-cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0.tar.gz
opencode-cfdd687216799cb5b47f099f1e7cd5dd16b3bdd0.zip
add initial lsp support
Diffstat (limited to 'internal/app')
-rw-r--r--internal/app/services.go42
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")
+}