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 >