脚本宝典收集整理的这篇文章主要介绍了Go语言的快速,可扩展,可配置和美观的linter,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
gofmt
已经为我挑选了标签。我也注意到了golint
。它是一种强制语义和语法实践的工具。golint
我用过的东西与大多数东西不同:
golint
失败中有一定程度的信心。有时失败是假阴性。deadcode
,gocyclo
,check
,errcheck
,megacheck
,dupl
,ineffassign
,interfacer
,unconvert
,goconst
,等)gometalinter
通过在内部调用它们并消耗其输出来包装大多数现有工具。该工具提供了一种过滤生成的报告的方法Revive
实现了所有这些规则golint
已经和失败都认为“信心”同样的概念golint
引入。事实上,revive
没有标志的调用具有相同的行为golint
,不同之处在于它运行得更快。Revive
建立在golint
:
golint
仅允许生成的文件。Revive
提供了更多的规则golint
。Revive
跑得快。它在单独的goroutine中运行每个文件的规则。revive
,通过定义更多自以为是的规则并提供更严格的预设,我们可以使更多与语法相关的参数无关紧要。
稍后,我将解释如何快速制定更多规则,revive
但在此之前,让我分享一些关于如何使用短绒的说明!
revive
:
go get github.COM/mgechev/revive
revive
二进制文件$GOPATH/bin
。
使用没有标志的工具具有与之相同的行为golint
。当我们添加-formatter
标志时会发生魔力:
从上图中我们可以看到,我们得到了31条警告"exported"
。此规则是内置规则的端口,golint
从中强制执行导出符号的实践(在此处查找完整的规则集)。
如果我们更喜欢忽略整个项目的这些警告,我们可以使用TOML格式的配置文件:
如果我们要仅为部分文件禁用特定规则,该怎么办?在这种情况下,我们可以使用以下技术:
package models
//revive:disable
type ExPression struct {
Value string
IsStar bool
IsVARiadic bool
IsWriter bool
Underlying string
}
//revive:enable
revive
整个结构的所有规则。如果我们更喜欢只禁用exported
规则,我们应该使用:
package models
//revive:disable:exported
type ExPRession struct {
Value string
IsStar bool
IsVariadic bool
IsWriter bool
Underlying string
}
//revive:enable:exported
// revive:
语法。
最后,如果我们想忽略目录中的所有文件,我们可以使用-exclude
标志:
revive -exclude tests/... ./...
tests
递归地从当前目录中删除所有文件,不包括所有文件。如果我们想要排除多个目录使用:
revive -exclude tests/... -exclude utils/... ./...
revive
。这是一个示例配置文件:
# Ignores files with "GENERATED" header, similar to golint
ignoreGeneratedHeader = true
# Sets the default severity to "warning"
severity = "warning"
# Sets the default failure confidence. The SEMantics behind this property
# is that revive ignores all failures with a confidence level below 0.8.
confidence = 0.8
# Sets the error code for failures with severity "error"
errorCode = 0
# Sets the error code for failures with severity "warning"
warningCode = 0
# configuration of the `cyclomatic` rule. Here we specify that
# the rule should fail if it detects code with higher complexity than 10.
[rule.cyclomatic]
arguments = [10]
# Sets the severity of the `package-comments` rule to "error".
[rule.package-comments]
severity = "error"
ignoreGeneratedHeader
- golint
忽略具有标题的文件GENERATED
。要禁用此行为,请将标志设置为false
。severity
- revive
有两种类型的严重性 - warning
和error
。通过这种方式,我们可以区分具有高置信度的关键故障和具有较低置信度的关confidence
- 类似地golint
,revive
让我们为可能返回漏报的规则分配置信度。该confidence
属性允许我们在给定的置信水平下过滤失败。errorCode
和warningCode
-这两个属性让我们有不同的严重程度不同的返回码。我们可能希望您的错误无法通过CI,但我们的警告不会。-buildmode=plugin
对已知问题的支持非常有限。
忽略此限制,还有另外两种简单的方法可以添加新规则并针对您的代码运行它们:
revive
做出贡献- 对外部贡献开放。如果规则有意义并且通过了单元测试,那么欢迎成为其中的一部分revive
!最重要的是,创建一个新规则只是实现这个简单的接口:revive
而不是将它们推向上游。只需确保您偶尔将代码与上游同步,以获取所有新功能和错误修复程序!arguments-limit
可以在此处找到示例实现。
格式化程序怎么样?
好吧,创建一个新的格式化器就像创建一个新规则一样简单。只需实现以下界面:
type Formatter interface {
Format(<-chan Failure, RulesConfig) (string, error)
Name() string
}
golint
和revive
。这是我在运行两个短线后发现的kubernetes
:
time golint be/…
real 0m25.389s
user 0m29.221s
Sys 0m3.065s
time revive be/…
real 0m6.524s
user 0m22.882s
sys 0m1.114s
revive
在单独的goroutine中提取单个文件,因此它优于golint
大约4次。
Revive
是一款简单,快速,可配置,可扩展,灵活,美观的Go。它在单独的goroutine中的每个文件的顶部运行linting规则,显着提高了性能。Revive
让我们配置各个规则并为整个项目,单个文件或文件中的行范围禁用它们。最后但并非最不重要的是,revive
让我们使用一组内置格式化程序,以易于理解,易于访问和易于使用的格式输出故障。
该项目不断发展,并以新规则,格式化程序或错误修复的形式开放新的贡献!如果您想创建一个更严格的linting预设,将团队中的编码风格讨论减少到最少,并专注于基本的事情,revive
可能会有所帮助。
以上是脚本宝典为你收集整理的Go语言的快速,可扩展,可配置和美观的linter全部内容,希望文章能够帮你解决Go语言的快速,可扩展,可配置和美观的linter所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。