Skip to content

Commit 3e10ac2

Browse files
committed
Switch lintersconfig to map[string]any
1 parent 0c4de0e commit 3e10ac2

File tree

3 files changed

+32
-37
lines changed

3 files changed

+32
-37
lines changed

pkg/analysis/registry.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,14 @@ func getLinterTypedConfig(ci initializer.ConfigurableAnalyzerInitializer, linter
197197
return ci.ConfigType(), nil
198198
}
199199

200+
encodedConfig, err := yaml.Marshal(rawConfig)
201+
if err != nil {
202+
return nil, fmt.Errorf("error encoding config for linter %q: %w", ci.Name(), err)
203+
}
204+
200205
linterConfig := ci.ConfigType()
201206

202-
if err := yaml.Unmarshal(rawConfig, linterConfig); err != nil {
207+
if err := yaml.Unmarshal(encodedConfig, linterConfig); err != nil {
203208
return nil, fmt.Errorf("error reading config for linter %q: %w", ci.Name(), err)
204209
}
205210

@@ -211,7 +216,7 @@ func getLinterTypedConfig(ci initializer.ConfigurableAnalyzerInitializer, linter
211216
// It also supports backwards compatibility with early configuration.
212217
// We use to have camelCased config names, but now it is all lowercase matched on the linter name.
213218
// TODO(@JoelSpeed): Remove the strings.ToLower in a future release with a release note about the change.
214-
func getConfigByName(name string, lintersCfg config.LintersConfig) ([]byte, bool) {
219+
func getConfigByName(name string, lintersCfg config.LintersConfig) (any, bool) {
215220
rawConfig, ok := lintersCfg[name]
216221
if ok {
217222
return rawConfig, true

pkg/analysis/registry_test.go

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package analysis_test
1818
import (
1919
. "github.com/onsi/ginkgo/v2"
2020
. "github.com/onsi/gomega"
21-
"gopkg.in/yaml.v3"
2221

2322
goanalysis "golang.org/x/tools/go/analysis"
2423

@@ -151,113 +150,104 @@ var _ = Describe("Registry", func() {
151150
Entry("With a valid JSONTagsConfig JSONTagRegex", validateLintersConfigTableInput{
152151
linters: config.Linters{},
153152
config: config.LintersConfig{
154-
"jsontags": toYaml(jsontags.JSONTagsConfig{
153+
"jsontags": jsontags.JSONTagsConfig{
155154
JSONTagRegex: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$",
156-
}),
155+
},
157156
},
158157
}),
159158
Entry("With an invalid JSONTagsConfig JSONTagRegex", validateLintersConfigTableInput{
160159
config: config.LintersConfig{
161-
"jsontags": toYaml(jsontags.JSONTagsConfig{
160+
"jsontags": jsontags.JSONTagsConfig{
162161
JSONTagRegex: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*",
163-
}),
162+
},
164163
},
165164
expectedErr: "error validating linters config: lintersConfig.jsontags.jsonTagRegex: Invalid value: \"^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*\": invalid regex: error parsing regexp: missing closing ): `^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*`",
166165
}),
167166
Entry("With a valid JSONTagsConfig JSONTagRegex (legacy field name)", validateLintersConfigTableInput{
168167
linters: config.Linters{},
169168
config: config.LintersConfig{
170-
"jsonTags": toYaml(jsontags.JSONTagsConfig{
169+
"jsonTags": jsontags.JSONTagsConfig{
171170
JSONTagRegex: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*)*$",
172-
}),
171+
},
173172
},
174173
}),
175174
Entry("With an invalid JSONTagsConfig JSONTagRegex (legacy field name)", validateLintersConfigTableInput{
176175
config: config.LintersConfig{
177-
"jsonTags": toYaml(jsontags.JSONTagsConfig{
176+
"jsonTags": jsontags.JSONTagsConfig{
178177
JSONTagRegex: "^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*",
179-
}),
178+
},
180179
},
181180
expectedErr: "error validating linters config: lintersConfig.jsontags.jsonTagRegex: Invalid value: \"^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*\": invalid regex: error parsing regexp: missing closing ): `^[a-z][a-z0-9]*(?:[A-Z][a-z0-9]*`",
182181
}),
183182

184183
Entry("With a valid OptionalOrRequiredConfig (legacy field name)", validateLintersConfigTableInput{
185184
config: config.LintersConfig{
186-
"optionalorrequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
185+
"optionalorrequired": optionalorrequired.OptionalOrRequiredConfig{
187186
PreferredOptionalMarker: markers.OptionalMarker,
188187
PreferredRequiredMarker: markers.RequiredMarker,
189-
}),
188+
},
190189
},
191190
expectedErr: "",
192191
}),
193192
Entry("With kubebuilder preferred markers (legacy field name)", validateLintersConfigTableInput{
194193
config: config.LintersConfig{
195-
"optionalorrequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
194+
"optionalorrequired": optionalorrequired.OptionalOrRequiredConfig{
196195
PreferredOptionalMarker: markers.KubebuilderOptionalMarker,
197196
PreferredRequiredMarker: markers.KubebuilderRequiredMarker,
198-
}),
197+
},
199198
},
200199
expectedErr: "",
201200
}),
202201
Entry("With invalid preferred optional marker (legacy field name)", validateLintersConfigTableInput{
203202
config: config.LintersConfig{
204-
"optionalorrequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
203+
"optionalorrequired": optionalorrequired.OptionalOrRequiredConfig{
205204
PreferredOptionalMarker: "invalid",
206-
}),
205+
},
207206
},
208207
expectedErr: "error validating linters config: lintersConfig.optionalorrequired.preferredOptionalMarker: Invalid value: \"invalid\": invalid value, must be one of \"optional\", \"kubebuilder:validation:Optional\" or omitted",
209208
}),
210209
Entry("With invalid preferred required marker (legacy field name)", validateLintersConfigTableInput{
211210
config: config.LintersConfig{
212-
"optionalorrequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
211+
"optionalorrequired": optionalorrequired.OptionalOrRequiredConfig{
213212
PreferredRequiredMarker: "invalid",
214-
}),
213+
},
215214
},
216215
expectedErr: "error validating linters config: lintersConfig.optionalorrequired.preferredRequiredMarker: Invalid value: \"invalid\": invalid value, must be one of \"required\", \"kubebuilder:validation:Required\" or omitted",
217216
}),
218217
Entry("With a valid OptionalOrRequiredConfig (legacy field name)", validateLintersConfigTableInput{
219218
config: config.LintersConfig{
220-
"optionalOrRequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
219+
"optionalOrRequired": optionalorrequired.OptionalOrRequiredConfig{
221220
PreferredOptionalMarker: markers.OptionalMarker,
222221
PreferredRequiredMarker: markers.RequiredMarker,
223-
}),
222+
},
224223
},
225224
expectedErr: "",
226225
}),
227226
Entry("With kubebuilder preferred markers (legacy field name)", validateLintersConfigTableInput{
228227
config: config.LintersConfig{
229-
"optionalOrRequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
228+
"optionalOrRequired": optionalorrequired.OptionalOrRequiredConfig{
230229
PreferredOptionalMarker: markers.KubebuilderOptionalMarker,
231230
PreferredRequiredMarker: markers.KubebuilderRequiredMarker,
232-
}),
231+
},
233232
},
234233
expectedErr: "",
235234
}),
236235
Entry("With invalid preferred optional marker (legacy field name)", validateLintersConfigTableInput{
237236
config: config.LintersConfig{
238-
"optionalOrRequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
237+
"optionalOrRequired": optionalorrequired.OptionalOrRequiredConfig{
239238
PreferredOptionalMarker: "invalid",
240-
}),
239+
},
241240
},
242241
expectedErr: "error validating linters config: lintersConfig.optionalorrequired.preferredOptionalMarker: Invalid value: \"invalid\": invalid value, must be one of \"optional\", \"kubebuilder:validation:Optional\" or omitted",
243242
}),
244243
Entry("With invalid preferred required marker (legacy field name)", validateLintersConfigTableInput{
245244
config: config.LintersConfig{
246-
"optionalOrRequired": toYaml(optionalorrequired.OptionalOrRequiredConfig{
245+
"optionalOrRequired": optionalorrequired.OptionalOrRequiredConfig{
247246
PreferredRequiredMarker: "invalid",
248-
}),
247+
},
249248
},
250249
expectedErr: "error validating linters config: lintersConfig.optionalorrequired.preferredRequiredMarker: Invalid value: \"invalid\": invalid value, must be one of \"required\", \"kubebuilder:validation:Required\" or omitted",
251250
}),
252251
)
253252
})
254253
})
255-
256-
func toYaml(v any) []byte {
257-
yaml, err := yaml.Marshal(v)
258-
if err != nil {
259-
panic(err)
260-
}
261-
262-
return yaml
263-
}

pkg/config/linters_config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ limitations under the License.
1616
package config
1717

1818
// LintersConfig contains configuration for individual linters.
19-
type LintersConfig map[string][]byte
19+
type LintersConfig map[string]any

0 commit comments

Comments
 (0)