在 lintr::lint 中指定 linter

Specify linters in lintr::lint

我不知道如何使用 lintr 关闭特定的 linter。文档提供了一个示例(for vim/syntastic,这是我正在使用的),它不是很清楚:

let g:syntastic_r_lintr_linters = "with_defaults(line_length_linter(120))"

显然这只是更改默认值。我需要在这里列出我想使用的所有 linter 吗?有没有办法只排除一对夫妇?

我假设有类似的东西

let g:syntastic_r_lintr_linters_nonportable_path_linter = 0

但我找不到正确的语法。

显然 g:syntastic_r_lintr_linters 应该是 linter 列表。但不清楚应该使用什么语法。

如果我们忘记 vim 语法并直接转到 R 包 lintr(vim/syntastic 调用)和 [=16= 的 linters 参数] 那么这有效:

lint(file.R, linters=assignment_linter)

这不是(没有错误,但不会捕获代码中的错误):

lint(file.R, linters=list(assignment_linter, single_quotes_linter))

这个也不行(报错):

lint(file.R, linters=list('assignment_linter', 'single_quotes_linter'))

但这确实:

lint('file.R',linters=list('assignment_linter'=assignment_linter,'single_quotes_linter'=single_quotes_linter))

所以也许它应该是一个命名列表?

关闭特定 linter 的正确语法是将此(例如)添加到 vimrc:

let g:syntastic_r_lintr_linters = "with_defaults(single_quotes_linter=NULL)"

这不在文档中。我不得不在 github 上挖掘一些旧的(已关闭的)问题才能找到它。

此外,lintr::lint 确实希望 linters 参数有一个命名列表,但现在将接受一个未命名列表(参见 https://github.com/jimhester/lintr/issues/224)。所以这应该可以从头开始制作列表:

let g:syntastic_r_lintr_linters = "list(assignment_linter, single_quotes_linter")