r-lib / rlang

Low-level API for programming with R
https://rlang.r-lib.org
Other
491 stars 131 forks source link

`error_arg()` and `error_call()` should have better fall backs when called directly #1667

Open hadley opened 8 months ago

hadley commented 8 months ago
library(rlang)

foo <- function(x, arg = caller_arg(x), call = caller_env()) {
  cli::cli_abort("Error {.arg {x}}", call = call)
}
foo(123)
#> Error:
#> ! Error `123`

Created on 2023-11-09 with reprex v2.0.2.9000

Ideally this would be

#> Error: foo()
#> ! Error `x`
lionel- commented 8 months ago

Unfortunately I don't think we can do better here.

lionel- commented 8 months ago

Though we could detect calls at top-level. The behaviour would then differ when called directly vs in a browser or in testthat or markdown.

hadley commented 8 months ago

The thing that makes me think we could do better is that it's the same appearance at the top level and in snapshot:

Code
  foo(123)
Condition
  Error:
  ! Error `123`