diff --git a/.golangci.yml b/.golangci.yml index 5d6b344..2bf6126 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -23,4 +23,4 @@ formatters: - gofmt - gofumpt - goimports - - golines + - swaggo diff --git a/and.go b/and.go index af82ba4..1f17525 100644 --- a/and.go +++ b/and.go @@ -24,6 +24,7 @@ func And(es ...Endless) (CeilingFloorConstrainter, error) { //nolint:cyclop,iret if len(es) == 0 { return NewMatchAll(), nil } + if len(es) == 1 { return es[0], nil } @@ -35,9 +36,11 @@ func And(es ...Endless) (CeilingFloorConstrainter, error) { //nolint:cyclop,iret // logic error! This should never happen return nilC, errUnexpectedAndLogic } + if ceilingOk && !floorOk { return ceiling, nil } + if !ceilingOk { // floorOk is always true here return floor, nil } diff --git a/and_test.go b/and_test.go index 8c9fca4..15a11cb 100644 --- a/and_test.go +++ b/and_test.go @@ -446,6 +446,7 @@ func Test_minBoundedCeiling(t *testing.T) { want Endless wantOk bool } + tests := []testCase{ { name: "empty", @@ -627,6 +628,7 @@ func Test_maxBoundedFloor(t *testing.T) { want Endless wantOk bool } + tests := []testCase{ { name: "empty", diff --git a/compact.go b/compact.go index 2dffedf..4bae53e 100644 --- a/compact.go +++ b/compact.go @@ -11,9 +11,11 @@ func Compact(o Or) Constrainter { //nolint:cyclop,ireturn if len(o) == 0 { return Or{} } + if len(o) == 1 { return o[0] } + if slices.ContainsFunc(o, matchAll) { return NewMatchAll() } @@ -45,6 +47,7 @@ func Compact(o Or) Constrainter { //nolint:cyclop,ireturn if floorOk { r = append(r, floor) } + if ceilingOk { r = append(r, ceiling) } diff --git a/doc_example_test.go b/doc_example_test.go index 6679738..d1c2b71 100644 --- a/doc_example_test.go +++ b/doc_example_test.go @@ -37,6 +37,7 @@ func Example_version() { continue } + fmt.Printf("%-21q => %v\n", s, v) } diff --git a/op.go b/op.go index 05cc668..c1e9848 100644 --- a/op.go +++ b/op.go @@ -5,10 +5,10 @@ const ( greaterThan lessThan lessThanOrEqualTo - - errUnexpectedOp stringError = "unexpected op" ) +const errUnexpectedOp stringError = "unexpected op" + type op int8 func (o op) String() string { diff --git a/or.go b/or.go index de161f2..a96ff90 100644 --- a/or.go +++ b/or.go @@ -27,6 +27,7 @@ func (o Or) String() string { if i > 0 { s += " || " } + s += o[i].String() } diff --git a/version.go b/version.go index 7072343..339a2ab 100644 --- a/version.go +++ b/version.go @@ -100,37 +100,37 @@ func Parse(v string) (Version, error) { //nolint:cyclop,funlen } else if dm := dateOnlyVersioningRegexp.FindStringSubmatch(v); dm != nil { match = dm } + if match == nil || len(match) != 7 { return Version{}, &ParseError{original, errInvalidVersionString} } var err error - - if cv.major, err = strconv.ParseUint(match[1], 10, 64); err != nil { + if cv.major, err = strconv.ParseUint(match[1], 10, 64); err != nil { //nolint:noinlineerr return Version{}, &ParseError{original, err} } // CalVer (as MAJOR) must be in YYYYMMDDhhmm or YYYYMMDD formats - if s := strconv.FormatUint(cv.major, 10); len(s) > 12 || len(s) == 11 || len(s) == 9 || - len(s) == 7 { + if s := strconv.FormatUint(cv.major, 10); len(s) > 12 || len(s) == 11 || len(s) == 9 || len(s) == 7 { return Version{}, &ParseError{original, errInvalidVersionString} } - if cv.minor, err = strconv.ParseUint(match[2], 10, 64); match[2] != "" && err != nil { + if cv.minor, err = strconv.ParseUint(match[2], 10, 64); match[2] != "" && err != nil { //nolint:noinlineerr return Version{}, &ParseError{original, err} } - if cv.patch, err = strconv.ParseUint(match[3], 10, 64); match[3] != "" && err != nil { + if cv.patch, err = strconv.ParseUint(match[3], 10, 64); match[3] != "" && err != nil { //nolint:noinlineerr return Version{}, &ParseError{original, err} } if cv.major >= 1000_00 && match[4] != "" { return Version{}, &ParseError{original, errDateVersionWithFourBits} } - if cv.tweak, err = strconv.ParseUint(match[4], 10, 64); match[4] != "" && err != nil { + + if cv.tweak, err = strconv.ParseUint(match[4], 10, 64); match[4] != "" && err != nil { //nolint:noinlineerr return Version{}, &ParseError{original, err} } - if cv.modifier, err = newModifier(match[5]); err != nil { + if cv.modifier, err = newModifier(match[5]); err != nil { //nolint:noinlineerr return Version{}, &ParseError{original, err} } diff --git a/version_test.go b/version_test.go index a6cc3dd..74c8aec 100644 --- a/version_test.go +++ b/version_test.go @@ -96,9 +96,11 @@ func TestParse(t *testing.T) { if err != nil { t.Fatalf("Parse() error = %v, wantErr %v", err, nil) } + if gotString := got.String(); gotString != tt.want { t.Errorf("Parse().String() got = %q, want %v", gotString, tt.want) } + if gotOriginal := got.Original(); gotOriginal != tt.v { t.Errorf("Parse().Original() got = %q, want %v", gotOriginal, tt.v) } @@ -118,6 +120,7 @@ func TestMustParse(t *testing.T) { if gotString := got.String(); gotString != tt.want { t.Errorf("MustParse().String() got = %q, want %v", gotString, tt.want) } + if gotOriginal := got.Original(); gotOriginal != tt.v { t.Errorf("MustParse().Original() got = %q, want %v", gotOriginal, tt.v) } @@ -353,6 +356,7 @@ func TestVersion_Compare(t *testing.T) { if err != nil { t.Fatalf("Parse(%q) error = %v, wantErr %v", tt.v, err, nil) } + w, err := Parse(tt.w) if err != nil { t.Fatalf("Parse(%q) error = %v, wantErr %v", tt.w, err, nil)