mgechev/revive

extend testing machinery to allow more precise checks

オープン

#424 opened on 2020/05/20

 (0 件のコメント) (1 件のリアクション) (0 人の担当者)Go (316 件のフォーク)github user discovery
help wantedlow priority

Repository metrics

Stars
 (5,517 個のスター)
PR merge metrics
 (平均マージ 10h 48m) (30d で 3 merged PRs)

説明

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

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