lintr icon indicating copy to clipboard operation
lintr copied to clipboard

New lint: `pkg_namespace_usage_linter`

Open pawelru opened this issue 11 months ago • 1 comments

As a package maintainer I would like to know whether my declared imports in the DESCRIPTION file are actually used in the code.

I managed to find a great third-party package checkglobals that does similar thing and this is a dummy script executed on one of those packages

x_deps_in_desc <- desc::desc_get_deps() |> subset(x = _, type %in% pkgdepends::as_pkg_dependencies("hard")$direct) |> _$package
x_deps_in_code <- as.data.frame(checkglobals::check_pkg()) |> _$package |> unique()
setdiff(x_deps_in_desc, x_deps_in_code) # this should be empty
#> [1] "R"             "GenomeInfoDb"  "GenomicRanges" "scda"         
#> [5] "teal.logger"   "teal.reporter"
search() # just to show no side effects
#>  [1] ".GlobalEnv"        "package:stats"     "package:graphics" 
#>  [4] "package:grDevices" "package:utils"     "package:datasets" 
#>  [7] "package:methods"   "Autoloads"         "tools:callr"      
#> [10] "package:base"

This obviously does not follow how lints are written but I can move it forward. More importantly, I would like to ask how does it fit lintr as a whole? This feels more like a validation on the package level as opposed to individual scripts? How to report issues as I cannot point to the script line of code that is wrong but rather DESCRIPTION file. I am interested in hearing your thoughts on that. The bottom line is that I can create my own GHAction for that but from my perspective I would like to avoid creating so many testing functionalities and I would like to reuse an open engine of lintr if possible.

(CC @m7pr)

pawelru avatar Sep 08 '23 12:09 pawelru