Skip to content

Commit 6323904

Browse files
committed
chore: update dependencies and fix new lint rules
1 parent 30a85c4 commit 6323904

37 files changed

+161
-42
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/.direnv
22
/result
3+
testdata/fuzz/
34

45
# nixago: ignore-linked-files
56
/.editorconfig

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ Changing frameworks can require extensive rewrites.
2222
- **Flexibility**: Allowing you to choose (and change) the underlying CLI framework that best suits your needs.
2323
- **Simplicity**: Focusing on core CLI functionality, avoiding unnecessary complexity.
2424

25+
## API Stability
26+
27+
This project follows [Semantic Versioning](https://semver.org/).
28+
2529
## Usage
2630

2731
### Basic Command

cfg/cfg.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func BeforeCommandExecutionHook[T any](dest *T, source SourceFunc[T], sources ..
4949
}
5050

5151
*dest = *cfg
52+
5253
return nil
5354
}
5455
}

cfg/cfg_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ func Test_BeforeCommandExecutionHook(t *testing.T) {
1212
type config struct {
1313
A string
1414
}
15+
1516
var cfg config
1617

1718
t.Run("ok", func(t *testing.T) {

cfg/source/default/default.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func Source[T any]() clicfg.SourceFunc[T] {
1515
}); ok {
1616
cfgDefault.SetDefault()
1717
}
18+
1819
return nil
1920
}
2021
}

