ensure_not_empty <- function(x) { if (length(x) > 0) { x } else { read_lines(path_package("reprex", "templates", "BETTER_THAN_NOTHING.R")) } } ensure_not_dogfood <- function(x) { looks_like_fenced_md <- any(grepl("^```", x)) if (looks_like_fenced_md) { lines <- paste0(" ", x[1:3]) ## I negate yep(), instead of using nope(), to get desired behaviour in ## a non-interactive call if (!yep( "First three lines of putative code are:\n", glue::glue_collapse(lines, sep = "\n"), "\n", "which doesn't look like R code.\n", "Are we going in circles? Did you just run reprex()?\n", "In that case, the clipboard now holds the *rendered* result.\n", "Carry on with this reprex?" )) { abort("Aborting.") } } looks_like_r <- any(grepl("^#>", x)) if (looks_like_r) { if (!yep( "Putative code contains lines that start with `#>`.\n", "Are we going in circles? Did you just run `reprex(..., venue = \"r\")`?\n", "In that case, the clipboard now holds the *rendered* result.\n", "Carry on with this reprex?" )) { abort("Aborting.") } } html_start <- grep("^
", x)
  if (length(html_start) > 0) {
    lines <- paste0("  ", x[html_start + 0:2])
    if (!yep(
      "First three lines of putative code are:\n",
      glue::glue_collapse(lines, sep = "\n"), "\n",
      "which looks like html, not R code.\n",
      "Are we going in circles? Did you just run `reprex(..., venue = \"html\")`?\n",
      "In that case, the clipboard now holds the *rendered* result.\n",
      "Carry on with this reprex?"
    )) {
      abort("Aborting.")
    }
  }

  x
}

ensure_no_prompts <- function(x, prompt = getOption("prompt")) {
  regex <- paste0("^", escape_regex(prompt))
  prompts <- grepl(regex, x)
  if (any(prompts)) {
    reprex_info("Removing leading prompts from reprex source.")
  }
  sub(regex, "", x)
}