From 4d3ce91e400b7f687b98abd4c770f1bf271af604 Mon Sep 17 00:00:00 2001 From: Sergio Oller Date: Thu, 9 May 2024 08:26:56 -0600 Subject: [PATCH 1/2] Fix cli R evaluation of errors The cli functions evaluate things in braces. Errors may include braces that we do not want to evaluate For instance, pkgdown was reporting an error: ``` Error in `map()`: i In index: 1. Caused by error: ! Could not evaluate cli `{}` expression: `document`. Caused by error: ! object 'document' not found ``` Because the rendering of my vignette reported: ``` LaTeX Error: Missing \begin{document}. ``` and `cli_abort` intepreted `{document}` as an object to be evaluated. Now it reports: ``` Error in `build_article()`: ! Failed to render vignettes/... x ! LaTeX Error: Missing \begin{document}. ... ``` as expected --- R/rmarkdown.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/R/rmarkdown.R b/R/rmarkdown.R index 7b1e7e720..c3c24ece1 100644 --- a/R/rmarkdown.R +++ b/R/rmarkdown.R @@ -37,6 +37,9 @@ render_rmarkdown <- function(pkg, input, output, ..., seed = NULL, copy_images = callr::r_safe(rmarkdown_render_with_seed, args = args, show = !quiet), error = function(cnd) { lines <- strsplit(gsub("^\r?\n", "", cnd$stderr), "\r?\n")[[1]] + lines <- lines[nchar(lines) >0] + lines <- gsub("{", "{{", lines, fixed = TRUE) + lines <- gsub("}", "}}", lines, fixed = TRUE) cli::cli_abort( c( "!" = "Failed to render {.path {input}}.", From a959df08b56c75c36fcf8f3c55bb0bcceedd3c03 Mon Sep 17 00:00:00 2001 From: Sergio Oller Date: Thu, 9 May 2024 13:36:04 -0600 Subject: [PATCH 2/2] Refactor escape_cli() --- R/rmarkdown.R | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/R/rmarkdown.R b/R/rmarkdown.R index c3c24ece1..c1bc552a9 100644 --- a/R/rmarkdown.R +++ b/R/rmarkdown.R @@ -37,9 +37,7 @@ render_rmarkdown <- function(pkg, input, output, ..., seed = NULL, copy_images = callr::r_safe(rmarkdown_render_with_seed, args = args, show = !quiet), error = function(cnd) { lines <- strsplit(gsub("^\r?\n", "", cnd$stderr), "\r?\n")[[1]] - lines <- lines[nchar(lines) >0] - lines <- gsub("{", "{{", lines, fixed = TRUE) - lines <- gsub("}", "}}", lines, fixed = TRUE) + lines <- escape_cli(lines) cli::cli_abort( c( "!" = "Failed to render {.path {input}}.", @@ -100,6 +98,17 @@ render_rmarkdown <- function(pkg, input, output, ..., seed = NULL, copy_images = invisible(path) } +#' Escapes a cli msg +#' +#' Removes empty lines and escapes braces +#' @param msg A character vector with messages to be escaped +#' @noRd +escape_cli <- function(msg) { + msg <- msg[nchar(msg) >0] + msg <- gsub("{", "{{", msg, fixed = TRUE) + msg <- gsub("}", "}}", msg, fixed = TRUE) + msg +} rmarkdown_render_with_seed <- function(..., seed = NULL) { if (!is.null(seed)) {