mgechev/revive

extend testing machinery to allow more precise checks

Open

#424 创建于 2020年5月20日

在 GitHub 查看
 (0 评论) (1 反应) (0 负责人)Go (316 fork)github user discovery
help wantedlow priority

仓库指标

Star
 (5,517 star)
PR 合并指标
 (PR 指标待抓取)

描述

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

贡献者指南