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.Config(), 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.Config())
66 return providers, nil
67}