lockbox

password manager
Log | Files | Refs | README | LICENSE

commit 52ece3b099c774a4d3f070d47b7f35c1d348bb1b
parent 6cb6ee62da2c019ab2150f5571a13686869419dc
Author: Sean Enck <sean@ttypty.com>
Date:   Thu, 20 Feb 2025 18:39:52 -0500

gopls suggestions

Diffstat:
Minternal/app/completions/core_test.go | 10++--------
Minternal/config/store/core.go | 2+-
Minternal/config/toml.go | 31++++++++++++++-----------------
Minternal/util/reflect.go | 4++--
4 files changed, 19 insertions(+), 28 deletions(-)

diff --git a/internal/app/completions/core_test.go b/internal/app/completions/core_test.go @@ -2,6 +2,7 @@ package completions_test import ( "fmt" + "slices" "sort" "strings" "testing" @@ -39,14 +40,7 @@ func TestConditionals(t *testing.T) { case "LOCKBOX_CREDENTIALS_PASSWORD_MODE": value = "ask" } - found := false - for _, f := range fields { - if fmt.Sprintf(`[ "$%s" != "%s" ]`, n, value) == f { - found = true - break - } - } - if !found { + if !slices.Contains(fields, fmt.Sprintf(`[ "$%s" != "%s" ]`, n, value)) { t.Errorf("needed conditional %s not found: %v", n, fields) } } diff --git a/internal/config/store/core.go b/internal/config/store/core.go @@ -16,7 +16,7 @@ type ( // KeyValue are values exportable for interrogation beyond the store KeyValue struct { Key string - Value interface{} + Value any } ) diff --git a/internal/config/toml.go b/internal/config/toml.go @@ -4,6 +4,7 @@ import ( "bytes" "fmt" "io" + "maps" "os" "path/filepath" "sort" @@ -134,15 +135,13 @@ func generateDetailText(data printer) (string, error) { // LoadConfig will read the input reader and use the loader to source configuration files func LoadConfig(r io.Reader, loader Loader) error { - maps, err := readConfigs(r, 1, loader) + mapped, err := readConfigs(r, 1, loader) if err != nil { return err } - m := make(map[string]interface{}) - for _, config := range maps { - for k, v := range flatten(config, "") { - m[k] = v - } + m := make(map[string]any) + for _, config := range mapped { + maps.Copy(m, flatten(config, "")) } for k, v := range m { export := environmentPrefix + strings.ToUpper(k) @@ -191,16 +190,16 @@ func LoadConfig(r io.Reader, loader Loader) error { return nil } -func readConfigs(r io.Reader, depth int, loader Loader) ([]map[string]interface{}, error) { +func readConfigs(r io.Reader, depth int, loader Loader) ([]map[string]any, error) { if depth > maxDepth { return nil, fmt.Errorf("too many nested includes (%d > %d)", depth, maxDepth) } d := toml.NewDecoder(r) - m := make(map[string]interface{}) + m := make(map[string]any) if _, err := d.Decode(&m); err != nil { return nil, err } - maps := []map[string]interface{}{m} + maps := []map[string]any{m} includes, ok := m[isInclude] if ok { delete(m, isInclude) @@ -235,10 +234,10 @@ func readConfigs(r io.Reader, depth int, loader Loader) ([]map[string]interface{ return maps, nil } -func parseStringArray(value interface{}, expand bool) ([]string, error) { +func parseStringArray(value any, expand bool) ([]string, error) { var res []string switch t := value.(type) { - case []interface{}: + case []any: for _, item := range t { switch s := item.(type) { case string: @@ -257,8 +256,8 @@ func parseStringArray(value interface{}, expand bool) ([]string, error) { return res, nil } -func flatten(m map[string]interface{}, prefix string) map[string]interface{} { - flattened := make(map[string]interface{}) +func flatten(m map[string]any, prefix string) map[string]any { + flattened := make(map[string]any) for k, v := range m { key := k @@ -267,10 +266,8 @@ func flatten(m map[string]interface{}, prefix string) map[string]interface{} { } switch to := v.(type) { - case map[string]interface{}: - for subKey, subVal := range flatten(to, key) { - flattened[subKey] = subVal - } + case map[string]any: + maps.Copy(flattened, flatten(to, key)) default: flattened[key] = v } diff --git a/internal/util/reflect.go b/internal/util/reflect.go @@ -11,7 +11,7 @@ import ( func ListFields(p any) []string { v := reflect.ValueOf(p) var vals []string - for i := 0; i < v.NumField(); i++ { + for i := range v.NumField() { vals = append(vals, fmt.Sprintf("%v", v.Field(i).Interface())) } sort.Strings(vals) @@ -20,7 +20,7 @@ func ListFields(p any) []string { func readNested(v reflect.Type, root string) []string { var fields []string - for i := 0; i < v.NumField(); i++ { + for i := range v.NumField() { field := v.Field(i) if field.Type.Kind() == reflect.Struct { fields = append(fields, readNested(field.Type, fmt.Sprintf("%s.", field.Name))...)