136 lines
3.8 KiB
YAML
136 lines
3.8 KiB
YAML
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
rules:
|
|
# Check `require` or `assert` testify overrides.
|
|
# https://semgrep.dev/s/PgAq
|
|
- id: "tests-no-testify-override"
|
|
patterns:
|
|
- pattern-either:
|
|
- pattern: "assert := assert.New(($T : *testing.T))"
|
|
- pattern: "require := require.New(($T : *testing.T))"
|
|
message: "Override of testify package"
|
|
languages:
|
|
- "go"
|
|
severity: "WARNING"
|
|
# TODO(luiz): figure out how to do a 'delete line' fix.
|
|
fix: " "
|
|
paths:
|
|
exclude: ["*"]
|
|
include:
|
|
- "*_test.go"
|
|
|
|
# Check `assert` and `require` calls without `t` as first argument.
|
|
# https://semgrep.dev/s/wZW0
|
|
- id: "tests-no-assert-without-t"
|
|
patterns:
|
|
- pattern: "assert.$FUNC($...ARGS)"
|
|
- pattern-not: "assert.$FUNC($T,...)"
|
|
- pattern-inside: |
|
|
func $TEST_FUNC($T *testing.T) {
|
|
...
|
|
}
|
|
# Nested functions have a different signature, so they are tested in a
|
|
# different rule.
|
|
- pattern-not-inside: |
|
|
$T.Run(..., func(...) {
|
|
...
|
|
})
|
|
- metavariable-pattern:
|
|
metavariable: $FUNC
|
|
patterns:
|
|
# Calls to `New` are checked in `tests-no-testify-override`.
|
|
- pattern-not: New
|
|
message: "Calling `assert.$FUNC` without `$T`"
|
|
languages:
|
|
- "go"
|
|
severity: "WARNING"
|
|
fix: "assert.$FUNC($T, $...ARGS)"
|
|
paths:
|
|
exclude: ["*"]
|
|
include:
|
|
- "*_test.go"
|
|
- id: "tests-no-assert-without-t-nested"
|
|
patterns:
|
|
- pattern: "assert.$FUNC($...ARGS)"
|
|
- pattern-not: "assert.$FUNC($T,...)"
|
|
- pattern-inside: |
|
|
($T_ROOT : *testing.T).Run(..., func($T *testing.T) {
|
|
...
|
|
})
|
|
- metavariable-pattern:
|
|
metavariable: $FUNC
|
|
patterns:
|
|
# Calls to `New` are checked in `tests-no-testify-override`.
|
|
- pattern-not: New
|
|
message: "Calling `assert.$FUNC` without `$T`"
|
|
languages:
|
|
- "go"
|
|
severity: "WARNING"
|
|
fix: "assert.$FUNC($T, $...ARGS)"
|
|
paths:
|
|
exclude: ["*"]
|
|
include:
|
|
- "*_test.go"
|
|
- id: "tests-no-require-without-t"
|
|
patterns:
|
|
- pattern: "require.$FUNC($...ARGS)"
|
|
- pattern-not: "require.$FUNC($T,...)"
|
|
- pattern-inside: |
|
|
func $TEST_FUNC($T *testing.T) {
|
|
...
|
|
}
|
|
# Nested functions have a different signature, so they are tested in a
|
|
# different rule.
|
|
- pattern-not-inside: |
|
|
$T.Run(..., func(...) {
|
|
...
|
|
})
|
|
- metavariable-pattern:
|
|
metavariable: $FUNC
|
|
patterns:
|
|
# Calls to `New` are checked in `tests-no-testify-override`.
|
|
- pattern-not: New
|
|
message: "Calling `require.$FUNC` without `$T`"
|
|
languages:
|
|
- "go"
|
|
severity: "WARNING"
|
|
fix: "require.$FUNC($T, $...ARGS)"
|
|
paths:
|
|
exclude: ["*"]
|
|
include:
|
|
- "*_test.go"
|
|
- id: "tests-no-require-without-t-nested"
|
|
patterns:
|
|
- pattern: "require.$FUNC($...ARGS)"
|
|
- pattern-not: "require.$FUNC($T,...)"
|
|
- pattern-inside: |
|
|
($T_ROOT : *testing.T).Run(..., func($T *testing.T) {
|
|
...
|
|
})
|
|
- metavariable-pattern:
|
|
metavariable: "$FUNC"
|
|
patterns:
|
|
# Calls to `New` are checked in `tests-no-testify-override`.
|
|
- pattern-not: "New"
|
|
message: "Calling `require.$FUNC` without `$T`"
|
|
languages:
|
|
- "go"
|
|
severity: "WARNING"
|
|
fix: "require.$FUNC($T, $...ARGS)"
|
|
paths:
|
|
exclude: ["*"]
|
|
include:
|
|
- "*_test.go"
|
|
- id: "tests-no-parallel"
|
|
patterns:
|
|
- pattern: "t.Parallel()"
|
|
message: "Use ci.Parallel(t) instead of t.Parallel()"
|
|
languages:
|
|
- "go"
|
|
severity: "WARNING"
|
|
fix: "ci.Parallel(t)"
|
|
paths:
|
|
include:
|
|
- "*_test.go"
|