events.go

 1package backend
 2
 3import (
 4	tea "charm.land/bubbletea/v2"
 5
 6	"github.com/charmbracelet/crush/internal/app"
 7	"github.com/charmbracelet/crush/internal/config"
 8)
 9
10// SubscribeEvents returns the event channel for a workspace's app.
11func (b *Backend) SubscribeEvents(workspaceID string) (<-chan tea.Msg, error) {
12	ws, err := b.GetWorkspace(workspaceID)
13	if err != nil {
14		return nil, err
15	}
16
17	return ws.Events(), nil
18}
19
20// GetLSPStates returns the state of all LSP clients.
21func (b *Backend) GetLSPStates(workspaceID string) (map[string]app.LSPClientInfo, error) {
22	_, err := b.GetWorkspace(workspaceID)
23	if err != nil {
24		return nil, err
25	}
26
27	return app.GetLSPStates(), nil
28}
29
30// GetLSPDiagnostics returns diagnostics for a specific LSP client in
31// the workspace.
32func (b *Backend) GetLSPDiagnostics(workspaceID, lspName string) (any, error) {
33	ws, err := b.GetWorkspace(workspaceID)
34	if err != nil {
35		return nil, err
36	}
37
38	for name, client := range ws.LSPManager.Clients().Seq2() {
39		if name == lspName {
40			return client.GetDiagnostics(), nil
41		}
42	}
43
44	return nil, ErrLSPClientNotFound
45}
46
47// GetWorkspaceConfig returns the workspace-level configuration.
48func (b *Backend) GetWorkspaceConfig(workspaceID string) (*config.Config, error) {
49	ws, err := b.GetWorkspace(workspaceID)
50	if err != nil {
51		return nil, err
52	}
53
54	return ws.Cfg, nil
55}
56
57// GetWorkspaceProviders returns the configured providers for a
58// workspace.
59func (b *Backend) GetWorkspaceProviders(workspaceID string) (any, error) {
60	ws, err := b.GetWorkspace(workspaceID)
61	if err != nil {
62		return nil, err
63	}
64
65	providers, _ := config.Providers(ws.Cfg)
66	return providers, nil
67}