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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package hexailsp
import (
"log"
"codeberg.org/snonux/hexai/internal/appconfig"
"codeberg.org/snonux/hexai/internal/ignore"
"codeberg.org/snonux/hexai/internal/llm"
"codeberg.org/snonux/hexai/internal/llmutils"
"codeberg.org/snonux/hexai/internal/logging"
"codeberg.org/snonux/hexai/internal/lsp"
"codeberg.org/snonux/hexai/internal/runtimeconfig"
)
type configLoader func(*log.Logger, appconfig.LoadOptions) appconfig.App
type clientBuilder func(appconfig.App, llm.Client) llm.Client
type configStoreFactory func(appconfig.App) *runtimeconfig.Store
type ignoreCheckerFactory func(appconfig.App) *ignore.Checker
type runDependencies struct {
loadConfig configLoader
buildClient clientBuilder
newConfigStore configStoreFactory
newIgnoreChecker ignoreCheckerFactory
statusSink lsp.StatusSink
}
func defaultRunDependencies() runDependencies {
return runDependencies{
loadConfig: appconfig.LoadWithOptions,
buildClient: defaultClientBuilder,
newConfigStore: runtimeconfig.New,
newIgnoreChecker: defaultIgnoreCheckerFactory,
statusSink: tmuxStatusSink{},
}
}
func normalizeRunDependencies(deps runDependencies) runDependencies {
if deps.loadConfig == nil {
deps.loadConfig = appconfig.LoadWithOptions
}
if deps.buildClient == nil {
deps.buildClient = defaultClientBuilder
}
if deps.newConfigStore == nil {
deps.newConfigStore = runtimeconfig.New
}
if deps.newIgnoreChecker == nil {
deps.newIgnoreChecker = defaultIgnoreCheckerFactory
}
if deps.statusSink == nil {
deps.statusSink = tmuxStatusSink{}
}
return deps
}
func defaultClientBuilder(cfg appconfig.App, client llm.Client) llm.Client {
if client != nil {
return client
}
c, err := llmutils.NewClientFromApp(cfg)
if err != nil {
logging.Logf("lsp ", "llm disabled: %v", err)
return nil
}
logging.Logf("lsp ", "llm enabled provider=%s model=%s", c.Name(), c.DefaultModel())
return c
}
func defaultIgnoreCheckerFactory(cfg appconfig.App) *ignore.Checker {
gitRoot := appconfig.FindGitRoot()
useGI := cfg.IgnoreGitignore == nil || *cfg.IgnoreGitignore
return ignore.New(gitRoot, useGI, cfg.IgnoreExtraPatterns)
}
|