## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup, include = FALSE---------------------------------------------------
library(winch)

## -----------------------------------------------------------------------------
foo <- function() {
  bar()
}

bar <- function() {
  baz()
}

baz <- function() {
  sys.calls()
}

tail(foo(), 3)

## -----------------------------------------------------------------------------
library(winch)

foo <- function() {
  winch_call(bar)
}

bar <- function() {
  winch_call(baz)
}

tail(foo(), 5)

## -----------------------------------------------------------------------------
baz <- function() {
  funs <- winch:::sys_functions()
  lapply(funs, body)
}

tail(foo(), 5)

## ----eval = winch::winch_available()------------------------------------------
baz <- function() {
  winch_trace_back()
}

trace <- foo()
nrow(trace)
head(trace, 25)
table(trace$pathname)

## ----eval = FALSE-------------------------------------------------------------
# baz <- function() {
#   rlang::trace_back()
# }
# 
# foo()

## ----eval = FALSE-------------------------------------------------------------
# baz <- function() {
#   trace <- rlang::trace_back()
#   winch_add_trace_back(trace)
# }
# 
# foo()

## ----eval = FALSE-------------------------------------------------------------
# options(rlang_trace_use_winch = TRUE)
# 
# baz <- function() {
#   rlang::trace_back()
# }
# 
# foo()

## ----error, eval = FALSE------------------------------------------------------
# options(
#   error = rlang::entrace,
#   rlang_backtrace_on_error = "full",
#   rlang_trace_use_winch = TRUE
# )
# 
# vctrs::vec_as_location(quote, 2)