golang linter 总是抱怨
golang linter always complains
问:如何解决 ireturn
和 nolintlint
linter 之间的疯狂问题?
详情:
我有一个带有这个签名的 Golang 函数
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
当我 运行 golangci-lint v1.43.0 它报告
golangci-lint run
oidc/token_utils.go:19:1: NewClientCredentialsTokenSource returns interface (golang.org/x/oauth2.TokenSource) (ireturn)
func NewClientCredentialsTokenSource(
由于该函数只有两个 return 参数,因此很容易推断出它在抱怨 oauth2.TokenSource
而不是 error
.
NewClientCredentialsTokenSource
调用的下游函数 return 是 oauth2.TokenSource
的一个实例,所以我没有 return 的具体类型。我别无选择,只能 return oauth2.TokenSource
界面。
所以我像这样向函数添加了一个 lint 异常:
//nolint:ireturn
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
您认为这应该可以解决问题,但不是!现在报告了一个新的 lint 问题:
golangci-lint run
oidc/token_utils.go:19:1: directive `//nolint:ireturn` is unused for linter "ireturn" (nolintlint)
//nolint:ireturn
所以现在我在追我的尾巴。 ireturn
抱怨我正在 return 界面。我为该函数添加了一个例外,结果 nolintlint
抱怨我有一个不适用的例外。
男人要做什么?
您可以将接口添加到 ireturn
的允许接口列表中。
ireturn --allow="golang.org/x/oauth2.TokenSource"
或通过 .golangci.yml
中的 linter-settings
部分
linters-settings:
ireturn:
allow:
- golang.org/x/oauth2.TokenSource
我尝试按照 Nico Huysamen 的建议添加允许规则,但这打开了一堆蠕虫。最后我还是想相信 ireturn
linter 并且还不想禁用它。我认为解决此问题的最简洁方法是为两个 linter 添加一个例外,ireturn
和 nolintlint
,如下所示:
//nolint:nolintlint,ireturn
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
2022 年 5 月 25 日更新:
也许更好的解决方案如下所示。出于某种原因,ireturn
异常必须进入 内部 函数签名。
func NewPasswordGrantTokenSource( //nolint:ireturn
issuer string,
clientId string,
clientSecret string,
username string,
password string,
scope []string,
) (oauth2.TokenSource, error) {
问:如何解决 ireturn
和 nolintlint
linter 之间的疯狂问题?
详情:
我有一个带有这个签名的 Golang 函数
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
当我 运行 golangci-lint v1.43.0 它报告
golangci-lint run
oidc/token_utils.go:19:1: NewClientCredentialsTokenSource returns interface (golang.org/x/oauth2.TokenSource) (ireturn)
func NewClientCredentialsTokenSource(
由于该函数只有两个 return 参数,因此很容易推断出它在抱怨 oauth2.TokenSource
而不是 error
.
NewClientCredentialsTokenSource
调用的下游函数 return 是 oauth2.TokenSource
的一个实例,所以我没有 return 的具体类型。我别无选择,只能 return oauth2.TokenSource
界面。
所以我像这样向函数添加了一个 lint 异常:
//nolint:ireturn
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
您认为这应该可以解决问题,但不是!现在报告了一个新的 lint 问题:
golangci-lint run
oidc/token_utils.go:19:1: directive `//nolint:ireturn` is unused for linter "ireturn" (nolintlint)
//nolint:ireturn
所以现在我在追我的尾巴。 ireturn
抱怨我正在 return 界面。我为该函数添加了一个例外,结果 nolintlint
抱怨我有一个不适用的例外。
男人要做什么?
您可以将接口添加到 ireturn
的允许接口列表中。
ireturn --allow="golang.org/x/oauth2.TokenSource"
或通过 .golangci.yml
linter-settings
部分
linters-settings:
ireturn:
allow:
- golang.org/x/oauth2.TokenSource
我尝试按照 Nico Huysamen 的建议添加允许规则,但这打开了一堆蠕虫。最后我还是想相信 ireturn
linter 并且还不想禁用它。我认为解决此问题的最简洁方法是为两个 linter 添加一个例外,ireturn
和 nolintlint
,如下所示:
//nolint:nolintlint,ireturn
func NewClientCredentialsTokenSource(
issuer string,
clientId string,
clientSecret string,
scope []string,
) (oauth2.TokenSource, error) {
2022 年 5 月 25 日更新:
也许更好的解决方案如下所示。出于某种原因,ireturn
异常必须进入 内部 函数签名。
func NewPasswordGrantTokenSource( //nolint:ireturn
issuer string,
clientId string,
clientSecret string,
username string,
password string,
scope []string,
) (oauth2.TokenSource, error) {