2
0

Устранены все замечания линтера golangci-lint
All checks were successful
test / test (push) Successful in 1m1s

This commit is contained in:
Алексей Бадяев 2024-10-21 18:32:24 +07:00
parent b8e669f2cc
commit 7d6bc833a3
Signed by: alexey
GPG Key ID: 686FBC1363E4AFAE
6 changed files with 42 additions and 33 deletions

View File

@ -28,10 +28,10 @@ jobs:
- name: lint - name: lint
run: make lint run: make lint
# - name: golangci-lint - name: golangci-lint
# uses: https://github.com/golangci/golangci-lint-action@v6 uses: https://github.com/golangci/golangci-lint-action@v6
# with: with:
# version: v1.60 version: v1.60
- name: test - name: test
id: build id: build

View File

@ -95,7 +95,7 @@ linters:
- sqlclosecheck - sqlclosecheck
- staticcheck - staticcheck
- stylecheck - stylecheck
- tagalign # - tagalign
- tagliatelle - tagliatelle
- tenv - tenv
- testableexamples - testableexamples

12
cli.go
View File

@ -102,7 +102,7 @@ func (av *anyValue) Set(value string) error {
case reflect.Uint64: case reflect.Uint64:
return SetValueWithUintX(av.any, value, Uint64Size) return SetValueWithUintX(av.any, value, Uint64Size)
default: default:
return fmt.Errorf("unsupported type: %s", kind.String()) return fmt.Errorf("%w: %s", errUnsupportedType, kind.String())
} }
return nil return nil
@ -192,14 +192,14 @@ func (c *Command) Init(i interface{}) error {
ptrRef := reflect.ValueOf(i) ptrRef := reflect.ValueOf(i)
if ptrRef.IsNil() || ptrRef.Kind() != reflect.Ptr { if ptrRef.IsNil() || ptrRef.Kind() != reflect.Ptr {
return fmt.Errorf("expect a structure pointer type instead of %s", return fmt.Errorf("%w: %s",
ptrRef.Kind().String()) errExpectStructPointerInsteadOf, ptrRef.Kind().String())
} }
valueOfStruct := ptrRef.Elem() valueOfStruct := ptrRef.Elem()
if valueOfStruct.Kind() != reflect.Struct { if valueOfStruct.Kind() != reflect.Struct {
return fmt.Errorf("expect a structure type instead of %s", return fmt.Errorf("%w: %s",
valueOfStruct.Kind().String()) errExpectStructPointerInsteadOf, valueOfStruct.Kind().String())
} }
return c.parseValue(valueOfStruct) return c.parseValue(valueOfStruct)
@ -273,7 +273,7 @@ func (c *Command) addFlag(value reflect.Value, field reflect.StructField) error
sliceValue := newSliceValue(value, field.Tag.Get("separator")) sliceValue := newSliceValue(value, field.Tag.Get("separator"))
c.FlagSet.Var(sliceValue, name, usage) c.FlagSet.Var(sliceValue, name, usage)
default: default:
return fmt.Errorf("unsupported type: %s", kind.String()) return fmt.Errorf("%w: %s", errUnsupportedType, kind.String())
} }
return nil return nil

View File

