summaryrefslogtreecommitdiff
path: root/internal/hexailsp/dependencies.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/hexailsp/dependencies.go')
-rw-r--r--internal/hexailsp/dependencies.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/internal/hexailsp/dependencies.go b/internal/hexailsp/dependencies.go
new file mode 100644
index 0000000..7e025d4
--- /dev/null
+++ b/internal/hexailsp/dependencies.go
@@ -0,0 +1,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)
+}