R/format.R

Defines functions format_message ensure_bullets replace_names as_name

as_name <- function(quo) {
  label <- rlang::as_label(quo)
  if (rlang::quo_is_symbol(quo)) paste0("`", label, "`") else label
}

replace_names <- function(message, quos) {
  patterns <- paste0("\\{\\.(arg|var)\\s*", names(quos), "\\s*\\}")
  names <- vapply_c(quos, as_name)

  reduce(
    seq_along(patterns),
    function(msg, i) gsub(patterns[i], names[i], msg),
    message
  )
}

ensure_bullets <- function(error_message, default = "*") {
  nms <- names(error_message) %||% rep(default, length(error_message))
  rlang::set_names(error_message, replace(nms, is.na(nms) | nms == "", default))
}

format_message <- function(error_message, quos) {
  if (is.null(error_message) || all(error_message == "")) {
    return()
  }

  patched_message <- replace_names(error_message, quos)
  env <- rlang::as_environment(lapply(quos, rlang::eval_tidy), rlang::current_env())

  vapply_c(
    ensure_bullets(patched_message),
    cli::format_inline,
    .envir = env
  )
}
qfes/tidyassert documentation built on March 19, 2022, 7:18 a.m.