cfg/source/env/env.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
func Source[T any](envPrefix string) clicfg.SourceFunc[T] {
2222
return func(_ context.Context, cfg *T) error {
2323
_, err := recursivelyWalkThroughReflectValue(os.LookupEnv, reflect.ValueOf(cfg).Elem(), envPrefix, nil)
24+
2425
return err
2526
}
2627
}
@@ -50,13 +51,15 @@ func recursivelyWalkThroughReflectValue(lookupEnv func(string) (string, bool), v
5051
if atLeastOneEnvFound {
5152
v.Set(newV)
5253
}
54+
5355
return atLeastOneEnvFound, err
5456

5557
case reflect.Struct: // if it's a struct, iterate over its fields
5658
var (
5759
errs []error
5860
atLeastOneFound bool
5961
)
62+
6063
for i := range v.NumField() {
6164
tfield := t.Field(i)
6265
tag := tfield.Tag.Get("env")
@@ -80,12 +83,15 @@ func recursivelyWalkThroughReflectValue(lookupEnv func(string) (string, bool), v
8083
if envFound {
8184
atLeastOneFound = true
8285
}
86+
8387
errs = append(errs, err)
8488
}
89+
8590
return atLeastOneFound, multierr.Combine(errs...)
8691

8792
default: // for primitive types, try to find the corresponding environment variable
8893
var rawEnv string
94+
8995
for _, envToLookup := range append(additionalEnvsToLookup, envPrefix) {
9096
envToLookup = strings.TrimSpace(envToLookup)
9197
if envToLookup != "" {
@@ -105,65 +111,81 @@ func recursivelyWalkThroughReflectValue(lookupEnv func(string) (string, bool), v
105111
case reflect.Bool:
106112
vv, err := strconv.ParseBool(rawEnv)
107113
v.SetBool(vv)
114+
108115
return true, err
109116
case reflect.Int:
110117
vv, err := strconv.ParseInt(rawEnv, 10, 0)
111118
v.SetInt(vv)
119+
112120
return true, err
113121
case reflect.Int8:
114122
vv, err := strconv.ParseInt(rawEnv, 10, 8)
115123
v.SetInt(vv)
124+
116125
return true, err
117126
case reflect.Int16:
118127
vv, err := strconv.ParseInt(rawEnv, 10, 16)
119128
v.SetInt(vv)
129+
120130
return true, err
121131
case reflect.Int32:
122132
vv, err := strconv.ParseInt(rawEnv, 10, 32)
123133
v.SetInt(vv)
134+
124135
return true, err
125136
case reflect.Int64:
126137
vv, err := strconv.ParseInt(rawEnv, 10, 64)
127138
v.SetInt(vv)
139+
128140
return true, err
129141
case reflect.Uint:
130142
vv, err := strconv.ParseUint(rawEnv, 10, 0)
131143
v.SetUint(vv)
144+
132145
return true, err
133146
case reflect.Uint8:
134147
vv, err := strconv.ParseUint(rawEnv, 10, 8)
135148
v.SetUint(vv)
149+
136150
return true, err
137151
case reflect.Uint16:
138152
vv, err := strconv.ParseUint(rawEnv, 10, 16)
139153
v.SetUint(vv)
154+
140155
return true, err
141156
case reflect.Uint32:
142157
vv, err := strconv.ParseUint(rawEnv, 10, 32)
143158
v.SetUint(vv)
159+
144160
return true, err
145161
case reflect.Uint64:
146162
vv, err := strconv.ParseUint(rawEnv, 10, 64)
147163
v.SetUint(vv)
164+
148165
return true, err
149166
case reflect.Float32:
150167
vv, err := strconv.ParseFloat(rawEnv, 32)
151168
v.SetFloat(vv)
169+
152170
return true, err
153171
case reflect.Float64:
154172
vv, err := strconv.ParseFloat(rawEnv, 64)
155173
v.SetFloat(vv)
174+
156175
return true, err
157176
case reflect.Complex64:
158177
vv, err := strconv.ParseComplex(rawEnv, 64)
159178
v.SetComplex(vv)
179+
160180
return true, err
161181
case reflect.Complex128:
162182
vv, err := strconv.ParseComplex(rawEnv, 128)
163183
v.SetComplex(vv)
184+
164185
return true, err
165186
case reflect.String:
166187
v.SetString(rawEnv)
188+
167189
return true, nil
168190
default:
169191
return true, fmt.Errorf("unhandled type %s", k)

cfg/source/env/env_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,14 @@ func Test_Source(t *testing.T) {
174174
}
175175

176176
type foo1 struct {
177-
bar `env:"notbar"`
177+
bar `env:"notbar"`
178+
178179
Hello string
179180
}
180181

181182
type foo2 struct {
182-
bar `env:"^"`
183+
bar `env:"^"`
184+
183185
Hello string
184186
}
185187

cfg/source/file/file.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ func Source[T any](getFilename func(cfg T) string, unmarshaler func(reader io.Re
1818
if errors.Is(err, os.ErrNotExist) && allowNonExisting {
1919
return nil
2020
}
21+
2122
return fmt.Errorf("unable to open config file: %w", err)
2223
}
23-
defer file.Close() //nolint:errcheck // standard library don't care about this error
24+
defer file.Close()
2425

2526
if err := unmarshaler(file, cfg); err != nil {
2627
return fmt.Errorf("unable to decode config: %w", err)

cfg/source/file/file_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ func Test_Source(t *testing.T) {
2222
configFile, err := os.CreateTemp(t.TempDir(), "*.yaml")
2323
test.Require(t, err == nil)
2424
t.Cleanup(func() { _ = os.Remove(configFile.Name()) })
25+
2526
_, _ = configFile.WriteString(`
2627
awesome: avalue
2728
`)
@@ -33,6 +34,7 @@ awesome: avalue
3334
func(r io.Reader, cfg *configWithFile) error {
3435
decoder := yaml.NewDecoder(r)
3536
decoder.KnownFields(true)
37+
3638
return decoder.Decode(&cfg)
3739
},
3840
false,

cfg/source/flag/flag.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ func Source[T any](flagDest *T) clicfg.SourceFunc[T] {
6363
pointersToValuesSetByFlags[uintptr(reflect.ValueOf(flag.Destination()).UnsafePointer())] = struct{}{}
6464
}
6565
}
66+
6667
if len(pointersToValuesSetByFlags) == 0 {
6768
return nil
6869
}
@@ -120,13 +121,15 @@ func recursivelyWalkThroughReflectValue(pointers map[uintptr]struct{}, v1, v2 re
120121

121122
v2.Set(v1)
122123
delete(pointers, v1ptr)
124+
123125
return nil
124126

125127
case reflect.Struct:
126128
var errs []error
127129
for i := range v1.NumField() {
128130
errs = append(errs, recursivelyWalkThroughReflectValue(pointers, v1.Field(i), v2.Field(i)))
129131
}
132+
130133
return multierr.Combine(errs...)
131134

132135
default:
@@ -141,6 +144,7 @@ func recursivelyWalkThroughReflectValue(pointers map[uintptr]struct{}, v1, v2 re
141144

142145
v2.Set(v1)
143146
delete(pointers, v1ptr)
147+
144148
return nil
145149
}
146150
}

0 commit comments

Comments
 (0)