On 10/04/2016 05:09 PM, Martin Morgan wrote:
On 10/04/2016 05:07 PM, McDavid, Andrew wrote:
BiocCheck throws a warning when a package is listed as Imports: in
DESCRIPTION but not used in the NAMESPACE. This may happen when a
developer uses the fully qualified names of objects within a package.
I am unclear as to the rationale for this warning.
agree it's wrong. can you point to an example? Martin
I updated BiocCheck to be smarter about this; I'm not sure when this
will propagate to the single package builder. It doesn't complain about
Imports: in the DESCRIPTION file if the package is used in the NAMESPACE
or :: or :::. The code is kind of fun, using the codetools package:
library(codetools)
.checkEnv <- function(env, walker) {
## look at all closures in 'env' using codetools-derived 'walker'
for (n in ls(env, all.names = TRUE)) {
v <- get(n, envir = env)
if (typeof(v) == "closure")
walkCode(body(v), walker)
}
walker
}
.colonWalker <- function() {
## record all pkg used as pkg::foo or pkg:::bar
PKGS <- character()
collector <- function(e, w)
PKGS <<- append(PKGS, as.character(e[[2]]))
list(handler=function(v, w) {
switch(v, "::"=collector, ":::"=collector, NULL)
}, call=function(e, w) {
for (ee in as.list(e)) if (!missing(ee)) walkCode(ee, w)
}, leaf = function(e, w) {
NULL
}, done = function() {
sort(unique(PKGS))
})
}
> library(codetools)
> .checkEnv(loadNamespace("IRanges"), .colonWalker())$done()
[1] "base" "BiocGenerics" "S4Vectors"
Martin
Per Hadley:
It's common for packages to be listed in Imports in DESCRIPTION, but
not in NAMESPACE. In fact, this is what I recommend: list the package
in DESCRIPTION so that it's installed, then always refer to it
explicitly with pkg::fun(). Unless there is a strong reason not to,
it's better to be explicit. It's a little more work to write, but a
lot easier to read when you come back to the code in the future.
Per R extensions:
If a package only needs a few objects from another package it can use
a fully qualified variable reference in the code instead of a formal
import. A fully qualified reference to the function f in package foo
is of the form foo::f.
-Andrew
[[alternative HTML version deleted]]
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel
This email message may contain legally privileged and/or...{{dropped:2}}
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel
This email message may contain legally privileged and/or...{{dropped:2}}
_______________________________________________
Bioc-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel