diff --git a/cmd/root.go b/cmd/root.go index bd9336fcef7a090894194e146bbc426b4763816f..bdab53e14969d3b4852d482e9c6443e596a03f87 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -48,7 +48,6 @@ var rootCmd = &cobra.Command{ ctx := context.Background() app := app.New(ctx, conn) - defer app.Close() logging.Info("Starting termai...") zone.NewGlobal() tui := tea.NewProgram( diff --git a/internal/app/services.go b/internal/app/services.go index dcdfe12e00ba6b2745220f062f9886275d6ffc92..76b2226aef288848efb4c2473971052f7b911d9c 100644 --- a/internal/app/services.go +++ b/internal/app/services.go @@ -3,7 +3,6 @@ package app import ( "context" "database/sql" - "log/slog" "github.com/kujtimiihoxha/termai/internal/config" "github.com/kujtimiihoxha/termai/internal/db" @@ -23,8 +22,6 @@ type App struct { Permissions permission.Service LSPClients map[string]*lsp.Client - - ceanups []func() } func New(ctx context.Context, conn *sql.DB) *App { @@ -44,10 +41,7 @@ func New(ctx context.Context, conn *sql.DB) *App { } for name, client := range cfg.LSP { - lspClient, err := lsp.NewClient(client.Command, client.Args...) - app.ceanups = append(app.ceanups, func() { - lspClient.Close() - }) + 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) @@ -64,13 +58,3 @@ func New(ctx context.Context, conn *sql.DB) *App { } return app } - -func (a *App) Close() { - for _, cleanup := range a.ceanups { - cleanup() - } - for _, client := range a.LSPClients { - client.Close() - } - slog.Info("App closed") -} diff --git a/internal/lsp/client.go b/internal/lsp/client.go index 824a84b5d82d5974d4e378e7766f0892d9d21e87..e2eedc4fcfde8601b89562f7bdf6a20ed1ee666b 100644 --- a/internal/lsp/client.go +++ b/internal/lsp/client.go @@ -48,8 +48,8 @@ type Client struct { openFilesMu sync.RWMutex } -func NewClient(command string, args ...string) (*Client, error) { - cmd := exec.Command(command, args...) +func NewClient(ctx context.Context, command string, args ...string) (*Client, error) { + cmd := exec.CommandContext(ctx, command, args...) // Copy env cmd.Env = os.Environ()