1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package app
import (
"context"
"database/sql"
"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"
)
type App struct {
Context context.Context
Sessions session.Service
Messages message.Service
Permissions permission.Service
LSPClients map[string]*lsp.Client
}
func New(ctx context.Context, conn *sql.DB) *App {
cfg := config.Get()
logging.Info("Debug mode enabled")
q := db.New(conn)
sessions := session.NewService(ctx, q)
messages := message.NewService(ctx, q)
app := &App{
Context: ctx,
Sessions: sessions,
Messages: messages,
Permissions: permission.NewPermissionService(),
LSPClients: make(map[string]*lsp.Client),
}
for name, client := range cfg.LSP {
lspClient, err := lsp.NewClient(ctx, client.Command, client.Args...)
workspaceWatcher := watcher.NewWorkspaceWatcher(lspClient)
if err != nil {
logging.Error("Failed to create LSP client for", name, err)
continue
}
_, err = lspClient.InitializeLSPClient(ctx, config.WorkingDirectory())
if err != nil {
logging.Error("Initialize failed", "error", err)
continue
}
go workspaceWatcher.WatchWorkspace(ctx, config.WorkingDirectory())
app.LSPClients[name] = lspClient
}
return app
}
|