如何阻止object_*_linter对字符串字面量生效?
解决lintr中object_name_linter/object_length_linter误判字符串字面量的问题
首先明确:这不是你遗漏了设置,而是当前版本lintr的这两个linter存在行为偏差,会错误地将字符串字面量(比如打印消息、文件名)纳入检查范围。
你可以通过以下几种方式解决:
1. 自定义linter,排除字符串字面量
基于原linter逻辑,添加过滤条件,只对真正的对象名(变量名、函数名、参数名等)生效。以object_name_linter为例,自定义代码如下:
library(lintr) custom_object_name_linter <- function() { modify_linter( object_name_linter(), condition = function(node) { node$type != "STR_CONST" } ) } # 同理修改object_length_linter custom_object_length_linter <- function() { modify_linter( object_length_linter(), condition = function(node) { node$type != "STR_CONST" } ) }
之后在你的lintr配置(比如.lintr文件)中,用自定义linter替换原有规则:
linters: custom_object_name_linter: true custom_object_length_linter: true
2. 针对性排除特定场景
如果自定义linter太麻烦,可以在.lintr中添加规则排除特定模式的字符串检查。比如针对print()函数中的字符串:
linters: object_name_linter: true object_length_linter: true exclusions: - pattern: "^print\\(\"[^\"]+\"\\)$" linters: [object_name_linter, object_length_linter]
这种方式适合场景固定的情况,但通用性较差。
3. 临时停用规则(备选)
如果上述方法都不适用,再考虑临时停用这两个规则,直到lintr官方修复该问题:
linters: object_name_linter: false object_length_linter: false
另外,你可以在lintr的官方代码仓库提交issue,反馈这个误判问题,推动官方优化linter的作用范围。
内容的提问来源于stack exchange,提问作者William Denny
相关产品推荐
相关产品推荐

