Duncan Murdoch
2023-Feb-06 18:59 UTC
[Rd] Unnecessary note when import only used in arg definition
I think the usual rule is that a qualified use of a package is sufficient to suppress the warning without any entry in the NAMESPACE file. So if there isn't something else going on, Antoine's example illustrates a bug (or at least an inconsistency) in the check code. Here's a version of your example that doesn't import anything from rlang using the NAMESPACE, but uses it in code: https://github.com/dmurdoch/imports.example/tree/explicituse And here's one like Antoine's, where the only use is in a default value: https://github.com/dmurdoch/imports.example/tree/defaultvalue The first one tests clean, the second one gives the note he was talking about: ? checking dependencies in R code ... NOTE Namespace in Imports field not imported from: ?rlang? All declared Imports should be used. Duncan On 06/02/2023 1:03 p.m., Kevin Ushey wrote:> Hi Antoine, > > Maybe I'm misunderstanding, but I think the warning is saying that > you've declared the package dependency in the DESCRIPTION file, but > you haven't actually imported the package (or any functions) in your > package NAMESPACE file? > > I put together an example package that I think satisfies the point > you're describing, and I don't see any R CMD check warnings (using R > 4.2.2). > > https://github.com/kevinushey/imports.example > > As I understand it, if you declare a package dependency in the > DESCRIPTION file, you need to clarify how you're using the package in > the NAMESPACE file -- e.g. what symbols you want to import, and so on. > > Best, > Kevin > > On Mon, Feb 6, 2023 at 6:43 AM Antoine Fabri <antoine.fabri at gmail.com> wrote: >> >> Dear r-devel, >> >> When a package is only used in an argument definition, e.g : >> >> >> f <- function(test = testthat::is_testing()) { >> >> if (test) 1 else 2 >> >> } >> >> >> R CMD CHECK gives us a note: "Namespace in Imports field not imported from: >> 'testthat'" >> >> >> This incites me to remove the package from the Imports field but that'll >> make my package brittle. >> >> >> I noted I'm not the first one having the issue ( >> https://github.com/r-lib/devtools/issues/2456 ) and I've seen some >> workarounds too, in particular Hadley Wickham suggests in 'R packages' to >> use the following construct : >> >> >> ignore_unused_imports <- *function*() { >> >> aaapkg::aaa_fun >> >> } >> >> >> That's far from obvious though, and not very satisfying. >> >> Are there any downside to removing this note in this scenario? it makes >> little sense to me and incites wrong behaviour AFAIU. >> >> >> Thanks, >> >> >> Antoine >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Duncan Murdoch
2023-Feb-06 19:31 UTC
[Rd] Unnecessary note when import only used in arg definition
On 06/02/2023 1:59 p.m., Duncan Murdoch wrote:> I think the usual rule is that a qualified use of a package is > sufficient to suppress the warning without any entry in the NAMESPACE > file. So if there isn't something else going on, Antoine's example > illustrates a bug (or at least an inconsistency) in the check code.Here's where the problem arises: https://github.com/r-devel/r-svn/blob/7a2207dad15b8eed8c3d1c5cc49f29d431c289bd/src/library/tools/R/QC.R#L2105 with code if(is.call(e) || is.expression(e)) { While examining a function definition, the arguments are stored in a pairlist. The test is looking for a call or an expression, and a pairlist isn't any of those, so it skips over it. I think it would work properly if that line was changed to if(is.call(e) || is.expression(e) || is.pairlist(e)) { because then it would iterate over the arguments, and would find the use of a package in a default value. Duncan Murdoch> > Here's a version of your example that doesn't import anything from rlang > using the NAMESPACE, but uses it in code: > > https://github.com/dmurdoch/imports.example/tree/explicituse > > And here's one like Antoine's, where the only use is in a default value: > > https://github.com/dmurdoch/imports.example/tree/defaultvalue > > The first one tests clean, the second one gives the note he was talking > about: > > ? checking dependencies in R code ... NOTE > Namespace in Imports field not imported from: ?rlang? > All declared Imports should be used. > > Duncan > > On 06/02/2023 1:03 p.m., Kevin Ushey wrote: >> Hi Antoine, >> >> Maybe I'm misunderstanding, but I think the warning is saying that >> you've declared the package dependency in the DESCRIPTION file, but >> you haven't actually imported the package (or any functions) in your >> package NAMESPACE file? >> >> I put together an example package that I think satisfies the point >> you're describing, and I don't see any R CMD check warnings (using R >> 4.2.2). >> >> https://github.com/kevinushey/imports.example >> >> As I understand it, if you declare a package dependency in the >> DESCRIPTION file, you need to clarify how you're using the package in >> the NAMESPACE file -- e.g. what symbols you want to import, and so on. >> >> Best, >> Kevin >> >> On Mon, Feb 6, 2023 at 6:43 AM Antoine Fabri <antoine.fabri at gmail.com> wrote: >>> >>> Dear r-devel, >>> >>> When a package is only used in an argument definition, e.g : >>> >>> >>> f <- function(test = testthat::is_testing()) { >>> >>> if (test) 1 else 2 >>> >>> } >>> >>> >>> R CMD CHECK gives us a note: "Namespace in Imports field not imported from: >>> 'testthat'" >>> >>> >>> This incites me to remove the package from the Imports field but that'll >>> make my package brittle. >>> >>> >>> I noted I'm not the first one having the issue ( >>> https://github.com/r-lib/devtools/issues/2456 ) and I've seen some >>> workarounds too, in particular Hadley Wickham suggests in 'R packages' to >>> use the following construct : >>> >>> >>> ignore_unused_imports <- *function*() { >>> >>> aaapkg::aaa_fun >>> >>> } >>> >>> >>> That's far from obvious though, and not very satisfying. >>> >>> Are there any downside to removing this note in this scenario? it makes >>> little sense to me and incites wrong behaviour AFAIU. >>> >>> >>> Thanks, >>> >>> >>> Antoine >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-devel at r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel >