diff --git a/.golangci.next.reference.yml b/.golangci.next.reference.yml index fb0895eb3700..04dc313afa16 100644 --- a/.golangci.next.reference.yml +++ b/.golangci.next.reference.yml @@ -2326,7 +2326,7 @@ linters-settings: # Checks only the file's initial comment, which must follow the format: "// Code generated by ". # Files generated by protoc-gen-go, protoc-gen-go-grpc, and protoc-gen-grpc-gateway are always excluded automatically. # Default: [] - skip-generated-by: ["protoc-gen-go-my-own-generator"] + skip-generated-by: [ "protoc-gen-go-my-own-generator" ] # Skip files matching the specified glob pattern from the checking. # Default: [] skip-files: @@ -2400,7 +2400,7 @@ linters-settings: - name: add-constant severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - maxLitCount: "3" allowStrs: '""' @@ -2410,50 +2410,50 @@ linters-settings: - name: argument-limit severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 4 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#atomic - name: atomic severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#banned-characters - name: banned-characters severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ "Ω","Σ","σ", "7" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#bare-return - name: bare-return severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#blank-imports - name: blank-imports severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#bool-literal-in-expr - name: bool-literal-in-expr severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#call-to-gc - name: call-to-gc severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#cognitive-complexity - name: cognitive-complexity severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 7 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#comment-spacings - name: comment-spacings severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - mypragma - otherpragma @@ -2461,74 +2461,74 @@ linters-settings: - name: comments-density severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 15 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#confusing-naming - name: confusing-naming severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#confusing-results - name: confusing-results severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#constant-logical-expr - name: constant-logical-expr severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#context-as-argument - name: context-as-argument severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - allowTypesBefore: "*testing.T,*github.com/user/repo/testing.Harness" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#context-keys-type - name: context-keys-type severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#cyclomatic - name: cyclomatic severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 3 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#datarace - name: datarace severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#deep-exit - name: deep-exit severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#defer - name: defer severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - [ "call-chain", "loop" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#dot-imports - name: dot-imports severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#duplicated-imports - name: duplicated-imports severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#early-return - name: early-return severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "preserveScope" - "allowJump" @@ -2536,60 +2536,60 @@ linters-settings: - name: empty-block severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#empty-lines - name: empty-lines severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#enforce-map-style - name: enforce-map-style severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "make" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#enforce-repeated-arg-type-style - name: enforce-repeated-arg-type-style severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "short" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#enforce-slice-style - name: enforce-slice-style severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "make" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#error-naming - name: error-naming severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#error-return - name: error-return severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#error-strings - name: error-strings severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "xerrors.New" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#errorf - name: errorf severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#exported - name: exported severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "checkPrivateReceivers" - "disableStutteringCheck" @@ -2599,14 +2599,14 @@ linters-settings: - name: file-header severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - This is the text that must appear at the top of source files. # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#file-length-limit - name: file-length-limit severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - max: 100 skipComments: true @@ -2615,58 +2615,58 @@ linters-settings: - name: filename-format severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "^[_a-z][_a-z0-9]*\\.go$" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#flag-parameter - name: flag-parameter severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#function-length - name: function-length severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 10, 0 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#function-result-limit - name: function-result-limit severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 3 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#get-return - name: get-return severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#identical-branches - name: identical-branches severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#if-return - name: if-return severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#import-alias-naming - name: import-alias-naming severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "^[a-z][a-z0-9]{0,}$" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#import-shadowing - name: import-shadowing severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#imports-blocklist - name: imports-blocklist severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "crypto/md5" - "crypto/sha1" @@ -2674,99 +2674,99 @@ linters-settings: - name: increment-decrement severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#indent-error-flow - name: indent-error-flow severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "preserveScope" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#line-length-limit - name: line-length-limit severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 80 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#max-control-nesting - name: max-control-nesting severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 3 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#max-public-structs - name: max-public-structs severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: [ 3 ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#modifies-parameter - name: modifies-parameter severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#modifies-value-receiver - name: modifies-value-receiver severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#nested-structs - name: nested-structs severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#optimize-operands-order - name: optimize-operands-order severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#package-comments - name: package-comments severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#range - name: range severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#range-val-address - name: range-val-address severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#range-val-in-closure - name: range-val-in-closure severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#receiver-naming - name: receiver-naming severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - maxLength: 2 # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#redefines-builtin-id - name: redefines-builtin-id severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#redundant-build-tag - name: redundant-build-tag severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#redundant-import-alias - name: redundant-import-alias severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#string-format - name: string-format severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - - 'core.WriteError[1].Message' - '/^([^A-Z]|$)/' @@ -2781,12 +2781,12 @@ linters-settings: - name: string-of-int severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#struct-tag - name: struct-tag severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "json,inline" - "bson,outline,gnu" @@ -2794,46 +2794,46 @@ linters-settings: - name: superfluous-else severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "preserveScope" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#time-equal - name: time-equal severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#time-naming - name: time-naming severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unchecked-type-assertion - name: unchecked-type-assertion severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - acceptIgnoredAssertionResult: true # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unconditional-recursion - name: unconditional-recursion severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unexported-naming - name: unexported-naming severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unexported-return - name: unexported-return severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unhandled-error - name: unhandled-error severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - "fmt.Printf" - "myFunction" @@ -2841,51 +2841,51 @@ linters-settings: - name: unnecessary-stmt severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unreachable-code - name: unreachable-code severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unused-parameter - name: unused-parameter severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - allowRegex: "^_" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#unused-receiver - name: unused-receiver severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - allowRegex: "^_" # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#use-any - name: use-any severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#use-errors-new - name: use-errors-new severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#useless-break - name: useless-break severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#var-declaration - name: var-declaration severity: warning disabled: false - exclude: [""] + exclude: [ "" ] # https://github.com/mgechev/revive/blob/HEAD/RULES_DESCRIPTIONS.md#var-naming - name: var-naming severity: warning disabled: false - exclude: [""] + exclude: [ "" ] arguments: - [ "ID" ] # AllowList - [ "VM" ] # DenyList @@ -2894,7 +2894,7 @@ linters-settings: - name: waitgroup-by-value severity: warning disabled: false - exclude: [""] + exclude: [ "" ] rowserrcheck: # database/sql is always checked @@ -3453,8 +3453,7 @@ linters-settings: # Overrides the default/root configuration. # Default: [] overrides: - - - # The package path (uses `/` only as a separator). + - # The package path (uses `/` only as a separator). # Required pkg: foo/bar # Default: empty or the same as the default/root configuration. @@ -3463,7 +3462,7 @@ linters-settings: xml: pascal # Default: empty or the same as the default/root configuration. extended-rules: - # Same options as the base `extended-rules`. + # Same options as the base `extended-rules`. # Default: false (WARNING: it doesn't follow the default/root configuration) use-field-name: true # The field names to ignore. @@ -3496,6 +3495,7 @@ linters-settings: - contains - empty - encoded-compare + - equal-values - error-is-as - error-nil - expected-actual @@ -3510,6 +3510,7 @@ linters-settings: - suite-broken-parallel - suite-dont-use-pkg - suite-extra-assert-call + - suite-method-signature - suite-subtest-run - suite-thelper - useless-assert @@ -3519,9 +3520,10 @@ linters-settings: disable-all: true # Enable checkers by name # (in addition to default - # blank-import, bool-compare, compares, contains, empty, encoded-compare, error-is-as, error-nil, expected-actual, - # go-require, float-compare, formatter, len, negative-positive, nil-compare, regexp, require-error, - # suite-broken-parallel, suite-dont-use-pkg, suite-extra-assert-call, suite-subtest-run, useless-assert + # blank-import, bool-compare, compares, contains, empty, encoded-compare, equal-values, error-is-as, error-nil, + # expected-actual, go-require, float-compare, formatter, len, negative-positive, nil-compare, regexp, require-error, + # suite-broken-parallel, suite-dont-use-pkg, suite-extra-assert-call, suite-subtest-run, suite-method-signature, + # useless-assert # ). enable: - blank-import @@ -3530,6 +3532,7 @@ linters-settings: - contains - empty - encoded-compare + - equal-values - error-is-as - error-nil - expected-actual @@ -3545,6 +3548,7 @@ linters-settings: - suite-dont-use-pkg - suite-extra-assert-call - suite-subtest-run + - suite-method-signature - suite-thelper - useless-assert @@ -3568,6 +3572,10 @@ linters-settings: # https://github.com/Antonboom/testifylint?tab=readme-ov-file#historical-reference-of-formatter. # Default: false require-f-funcs: true + # To require that the first element of msgAndArgs (msg) has a string type. + # For example, in such case assertion like `assert.True(t, b, tt.case)` will be considered as invalid. + # Default: true + require-string-msg: false go-require: # To ignore HTTP handlers (like http.HandlerFunc). # Default: false diff --git a/go.mod b/go.mod index 4755f528fab1..7334d382ae9a 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/Abirdcfly/dupword v0.1.3 github.com/Antonboom/errname v1.0.0 github.com/Antonboom/nilnil v1.0.1 - github.com/Antonboom/testifylint v1.5.2 + github.com/Antonboom/testifylint v1.6.0 github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c github.com/Crocmagnon/fatcontext v0.7.1 github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 diff --git a/go.sum b/go.sum index eb6fe0ef722f..ce9d0598aef4 100644 --- a/go.sum +++ b/go.sum @@ -43,8 +43,8 @@ github.com/Antonboom/errname v1.0.0 h1:oJOOWR07vS1kRusl6YRSlat7HFnb3mSfMl6sDMRoT github.com/Antonboom/errname v1.0.0/go.mod h1:gMOBFzK/vrTiXN9Oh+HFs+e6Ndl0eTFbtsRTSRdXyGI= github.com/Antonboom/nilnil v1.0.1 h1:C3Tkm0KUxgfO4Duk3PM+ztPncTFlOf0b2qadmS0s4xs= github.com/Antonboom/nilnil v1.0.1/go.mod h1:CH7pW2JsRNFgEh8B2UaPZTEPhCMuFowP/e8Udp9Nnb0= -github.com/Antonboom/testifylint v1.5.2 h1:4s3Xhuv5AvdIgbd8wOOEeo0uZG7PbDKQyKY5lGoQazk= -github.com/Antonboom/testifylint v1.5.2/go.mod h1:vxy8VJ0bc6NavlYqjZfmp6EfqXMtBgQ4+mhCojwC1P8= +github.com/Antonboom/testifylint v1.6.0 h1:6rdILVPt4+rqcvhid8w9wJNynKLUgqHNpFyM67UeXyc= +github.com/Antonboom/testifylint v1.6.0/go.mod h1:k+nEkathI2NFjKO6HvwmSrbzUcQ6FAnbZV+ZRrnXPLI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= diff --git a/jsonschema/golangci.next.jsonschema.json b/jsonschema/golangci.next.jsonschema.json index f80ccf06235a..b559d1cf99f8 100644 --- a/jsonschema/golangci.next.jsonschema.json +++ b/jsonschema/golangci.next.jsonschema.json @@ -3198,6 +3198,7 @@ "contains", "empty", "encoded-compare", + "equal-values", "error-is-as", "error-nil", "expected-actual", @@ -3212,6 +3213,7 @@ "suite-broken-parallel", "suite-dont-use-pkg", "suite-extra-assert-call", + "suite-method-signature", "suite-subtest-run", "suite-thelper", "useless-assert" @@ -3224,6 +3226,7 @@ "contains", "empty", "encoded-compare", + "equal-values", "error-is-as", "error-nil", "expected-actual", @@ -3238,6 +3241,7 @@ "suite-broken-parallel", "suite-dont-use-pkg", "suite-extra-assert-call", + "suite-method-signature", "suite-subtest-run", "useless-assert" ] @@ -3253,6 +3257,7 @@ "contains", "empty", "encoded-compare", + "equal-values", "error-is-as", "error-nil", "expected-actual", @@ -3267,8 +3272,8 @@ "suite-broken-parallel", "suite-dont-use-pkg", "suite-extra-assert-call", + "suite-method-signature", "suite-subtest-run", - "suite-thelper", "useless-assert" ], "default": [ @@ -3311,6 +3316,11 @@ "description": "To require f-assertions (e.g. assert.Equalf) if format string is used, even if there are no variable-length variables.", "type": "boolean", "default": false + }, + "require-string-msg": { + "description": "To require that the first element of msgAndArgs (msg) has a string type.", + "type": "boolean", + "default": true } } }, diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index 94650a66de9b..19adc5f4818e 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -957,6 +957,7 @@ type TestifylintSettings struct { Formatter struct { CheckFormatString *bool `mapstructure:"check-format-string"` RequireFFuncs bool `mapstructure:"require-f-funcs"` + RequireStringMsg bool `mapstructure:"require-string-msg"` } `mapstructure:"formatter"` GoRequire struct { diff --git a/pkg/golinters/testifylint/testdata/fix/in/testifylint.go b/pkg/golinters/testifylint/testdata/fix/in/testifylint.go index a79161f9ca7a..1e93db5bc229 100644 --- a/pkg/golinters/testifylint/testdata/fix/in/testifylint.go +++ b/pkg/golinters/testifylint/testdata/fix/in/testifylint.go @@ -30,7 +30,8 @@ func TestTestifylint(t *testing.T) { assert.Nil(t, err) // want "error-nil: use assert\\.NoError" assert.Equal(t, resultInt, 42) // want "expected-actual: need to reverse actual and expected values" assert.Equal(t, resultFloat, 42.42) // want "float-compare: use assert\\.InEpsilon \\(or InDelta\\)" - assert.Equal(t, len(arr), 10) // want "len: use assert\\.Len" + assert.Equal(t, len(arr), 10) // want "expected-actual: need to reverse actual and expected values" + assert.Equal(t, 10, len(arr)) // want "len: use assert\\.Len" assert.True(t, predicate) assert.Equal(t, resultInt, 1) // want "expected-actual: need to reverse actual and expected values" diff --git a/pkg/golinters/testifylint/testdata/fix/out/testifylint.go b/pkg/golinters/testifylint/testdata/fix/out/testifylint.go index 5d1f101d4e2c..bba789a4ff22 100644 --- a/pkg/golinters/testifylint/testdata/fix/out/testifylint.go +++ b/pkg/golinters/testifylint/testdata/fix/out/testifylint.go @@ -30,6 +30,7 @@ func TestTestifylint(t *testing.T) { assert.NoError(t, err) // want "error-nil: use assert\\.NoError" assert.Equal(t, 42, resultInt) // want "expected-actual: need to reverse actual and expected values" assert.Equal(t, resultFloat, 42.42) // want "float-compare: use assert\\.InEpsilon \\(or InDelta\\)" + assert.Equal(t, 10, len(arr)) // want "expected-actual: need to reverse actual and expected values" assert.Len(t, arr, 10) // want "len: use assert\\.Len" assert.True(t, predicate) diff --git a/pkg/golinters/testifylint/testdata/testifylint.go b/pkg/golinters/testifylint/testdata/testifylint.go index a79161f9ca7a..1e93db5bc229 100644 --- a/pkg/golinters/testifylint/testdata/testifylint.go +++ b/pkg/golinters/testifylint/testdata/testifylint.go @@ -30,7 +30,8 @@ func TestTestifylint(t *testing.T) { assert.Nil(t, err) // want "error-nil: use assert\\.NoError" assert.Equal(t, resultInt, 42) // want "expected-actual: need to reverse actual and expected values" assert.Equal(t, resultFloat, 42.42) // want "float-compare: use assert\\.InEpsilon \\(or InDelta\\)" - assert.Equal(t, len(arr), 10) // want "len: use assert\\.Len" + assert.Equal(t, len(arr), 10) // want "expected-actual: need to reverse actual and expected values" + assert.Equal(t, 10, len(arr)) // want "len: use assert\\.Len" assert.True(t, predicate) assert.Equal(t, resultInt, 1) // want "expected-actual: need to reverse actual and expected values" diff --git a/pkg/golinters/testifylint/testdata/testifylint_cgo.go b/pkg/golinters/testifylint/testdata/testifylint_cgo.go index 8a96b0de3e6c..12ce85fa532a 100644 --- a/pkg/golinters/testifylint/testdata/testifylint_cgo.go +++ b/pkg/golinters/testifylint/testdata/testifylint_cgo.go @@ -46,7 +46,8 @@ func TestTestifylint(t *testing.T) { assert.Nil(t, err) // want "error-nil: use assert\\.NoError" assert.Equal(t, resultInt, 42) // want "expected-actual: need to reverse actual and expected values" assert.Equal(t, resultFloat, 42.42) // want "float-compare: use assert\\.InEpsilon \\(or InDelta\\)" - assert.Equal(t, len(arr), 10) // want "len: use assert\\.Len" + assert.Equal(t, len(arr), 10) // want "expected-actual: need to reverse actual and expected values" + assert.Equal(t, 10, len(arr)) // want "len: use assert\\.Len" assert.True(t, predicate) assert.Equal(t, resultInt, 1) // want "expected-actual: need to reverse actual and expected values" diff --git a/pkg/golinters/testifylint/testdata/testifylint_formatter_dont_require_string_msg.go b/pkg/golinters/testifylint/testdata/testifylint_formatter_dont_require_string_msg.go new file mode 100644 index 000000000000..8f2a7c233a0b --- /dev/null +++ b/pkg/golinters/testifylint/testdata/testifylint_formatter_dont_require_string_msg.go @@ -0,0 +1,16 @@ +//golangcitest:args -Etestifylint +//golangcitest:config_path testdata/testifylint_formatter_dont_require_string_msg.yml +package testdata + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestTestifylint(t *testing.T) { + var b bool + assert.True(t, b, b) + assert.True(t, b, "msg %v", 1) + assert.True(t, b, b, 1) // want "formatter: using msgAndArgs with non-string first element \\(msg\\) causes panic" +} diff --git a/pkg/golinters/testifylint/testdata/testifylint_formatter_dont_require_string_msg.yml b/pkg/golinters/testifylint/testdata/testifylint_formatter_dont_require_string_msg.yml new file mode 100644 index 000000000000..40b18dc8a6e3 --- /dev/null +++ b/pkg/golinters/testifylint/testdata/testifylint_formatter_dont_require_string_msg.yml @@ -0,0 +1,9 @@ +linters-settings: + testifylint: + disable-all: true + enable: + - formatter + formatter: + check-format-string: false + require-f-funcs: false + require-string-msg: false diff --git a/pkg/golinters/testifylint/testdata/testifylint_formatter_only.go b/pkg/golinters/testifylint/testdata/testifylint_formatter_only.go index 0128e55c5089..7934fe7473ee 100644 --- a/pkg/golinters/testifylint/testdata/testifylint_formatter_only.go +++ b/pkg/golinters/testifylint/testdata/testifylint_formatter_only.go @@ -12,8 +12,12 @@ import ( func TestTestifylint(t *testing.T) { var err error var args []any + var b bool assert.Error(t, err, "Parse(%v) should fail.", args) // want "formatter: use assert\\.Errorf$" assert.Equal(t, 1, 2, fmt.Sprintf("msg")) // want "formatter: remove unnecessary fmt\\.Sprintf and use assert\\.Equalf" assert.DirExistsf(t, "", "msg with arg", 42) + + assert.True(t, b, b) // want "formatter: do not use non-string value as first element \\(msg\\) of msgAndArgs" + assert.True(t, b, b, 1) // want "formatter: using msgAndArgs with non-string first element \\(msg\\) causes panic" } diff --git a/pkg/golinters/testifylint/testdata/testifylint_formatter_only.yml b/pkg/golinters/testifylint/testdata/testifylint_formatter_only.yml index 185fc39daedb..c8e82e1726a8 100644 --- a/pkg/golinters/testifylint/testdata/testifylint_formatter_only.yml +++ b/pkg/golinters/testifylint/testdata/testifylint_formatter_only.yml @@ -6,3 +6,4 @@ linters-settings: formatter: check-format-string: false require-f-funcs: true + require-string-msg: true diff --git a/pkg/golinters/testifylint/testifylint.go b/pkg/golinters/testifylint/testifylint.go index b3f2f0bd4697..70930da45107 100644 --- a/pkg/golinters/testifylint/testifylint.go +++ b/pkg/golinters/testifylint/testifylint.go @@ -19,6 +19,7 @@ func New(settings *config.TestifylintSettings) *goanalysis.Linter { "bool-compare.ignore-custom-types": settings.BoolCompare.IgnoreCustomTypes, "formatter.require-f-funcs": settings.Formatter.RequireFFuncs, + "formatter.require-string-msg": settings.Formatter.RequireStringMsg, "go-require.ignore-http-handlers": settings.GoRequire.IgnoreHTTPHandlers, } if len(settings.EnabledCheckers) > 0 { diff --git a/test/testshared/runner.go b/test/testshared/runner.go index 72317696c6a3..3cf9aad066e4 100644 --- a/test/testshared/runner.go +++ b/test/testshared/runner.go @@ -279,7 +279,7 @@ type RunnerResult struct { func (r *RunnerResult) ExpectNoIssues() { r.tb.Helper() - assert.Equal(r.tb, "", r.output, "exit code is %d", r.exitCode) + assert.Empty(r.tb, r.output, "exit code is %d", r.exitCode) assert.Equal(r.tb, exitcodes.Success, r.exitCode, "output is %s", r.output) }