为什么lintr说“警告:全局变量'Cloaked'没有可见的绑定“?

nwlqm0z1  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(91)

我相信这是我的一个误解,因为我不是一个真正的R程序员。
我的代码在这里:https://gist.github.com/bnsh/3839c4eb2c6b31e32c39ec312014b2b8

#! /usr/bin/env Rscript

library(R6)

Cloaked <- R6::R6Class("Cloaked",
  public = list(
    msg = function() {
      return(paste(
        "this code _works_, but lintr (https://github.com/jimhester/lintr)",
        "complains that cloak_class.R:19:8: warning: no visible binding for",
        "global variable ‘Cloaked’ when I try to use Cloaked within a",
        "function. It's fine tho, if I use it _outside_ a function."
      ))
    }
  )
)

main <- function() {
  c <- Cloaked$new()
  c$msg()
}

main()

字符串
它工作...但是,lintr抱怨:“cloak_class.R:19:8:警告:全局变量'Cloaked'没有可见的绑定“
实际上,这不是关于一个类,真的,因为这也抱怨:

#! /usr/bin/env Rscript

cloaked <- function() {
  return(paste(
    "this code _works_, but lintr (https://github.com/jimhester/lintr)",
    "complains that cloak_function.R:13:3: warning: no visible global",
    "function definition for ‘cloaked’ when I try to use cloaked within",
    "a function. It's fine tho, if I use it _outside_ a function."
  ))
}

main <- function() {
  cloaked()
}

main()


这段代码也可以运行,但lintr说:cloak_function.R:13:3:警告:“cloaked”没有可见的全局函数定义
为什么?做一些钝工具,如# nolint start/# nolint end,我能做些什么来满足lintr?
谢谢你,谢谢

jucafojl

jucafojl1#

我刚开始使用lintr,遇到了同样的问题。这似乎是一个bug。
https://github.com/REditorSupport/atom-ide-r/issues/7和实际问题https://github.com/jimhester/lintr/issues/27
目前唯一的解决方法(除了修复lintr中的bug)是禁用对象linter(这并不理想,因为它不会捕获这种形式的真正错误)。例如。

with_defaults(object_usage_linter=NULL)

字符串
(我不认为linter的对象用法是针对脚本的,而是针对包的--据我所知,要工作,它将评估整个脚本(!)查看定义了哪些全局变量。对于一个R文件都是函数定义的包来说,这很好,但是对于一个脚本来说,你并不想在每次lint文件时运行整个脚本。

c3frrgcw

c3frrgcw2#

在lintr函数中使用linters参数:

lint("myfile.R", linters = linters_with_defaults(
  object_length_linter = NULL,
  object_name_linter = NULL,
  object_usage_linter = NULL))

字符串
或者使用项目文件夹(工作目录)中的.lintr文件

linters: linters_with_defaults(
    line_length_linter(140), 
    commented_code_linter = NULL,
    object_name_linter = NULL,
    object_usage_linter = NULL,
    brace_linter = NULL,
    object_length_linter = NULL
  )

相关问题