diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-23 08:33:07 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-23 08:33:07 +0200 |
| commit | 56c2c4f64ba1712f7cab28a8dc92a3c14b20eb1d (patch) | |
| tree | 4088f6ceddbfdea3877cd7c7343397a8b0e78d36 /internal/appconfig | |
| parent | 3ea11bc5d671d962d01b57fa0fba0bda611025fe (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.go | 76 |
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) |
