Closed dpprdan closed 3 years ago
I think probably it would be best to use rmarkdown::find_pandoc()
for this and only do it conditional on the presence of the rmarkdown
and withr
packages.
I've used Sys.getenv("RSTUDIO_PANDOC")
over rmarkdown::find_pandoc()
in https://github.com/r-lib/rcmdcheck/pull/132, because rmarkdown::find_pandoc()
effectively only adds ~/opt/pandoc/
as a search location for pandoc at the cost of its dependency:
this function searches for pandoc from the environment variable
RSTUDIO_PANDOC
(the RStudio IDE will set this variable to the directory of Pandoc bundled with the IDE), the environment variablePATH
, and the directory~/opt/pandoc/
https://rmarkdown.rstudio.com/docs/reference/find_pandoc.html
But maybe ~/opt/pandoc/
is more relevant than I realise. (I.e. this is just a note, either approach is fine).
I am a bit worried that it is easy to miss that certain docs are not checked, if you don't have the right packages installed (re: your suggestion to make this conditional). CRAN will check those docs either way. To put it more bluntly: what's the use of an incomplete URL check? So should there generally be messages/warnings about which docs were (not) checked?
Ok, you could use something like this to also avoid the withr dependency, which I would prefer.
with_pandoc_path <- function(code) {
pandoc_path <- Sys.getenv("RSTUDIO_PANDOC")
if (nzchar(pandoc_path)) {
old_path <- Sys.getenv("PATH")
Sys.setenv("PATH", file.path(pandoc_path, old, sep = .Platform$path.sep))
on.exit(Sys.setenv("PATH", old_path))
}
pandoc_location <- Sys.which("pandoc")
if (!nzchar(pandoc_location)) {
stop("pandoc not found!")
}
force(code)
}
At least on Windows Pandoc (as installed by RStudio) is unlikely to be on the system PATH, which means that URLs in Rmds and READMEs are not checked. (I have had a package submission rejected due to this.)
RStudio users do have Pandoc installed and the path can be found out with
Sys.getenv("RSTUDIO_PANDOC")
. So this could be put on the path withwithr::local_path(Sys.getenv("RSTUDIO_PANDOC"))
. This would add a dependency on {withr}, however. (Cf. https://github.com/r-lib/rcmdcheck/issues/109, https://github.com/r-lib/rcmdcheck/pull/132).Please consider putting RStudio's Pandoc on the path. I could draft a PR if it helps.
Possible workaround: Run
withr::with_path(Sys.getenv("RSTUDIO_PANDOC"), url_check())
.