From 9e0f40deded1c79d6d5a85b92cb56edad5222b41 Mon Sep 17 00:00:00 2001 From: Matthieu MOREL Date: Mon, 3 Mar 2025 22:13:34 +0100 Subject: [PATCH] chore: enable receiver-naming, redundant-import-alias, unnecessary-stmt, unused-parameter, use-any, use-errors-new and useless-break rules from revive Signed-off-by: Matthieu MOREL --- augerctl/command/global.go | 4 ++-- cmd/analyze.go | 2 +- cmd/checksum.go | 2 +- cmd/decode.go | 5 +++-- cmd/encode.go | 6 +++--- cmd/extract.go | 17 +++++++++-------- pkg/client/client_get.go | 6 +++--- pkg/client/util.go | 6 +++--- pkg/data/data.go | 17 +++++++++-------- pkg/encoding/encoding.go | 7 ++++--- pkg/scheme/init.go | 4 ++-- tools/.golangci.yaml | 12 ++++++++++++ 12 files changed, 52 insertions(+), 36 deletions(-) diff --git a/augerctl/command/global.go b/augerctl/command/global.go index 78a2ecb..db55f93 100644 --- a/augerctl/command/global.go +++ b/augerctl/command/global.go @@ -18,7 +18,7 @@ package command import ( "crypto/tls" - "fmt" + "errors" "strings" "github.com/etcd-io/auger/pkg/client" @@ -70,7 +70,7 @@ func clientConfigFromCmd(f *flagpole) (clientv3.Config, error) { if f.Password == "" { splitted := strings.SplitN(f.User, ":", 2) if len(splitted) < 2 { - return clientv3.Config{}, fmt.Errorf("password is missing") + return clientv3.Config{}, errors.New("password is missing") } cfg.Username = splitted[0] cfg.Password = splitted[1] diff --git a/cmd/analyze.go b/cmd/analyze.go index 7e033af..be11a77 100644 --- a/cmd/analyze.go +++ b/cmd/analyze.go @@ -28,7 +28,7 @@ import ( var analyzeCmd = &cobra.Command{ Use: "analyze", Short: "Analyze kubernetes data from the boltdb '.db' files etcd persists to.", - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, _ []string) error { return analyzeValidateAndRun() }, } diff --git a/cmd/checksum.go b/cmd/checksum.go index 803b1cf..4af56b3 100644 --- a/cmd/checksum.go +++ b/cmd/checksum.go @@ -26,7 +26,7 @@ import ( var checksumCmd = &cobra.Command{ Use: "checksum", Short: "Checksum a etcd keyspace.", - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, _ []string) error { return checksum() }, } diff --git a/cmd/decode.go b/cmd/decode.go index 7863e9b..fdef464 100644 --- a/cmd/decode.go +++ b/cmd/decode.go @@ -17,6 +17,7 @@ limitations under the License. package cmd import ( + "errors" "fmt" "io" "os" @@ -62,7 +63,7 @@ var decodeCmd = &cobra.Command{ Short: "Decode objects from the kubernetes binary key-value store encoding.", Long: decodeLong, Example: decodeExample, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, _ []string) error { return validateAndRun() }, } @@ -97,7 +98,7 @@ func validateAndRun() error { in, err := readInput(options.inputFilename) if len(in) == 0 { - return fmt.Errorf("no input data") + return errors.New("no input data") } if err != nil { return err diff --git a/cmd/encode.go b/cmd/encode.go index f8f43eb..ac89bcd 100644 --- a/cmd/encode.go +++ b/cmd/encode.go @@ -17,7 +17,7 @@ limitations under the License. package cmd import ( - "fmt" + "errors" "io" "os" @@ -42,7 +42,7 @@ var encodeCmd = &cobra.Command{ Short: "Encode objects to the kubernetes binary key-value store encoding.", Long: encodeLong, Example: encodeExample, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, _ []string) error { return encodeValidateAndRun() }, } @@ -70,7 +70,7 @@ func encodeValidateAndRun() error { in, err := readInput(encodeOpts.inputFilename) if len(in) == 0 { - return fmt.Errorf("no input data") + return errors.New("no input data") } if err != nil { return err diff --git a/cmd/extract.go b/cmd/extract.go index b153092..a2e97c2 100644 --- a/cmd/extract.go +++ b/cmd/extract.go @@ -17,6 +17,7 @@ limitations under the License. package cmd import ( + "errors" "fmt" "io" "os" @@ -70,7 +71,7 @@ var extractCmd = &cobra.Command{ Short: "Extracts kubernetes data from the boltdb '.db' files etcd persists to.", Long: extractLong, Example: extractExample, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, _ []string) error { return extractValidateAndRun() }, } @@ -160,17 +161,17 @@ func extractValidateAndRun() error { } return printLeafItemValue(kv, outMediaType, out) case hasKey && hasKeyPrefix: - return fmt.Errorf("--keys-by-prefix and --key may not be used together") + return errors.New("--keys-by-prefix and --key may not be used together") case hasKey && opts.listVersions: return printVersions(opts.filename, opts.key, out) case hasKey: return printValue(opts.filename, opts.key, opts.version, opts.raw, outMediaType, out) case !hasKey && opts.listVersions: - return fmt.Errorf("--list-versions may only be used with --key") + return errors.New("--list-versions may only be used with --key") case !hasKey && hasVersion: - return fmt.Errorf("--version may only be used with --key") + return errors.New("--version may only be used with --key") case hasTemplate && hasFields: - return fmt.Errorf("--template and --fields may not be used together") + return errors.New("--template and --fields may not be used together") case hasTemplate: return printTemplateSummaries(opts.filename, opts.keyPrefix, opts.revision, opts.template, opts.filter, out) default: @@ -216,7 +217,7 @@ func printValue(filename string, key string, version string, raw bool, outMediaT return err } if len(in) == 0 { - return fmt.Errorf("0 byte value") + return errors.New("0 byte value") } if raw { fmt.Fprintf(out, "%s\n", string(in)) @@ -259,7 +260,7 @@ func printLeafItemValue(kv *mvccpb.KeyValue, outMediaType string, out io.Writer) // printKeySummaries prints all keys in the db file with the given key prefix. func printKeySummaries(filename string, keyPrefix string, revision int64, fields []string, out io.Writer) error { if len(fields) == 0 { - return fmt.Errorf("no fields provided, nothing to output") + return errors.New("no fields provided, nothing to output") } var hasKey bool @@ -297,7 +298,7 @@ func printTemplateSummaries(filename string, keyPrefix string, revision int64, t } if len(templatestr) == 0 { - return fmt.Errorf("no template provided, nothing to output") + return errors.New("no template provided, nothing to output") } filters := []data.Filter{} diff --git a/pkg/client/client_get.go b/pkg/client/client_get.go index 5ef950e..d990e48 100644 --- a/pkg/client/client_get.go +++ b/pkg/client/client_get.go @@ -18,19 +18,19 @@ package client import ( "context" - "fmt" + "errors" clientv3 "go.etcd.io/etcd/client/v3" ) func (c *client) Get(ctx context.Context, prefix string, opOpts ...OpOption) (rev int64, err error) { if prefix == "" { - return 0, fmt.Errorf("prefix is required") + return 0, errors.New("prefix is required") } opt := opOption(opOpts) if opt.response == nil { - return 0, fmt.Errorf("response is required") + return 0, errors.New("response is required") } path, single, err := getPrefix(prefix, opt.gr, opt.name, opt.namespace) diff --git a/pkg/client/util.go b/pkg/client/util.go index 16a2acf..8db9f3d 100644 --- a/pkg/client/util.go +++ b/pkg/client/util.go @@ -17,7 +17,7 @@ limitations under the License. package client import ( - "fmt" + "errors" "strings" "k8s.io/apimachinery/pkg/runtime/schema" @@ -42,7 +42,7 @@ var specialDefaultMediaTypes = map[string]struct{}{ // prefixFromGR returns the prefix of the given GroupResource. func prefixFromGR(gr schema.GroupResource) (string, error) { if gr.Resource == "" { - return "", fmt.Errorf("resource is empty") + return "", errors.New("resource is empty") } if prefix, ok := specialDefaultResourcePrefixes[gr]; ok { @@ -80,7 +80,7 @@ func getPrefix(prefix string, gr schema.GroupResource, name, namespace string) ( if gr.Empty() { if namespace != "" || name != "" { - return "", false, fmt.Errorf("namespace and name must be omitted if there is no GroupResource") + return "", false, errors.New("namespace and name must be omitted if there is no GroupResource") } } else { p, err := prefixFromGR(gr) diff --git a/pkg/data/data.go b/pkg/data/data.go index 5527d88..d31857d 100644 --- a/pkg/data/data.go +++ b/pkg/data/data.go @@ -20,6 +20,7 @@ import ( "bytes" "encoding/binary" "encoding/json" + "errors" "fmt" "hash/crc32" "os" @@ -47,7 +48,7 @@ var ( type KeySummary struct { Key string Version int64 - Value interface{} + Value any TypeMeta *runtime.TypeMeta Stats *KeySummaryStats } @@ -252,7 +253,7 @@ func ListKeySummaries(codecs serializer.CodecFactory, filename string, filters [ valJson = strings.TrimSpace(string(buf)) } var key string - var value map[string]interface{} + var value map[string]any if proj.HasKey { key = string(kv.Key) } @@ -328,7 +329,7 @@ func ListVersions(filename string, key string) ([]int64, error) { var result []int64 - err = walk(db, func(r revKey, kv *mvccpb.KeyValue) (bool, error) { + err = walk(db, func(_ revKey, kv *mvccpb.KeyValue) (bool, error) { if string(kv.Key) == key { result = append(result, kv.Version) } @@ -350,7 +351,7 @@ func GetValue(filename string, key string, version int64) ([]byte, error) { defer db.Close() var result []byte found := false - err = walk(db, func(r revKey, kv *mvccpb.KeyValue) (bool, error) { + err = walk(db, func(_ revKey, kv *mvccpb.KeyValue) (bool, error) { if string(kv.Key) == key && kv.Version == version { result = kv.Value found = true @@ -378,7 +379,7 @@ func walkRevision(db *bolt.DB, revision int64, f func(r revKey, kv *mvccpb.KeyVa return err } if revision > 0 && revision < compactRev { - return fmt.Errorf("required revision has been compacted") + return errors.New("required revision has been compacted") } m := map[string]kvr{} @@ -500,7 +501,7 @@ func ParseFilters(filters string) ([]Filter, error) { return results, nil } -func rawJsonMarshal(data interface{}) string { +func rawJsonMarshal(data any) string { b, err := json.Marshal(data) if err != nil { return "" @@ -508,8 +509,8 @@ func rawJsonMarshal(data interface{}) string { return string(b) } -func rawJsonUnmarshal(valJson string) map[string]interface{} { - val := map[string]interface{}{} +func rawJsonUnmarshal(valJson string) map[string]any { + val := map[string]any{} if err := json.Unmarshal([]byte(valJson), &val); err != nil { val = nil } diff --git a/pkg/encoding/encoding.go b/pkg/encoding/encoding.go index 59d21e3..3ab0238 100644 --- a/pkg/encoding/encoding.go +++ b/pkg/encoding/encoding.go @@ -19,6 +19,7 @@ package encoding import ( "bytes" "encoding/json" + "errors" "fmt" "io" @@ -80,7 +81,7 @@ func Convert(codecs serializer.CodecFactory, inMediaType, outMediaType string, i } if inMediaType == ProtobufMediaType && outMediaType == StorageBinaryMediaType { - return nil, nil, fmt.Errorf("unsupported conversion: protobuf to kubernetes binary storage representation") + return nil, nil, errors.New("unsupported conversion: protobuf to kubernetes binary storage representation") } typeMeta, err := DecodeTypeMeta(inMediaType, in) @@ -96,7 +97,7 @@ func Convert(codecs serializer.CodecFactory, inMediaType, outMediaType string, i encoded = append(encoded, '\n') } } else if inMediaType == JsonMediaType && outMediaType == YamlMediaType { - val := map[string]interface{}{} + val := map[string]any{} if err := json.Unmarshal(in, &val); err != nil { return nil, nil, fmt.Errorf("error decoding from %s: %s", inMediaType, err) } @@ -140,7 +141,7 @@ func DetectAndExtract(in []byte) (string, []byte, error) { } return JsonMediaType, js, nil } - return "", nil, fmt.Errorf("error reading input, does not appear to contain valid JSON or binary data") + return "", nil, errors.New("error reading input, does not appear to contain valid JSON or binary data") } // TryFindProto searches for the 'k8s\0' prefix, and, if found, returns the data starting with the prefix. diff --git a/pkg/scheme/init.go b/pkg/scheme/init.go index c396a8f..b6d8414 100644 --- a/pkg/scheme/init.go +++ b/pkg/scheme/init.go @@ -17,7 +17,7 @@ limitations under the License. package scheme import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" @@ -27,6 +27,6 @@ var Scheme = runtime.NewScheme() var Codecs = serializer.NewCodecFactory(Scheme) func init() { - v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + metav1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) AddToScheme(Scheme) } diff --git a/tools/.golangci.yaml b/tools/.golangci.yaml index b8e9c70..ce77909 100644 --- a/tools/.golangci.yaml +++ b/tools/.golangci.yaml @@ -17,6 +17,7 @@ linters: # - structcheck # - varcheck - goimports + - importas - ineffassign - nakedret - revive @@ -28,6 +29,10 @@ linters: linters-settings: # please keep this alphabetized goimports: local-prefixes: go.etcd.io # Put imports beginning with prefix after 3rd-party packages. + importas: + alias: + - alias: metav1 + pkg: k8s.io/apimachinery/pkg/apis/meta/v1 nakedret: # Align with https://github.com/alexkohler/nakedret/blob/v1.0.2/cmd/nakedret/main.go#L10 max-func-lines: 5 @@ -54,9 +59,16 @@ linters-settings: # please keep this alphabetized - name: indent-error-flow arguments: - "preserveScope" + - name: receiver-naming + - name: redundant-import-alias - name: superfluous-else arguments: - "preserveScope" + - name: unnecessary-stmt + - name: unused-parameter + - name: use-any + - name: use-errors-new + - name: useless-break - name: var-declaration # TODO: enable the following rules - name: var-naming