mgechev/revive

extend testing machinery to allow more precise checks

Open

#424 opened on 2020年5月20日

GitHub で見る
 (0 comments) (1 reaction) (0 assignees)Go (316 forks)github user discovery
help wantedlow priority

Repository metrics

Stars
 (5,517 stars)
PR merge metrics
 (PR metrics pending)

説明

Rules are tested through a tiny mechanism where rules are executed on source files with annotations describing the expected failures. For example:

package fixtures

func foo(a, b, c, d int) {
	a = 1.0 // ignore
	b = "ignore"
	c = 2              // ignore
	println("lit", 12) // MATCH /avoid magic numbers like '12', create a named constant for it/
	if a == 12.50 {    // MATCH /avoid magic numbers like '12.50', create a named constant for it/
		if b == "lit" {
			c = "lit" // MATCH /string literal "lit" appears, at least, 3 times, create a named constant for it/
		}
		for i := 0; i < 1; i++ {
			println("lit")
		}
	}
}

The test machinery will check if the rule produced a failure at the line annotated with // MATCH and will also check that the message of the failure matches that of the annotation.

This approach works fine for almost all cases but it has its limitations: only the message attribute of the failure can be checked. We have no mean to check other attributes of the failure (for example, testing the fix for #416 needs to check that a failure has a certain confidence)

It could be interesting to extend the current testing mechanism to allow checking on any failure property

コントリビューターガイド