Meaningful error messages with `options(warn = 2)`
bersbersbers opened this issue · comments
Related to #122, this code fails:
options(warn = 2)
ggplot2::ggplot(data.frame(x = c(1, 2), y = c(1, 2), show = c(TRUE, FALSE)), ggplot2::aes(x = x, y = y)) +
ggplot2::geom_point() +
gghighlight::gghighlight(show)
Error in
ggplot_add()
:
! All calculations failed! Please provide a valid predicate.
Backtrace:
1. ggplot2:::+.gg
(...)
2. ggplot2:::add_ggplot(e1, e2, e2name)
4. gghighlight:::ggplot_add.gg_highlighter(object, p, objectname)
This is a quite opaque error message, as the computations fail only because an internal warning was converted into an error, and not because the the computation itself failed. Thus, if options(warn = 2)
is set (or generally), it might make sense to check if the thrown error is a converted warning, in which case one might rethrow the original error instead of consuming it.
Thanks for reporting, but if I remember correctly, this is difficult. Due to a design decision to support both grouped and non-grouped predicates, gghighlight needs to ignore errors. I agree this is technically possible, but I think I found propagating errors was a tough job.
I see. Well, now that #177 is fixed, this issue is certainly less urgent.
Otherwise, one might wrap the internal computations in some withr::with_options(warn=min(1, options()$warn))
or similar to soften the effect of external options(warn = 2)
.