什么会导致 devtools::document() 和 devtools::lint() 停止识别导入?

What can cause devtools::document() and devtools::lint() to stop recognizing imports?

我正在修改我的 R 包,突然 document() 停止识别我正在使用 @importFrom 的功能。我可以使用我的包的唯一方法是在包名称前加上前缀(例如 stringr::str_detect)。因为我有很多这些,所以这花了很长时间。这在我删除我的 NAMESPACE 文件后开始发生,因为我不小心留下了一个 @importFrom 空白。 devtools::document() 对于我的其他项目来说似乎仍然可以正常工作。我注意到 lint() 也看到了这些假问题。

我将包文件保存在版本控制中,但还没有发现任何明显的停止工作的原因。什么样的文本错误会导致这种情况?

一些例子:

我有以下代码块在我的包中定义了一个实用函数:

#' Check if string ends with y.
#' @param x String.
#' @param y String Scalar.
#' @importFrom stringr str_sub str_length
str_ends_with <- function(x, y) {
  stopifnot(length(y) == 1)
  leny <- str_length(y)
  lenx <- str_length(x)
  ifelse(lenx < leny, FALSE,
         str_sub(x, start = lenx - leny + 1) == y)
}

然而,lint() 看到

R/util.R:69:11: warning: no visible global function definition for 'str_length'
  leny <- str_length(y)
          ^~~~~~~~~~
R/util.R:70:11: warning: no visible global function definition for 'str_length'
  lenx <- str_length(x)
          ^~~~~~~~~~

调用 roxygen2::roxygenize() 成功创建了一个新的 NAMESPACE 文件。通常 devtools::document() 通常可以做到这一点,但显然不是我的情况。但是,document() 之后会按预期工作。