diff options
Diffstat (limited to 'internal/hexailsp/dependencies.go')
| -rw-r--r-- | internal/hexailsp/dependencies.go | 77 |
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) +} |
