dbug <- function() {
  scenario <- get_testing_scenario()
  envir <- eval(parse(text = scenario$envir))
  envir <- dbug_envir(envir)
  dbug_files()
  plan <- dbug_plan()
  out <- drake_config(
    plan = plan,
    targets = plan$target,
    envir = envir,
    parallelism = scenario$parallelism,
    jobs = scenario$jobs,
    session_info = FALSE,
    log_progress = TRUE,
    caching = scenario$caching
  )
  out$plan <- plan
  out
}

dbug_envir <- function(envir) {
  force(envir)
  imports <- c(
    "f <- function(x) {g(x) + a}",
    "g <- function(y) {h(y) + b}",
    "h <- function(y) {i(y) + j(y)}",
    "i <- function(x) {x+1}",
    "j <- function(x) {x+2 + c}",
    "a <- 15", "b <- 20", "c <- 25")
  for (import in imports) eval(parse(text = import), envir = envir)
  envir
}

dbug_plan <- function() {
  combined <- f <- myinput <- g <- nextone <- yourinput <- NULL
  drake_plan(
    saveRDS(combined, file_out("intermediatefile.rds")),
    yourinput = f(1 + 1),
    nextone = myinput + g(7),
    combined = nextone + yourinput,
    myinput = readRDS(file_in("input.rds")),
    final = readRDS(file_in("intermediatefile.rds"))
  )
}

dbug_files <- function() {
  saveRDS(1:10, "input.rds")
}
