From 3a7705a0909e74fd50554cbdc946767a7dd7c801 Mon Sep 17 00:00:00 2001 From: cutelisp Date: Sun, 29 Jun 2025 09:36:56 +0100 Subject: [PATCH] Enhance GetNativeValue --- cmd/micro/micro.go | 2 +- internal/action/command.go | 2 +- internal/buffer/settings.go | 2 +- internal/config/settings.go | 26 ++++++++++++++------------ 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 7756d588..70b940bf 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -317,7 +317,7 @@ func main() { // flag options for k, v := range optionFlags { if *v != "" { - nativeValue, err := config.GetNativeValue(k, config.DefaultAllSettings()[k], *v) + nativeValue, err := config.GetNativeValue(k, *v) if err != nil { screen.TermMessage(err) continue diff --git a/internal/action/command.go b/internal/action/command.go index 9bf979b9..dbc3bdf5 100644 --- a/internal/action/command.go +++ b/internal/action/command.go @@ -668,7 +668,7 @@ func SetGlobalOption(option, value string) error { return config.ErrInvalidOption } - nativeValue, err := config.GetNativeValue(option, config.GlobalSettings[option], value) + nativeValue, err := config.GetNativeValue(option, value) if err != nil { return err } diff --git a/internal/buffer/settings.go b/internal/buffer/settings.go index 9dd46a95..4c2c2a1d 100644 --- a/internal/buffer/settings.go +++ b/internal/buffer/settings.go @@ -155,7 +155,7 @@ func (b *Buffer) SetOption(option, value string) error { return config.ErrInvalidOption } - nativeValue, err := config.GetNativeValue(option, b.Settings[option], value) + nativeValue, err := config.GetNativeValue(option, value) if err != nil { return err } diff --git a/internal/config/settings.go b/internal/config/settings.go index 9dc1d1fd..c087ced8 100644 --- a/internal/config/settings.go +++ b/internal/config/settings.go @@ -472,28 +472,30 @@ func DefaultAllSettings() map[string]interface{} { } // GetNativeValue parses and validates a value for a given option -func GetNativeValue(option string, realValue interface{}, value string) (interface{}, error) { - var native interface{} - kind := reflect.TypeOf(realValue).Kind() - if kind == reflect.Bool { +func GetNativeValue(option, value string) (interface{}, error) { + curVal := GetGlobalOption(option) + if curVal == nil { + return nil, ErrInvalidOption + } + + switch kind := reflect.TypeOf(curVal).Kind(); kind { + case reflect.Bool: b, err := util.ParseBool(value) if err != nil { return nil, ErrInvalidValue } - native = b - } else if kind == reflect.String { - native = value - } else if kind == reflect.Float64 { + return b, nil + case reflect.String: + return value, nil + case reflect.Float64: f, err := strconv.ParseFloat(value, 64) if err != nil { return nil, ErrInvalidValue } - native = f - } else { + return f, nil + default: return nil, ErrInvalidValue } - - return native, nil } // OptionIsValid checks if a value is valid for a certain option