summaryrefslogtreecommitdiff
path: root/internal/appconfig
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-23 08:33:07 +0200
committerPaul Buetow <paul@buetow.org>2026-03-23 08:33:07 +0200
commit56c2c4f64ba1712f7cab28a8dc92a3c14b20eb1d (patch)
tree4088f6ceddbfdea3877cd7c7343397a8b0e78d36 /internal/appconfig
parent3ea11bc5d671d962d01b57fa0fba0bda611025fe (diff)
refactor: split oversized functions, fix double logging, add %w wrapping
- lsp/handlers_completion.go: extract buildNativeCompletionCacheKey and postProcessNativeCompletion; track collectFirstCompletion in inflight; remove redundant logLLMStats("") on error path - lsp/handlers.go: extract checkTriggerFromContext and checkTriggerFromCursorChar; isTriggerEvent reduced from 63→10 lines - lsp/transport.go: use %w for error wrapping in Content-Length parse - llm/ollama.go: extract parseOllamaStream; ChatStream reduced to ~35 lines - appconfig/config_load.go: extract decodeModelEntryFromMap; rename 'any' to 'found'; decodeModelEntry reduced to ~18 lines - llm/provider.go: document why providerRegistry is package-level - integrationtests/ask_test.go: add //go:build integration; move repoRoot init from init() to TestMain with diagnostic message Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/appconfig')
-rw-r--r--internal/appconfig/config_load.go76
1 files changed, 42 insertions, 34 deletions
diff --git a/internal/appconfig/config_load.go b/internal/appconfig/config_load.go
index cb02a2e..4c6214c 100644
--- a/internal/appconfig/config_load.go
+++ b/internal/appconfig/config_load.go
@@ -610,6 +610,47 @@ func parseSurfaceEntries(raw any, path string, logger *log.Logger) ([]SurfaceCon
}
}
+// decodeModelEntryFromMap decodes a map[string]any entry into a SurfaceConfig.
+// It validates that model, provider, and temperature fields have the correct types.
+func decodeModelEntryFromMap(v map[string]any, path string, logger *log.Logger) (*SurfaceConfig, bool) {
+ model := ""
+ provider := ""
+ if m, ok := v["model"]; ok {
+ s, ok := m.(string)
+ if !ok {
+ if logger != nil {
+ logger.Printf("config: %s.model must be a string", path)
+ }
+ return nil, false
+ }
+ model = strings.TrimSpace(s)
+ }
+ if pRaw, ok := v["provider"]; ok {
+ ps, ok := pRaw.(string)
+ if !ok {
+ if logger != nil {
+ logger.Printf("config: %s.provider must be a string", path)
+ }
+ return nil, false
+ }
+ provider = strings.TrimSpace(ps)
+ }
+ var tempPtr *float64
+ if tRaw, ok := v["temperature"]; ok {
+ parsed, ok := parseTemperatureValue(tRaw, path, logger)
+ if !ok {
+ return nil, false
+ }
+ tempPtr = parsed
+ }
+ if model == "" && tempPtr == nil && provider == "" {
+ return nil, false
+ }
+ return &SurfaceConfig{Provider: provider, Model: model, Temperature: tempPtr}, true
+}
+
+// decodeModelEntry converts a raw TOML value (string or table) into a SurfaceConfig.
+// A plain string is treated as a model name; a table may carry model, provider and temperature.
func decodeModelEntry(raw any, path string, logger *log.Logger) (*SurfaceConfig, bool) {
if raw == nil {
return nil, false
@@ -622,40 +663,7 @@ func decodeModelEntry(raw any, path string, logger *log.Logger) (*SurfaceConfig,
}
return &SurfaceConfig{Model: model}, true
case map[string]any:
- model := ""
- provider := ""
- if m, ok := v["model"]; ok {
- s, ok := m.(string)
- if !ok {
- if logger != nil {
- logger.Printf("config: %s.model must be a string", path)
- }
- return nil, false
- }
- model = strings.TrimSpace(s)
- }
- if pRaw, ok := v["provider"]; ok {
- ps, ok := pRaw.(string)
- if !ok {
- if logger != nil {
- logger.Printf("config: %s.provider must be a string", path)
- }
- return nil, false
- }
- provider = strings.TrimSpace(ps)
- }
- var tempPtr *float64
- if tRaw, ok := v["temperature"]; ok {
- parsed, ok := parseTemperatureValue(tRaw, path, logger)
- if !ok {
- return nil, false
- }
- tempPtr = parsed
- }
- if model == "" && tempPtr == nil && provider == "" {
- return nil, false
- }
- return &SurfaceConfig{Provider: provider, Model: model, Temperature: tempPtr}, true
+ return decodeModelEntryFromMap(v, path, logger)
default:
if logger != nil {
logger.Printf("config: %s must be a string or table, got %T", path, raw)