@ -40,6 +40,15 @@ const (
PropConfigType = "properties" PropConfigType = "properties"
) )
var (
errExpectStructPointerInsteadOf = errors.New("expect a structure pointer type instead of")
errFileNotFound = errors.New("file not found")
errNotImplemented = errors.New("not implemented")
errUnsupportedConfigFile = errors.New("unsupported config file")
errUnsupportedType = errors.New("unsupported type")
errValueCannotBeChanged = errors.New("value cannot be changed")
)
// ParseDefault parses the given structure, extract default value from its tag // ParseDefault parses the given structure, extract default value from its tag
// and set structure with these values. // and set structure with these values.
// Normally, ParseDefault should be called before any other parsing functions // Normally, ParseDefault should be called before any other parsing functions
@ -48,14 +57,14 @@ func ParseDefault(i interface{}) error {
ptrRef := reflect.ValueOf(i) ptrRef := reflect.ValueOf(i)
if ptrRef.IsNil() || ptrRef.Kind() != reflect.Ptr { if ptrRef.IsNil() || ptrRef.Kind() != reflect.Ptr {
return fmt.Errorf("expect a structure pointer type instead of %s", return fmt.Errorf("%w: %s",
ptrRef.Kind().String()) errExpectStructPointerInsteadOf, ptrRef.Kind().String())
} }
valueOfStruct := ptrRef.Elem() valueOfStruct := ptrRef.Elem()
if valueOfStruct.Kind() != reflect.Struct { if valueOfStruct.Kind() != reflect.Struct {
return fmt.Errorf("expect a structure pointer type instead of %s", return fmt.Errorf("%w: %s",
valueOfStruct.Kind().String()) errExpectStructPointerInsteadOf, valueOfStruct.Kind().String())
} }
return parseValue(valueOfStruct) return parseValue(valueOfStruct)
@ -92,7 +101,7 @@ func parseValue(value reflect.Value) error {
return err return err
} }
func setValue(value reflect.Value, defValue string, sf reflect.StructField) error { func setValue(value reflect.Value, defValue string, field reflect.StructField) error {
var err error var err error
switch value.Kind() { switch value.Kind() {
@ -121,14 +130,14 @@ func setValue(value reflect.Value, defValue string, sf reflect.StructField) erro
case reflect.Float64: case reflect.Float64:
err = SetValueWithFloatX(value, defValue, Float64Size) err = SetValueWithFloatX(value, defValue, Float64Size)
case reflect.Slice: case reflect.Slice:
sp, ok := sf.Tag.Lookup("separator") sp, ok := field.Tag.Lookup("separator")
if !ok { if !ok {
sp = ":" sp = ":"
} }
err = SetValueWithSlice(value, defValue, sp) err = SetValueWithSlice(value, defValue, sp)
default: default:
err = fmt.Errorf("unsupported type: %s", value.Kind().String()) err = fmt.Errorf("%w: %s", errUnsupportedType, value.Kind().String())
} }
return err return err
@ -183,7 +192,7 @@ func ParseConfigFile(out interface{}, configFile string) error {
case PropConfigType: case PropConfigType:
err = parseProp(out, configFile) err = parseProp(out, configFile)
default: default:
err = fmt.Errorf("unsupported config file: %s", configFile) err = fmt.Errorf("%w: %s", errUnsupportedConfigFile, configFile)
} }
return err return err
@ -193,7 +202,7 @@ func ParseConfigFile(out interface{}, configFile string) error {
func parseJSON(out interface{}, jsonFile string) error { func parseJSON(out interface{}, jsonFile string) error {
raw, err := os.ReadFile(jsonFile) raw, err := os.ReadFile(jsonFile)
if err != nil { if err != nil {
return fmt.Errorf("open json config file: %s", err.Error()) return fmt.Errorf("open json config file: %w", err)
} }
if err := json.Unmarshal(raw, out); err != nil { if err := json.Unmarshal(raw, out); err != nil {
@ -207,7 +216,7 @@ func parseJSON(out interface{}, jsonFile string) error {
func parseYaml(out interface{}, yamlFile string) error { func parseYaml(out interface{}, yamlFile string) error {
raw, err := os.ReadFile(yamlFile) raw, err := os.ReadFile(yamlFile)
if err != nil { if err != nil {
return fmt.Errorf("open yaml config file: %s", err.Error()) return fmt.Errorf("open yaml config file: %w", err)
} }
if err := yaml.Unmarshal(raw, out); err != nil { if err := yaml.Unmarshal(raw, out); err != nil {
@ -219,7 +228,7 @@ func parseYaml(out interface{}, yamlFile string) error {
// parseProp parses Properties file and set structure with its value // parseProp parses Properties file and set structure with its value
func parseProp(_ interface{}, _ /* The propFile */ string) error { func parseProp(_ interface{}, _ /* The propFile */ string) error {
return errors.New("properties config is not implemented") return fmt.Errorf("%w: properties config", errNotImplemented)
} }
// getDefaultConfigFile returns a existing default config file. The checking // getDefaultConfigFile returns a existing default config file. The checking
@ -228,7 +237,7 @@ func parseProp(_ interface{}, _ /* The propFile */ string) error {
func getDefaultConfigFile() (string, error) { func getDefaultConfigFile() (string, error) {
exe, err := os.Executable() exe, err := os.Executable()
if err != nil { if err != nil {
return "", fmt.Errorf("find default config file: %s", err.Error()) return "", fmt.Errorf("%w: %w", errFileNotFound, err)
} }
path := filepath.Dir(exe) + string(filepath.Separator) path := filepath.Dir(exe) + string(filepath.Separator)
@ -251,7 +260,7 @@ func getDefaultConfigFile() (string, error) {
return propConfig, nil return propConfig, nil
} }
return "", fmt.Errorf("default config file not found in path: %s", path) return "", fmt.Errorf("default config %w in path: %s", errFileNotFound, path)
} }
// getConfigFileType analyzes config file extension name and return // getConfigFileType analyzes config file extension name and return
@ -267,5 +276,5 @@ func getConfigFileType(configFile string) (string, error) {
return PropConfigType, nil return PropConfigType, nil
} }
return "", fmt.Errorf("unsupported file type: %s", configFile) return "", fmt.Errorf("%w: %s", errUnsupportedConfigFile, configFile)
} }

14
env.go
View File

@ -51,14 +51,14 @@ func ParseEnvWith(i interface{}, prefix string) error {
ptrRef := reflect.ValueOf(i) ptrRef := reflect.ValueOf(i)
if ptrRef.IsNil() || ptrRef.Kind() != reflect.Ptr { if ptrRef.IsNil() || ptrRef.Kind() != reflect.Ptr {
return fmt.Errorf("expect a structure pointer type instead of %s", return fmt.Errorf("%w: %s",
ptrRef.Kind().String()) errExpectStructPointerInsteadOf, ptrRef.Kind().String())
} }
valueOfStruct := ptrRef.Elem() valueOfStruct := ptrRef.Elem()
if valueOfStruct.Kind() != reflect.Struct { if valueOfStruct.Kind() != reflect.Struct {
return fmt.Errorf("expect a structure pointer type instead of %s", return fmt.Errorf("%w: %s",
valueOfStruct.Kind().String()) errExpectStructPointerInsteadOf, valueOfStruct.Kind().String())
} }
return parseValueEnv(valueOfStruct, prefix) return parseValueEnv(valueOfStruct, prefix)
@ -110,7 +110,7 @@ func setFieldValueEnv(value reflect.Value, field reflect.StructField, prefix str
} }
if !value.CanSet() { if !value.CanSet() {
return fmt.Errorf("%s: can't be set", field.Name) return fmt.Errorf("%w: %s", errValueCannotBeChanged, field.Name)
} }
var err error var err error
@ -151,11 +151,11 @@ func setFieldValueEnv(value reflect.Value, field reflect.StructField, prefix str
err = SetValueWithSlice(value, envValue, sp) err = SetValueWithSlice(value, envValue, sp)
default: default:
return fmt.Errorf("unsupported type: %s", kind.String()) return fmt.Errorf("%w: %s", errUnsupportedType, kind.String())
} }
if err != nil { if err != nil {
return fmt.Errorf("%s: %s", field.Name, err.Error()) return fmt.Errorf("%s: %w", field.Name, err)
} }
return nil return nil

View File

@ -105,7 +105,7 @@ func SetValueWithSlice(value reflect.Value, slice string, sep string) error {
case reflect.Float64: case reflect.Float64:
err = SetValueWithFloatX(ele, data[index], Float64Size) err = SetValueWithFloatX(ele, data[index], Float64Size)
default: default:
return fmt.Errorf("unsupported type: %s", kind.String()) return fmt.Errorf("%w: %s", errUnsupportedType, kind.String())
} }
if err != nil { if err != nil {