Skip to contents

Slap Operator

Usage

expr %!% message

expr %!!% message

Arguments

expr

An expression or quosure to evaluate carefully

message

A message meant to be formatted by cli::cli_bullets() or a function.

Value

If expr succeeds, its result is returned.

When expr generates an error, the %!% and %!!% operators catch it and embed it in a new error thrown by cli::cli_abort().

If message evaluates to a character vector, it is used as the message argument of cli::cli_abort().

If message evaluates to a function, the function is called with one argument: the caught error from evaluating expr.

When the current environment has an error_call object, it is used as the call argument of cli::cli_abort().

Examples

# g() throws an error
g <- function() {
  stop("ouch")
}

# h() catches that error and embed it in a new error
# with "bam" as its message, the g() error as the parent error,
# and the caller environment as call=
h <- function(error_call = rlang::caller_env()) {
  g() %!% "bam"
}

# f() will be used as the error call
f <- function() {
  h()
}

# Error in `f()`:
# ! bam
# Caused by error in `g()`:
# ! ouch
tryCatch(f(), error = function(err) {
  print(err, backtrace = FALSE)
})
#> <error/rlang_error>
#> Error in `f()`:
#> ! bam
#> Caused by error in `g()`:
#> ! ouch