Skip to content

Commit 5da2d30

Browse files
authored
Better scale messages (#5343)
* More informative calls in constructors * Add test for scale calls * Fix call for feed-forward scales * Fix calls for gnarly default scales * Fix calls for transformation scales * Reoxygenate * Supply `call` to messages * Accept periods at ends of messages * Forward calls to checkers * Fix #4258 * `find_scale()` generates call * `xlim`/`ylim` have appropriate calls * `check_transformation()` throws more informative warning * Remove orphaned code * Deprecate `scale_name` argument * Purge `scale_name` * Test deprecation messages * Add NEWS bullet * conditionally test time scales
1 parent 67bb3bb commit 5da2d30

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+604
-233
lines changed

NEWS.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# ggplot2 (development version)
22

3+
* Scales throw more informative messages (@teunbrand, #4185, #4258)
4+
5+
* The `scale_name` argument in `continuous_scale()`, `discrete_scale()` and
6+
`binned_scale()` is soft-deprecated (@teunbrand, #1312).
7+
38
* In `theme()`, some elements can be specified with `rel()` to inherit from
49
`unit`-class objects in a relative fashion (@teunbrand, #3951).
510

R/limits.R

+14-11
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,13 @@ lims <- function(...) {
9090
#' @export
9191
#' @rdname lims
9292
xlim <- function(...) {
93-
limits(c(...), "x")
93+
limits(c(...), "x", call = current_call())
9494
}
9595

9696
#' @export
9797
#' @rdname lims
9898
ylim <- function(...) {
99-
limits(c(...), "y")
99+
limits(c(...), "y", call = current_call())
100100
}
101101

102102
#' Generate correct scale type for specified limits
@@ -122,42 +122,45 @@ limits.numeric <- function(lims, var, call = caller_env()) {
122122
trans <- "identity"
123123
}
124124

125-
make_scale("continuous", var, limits = lims, trans = trans)
125+
make_scale("continuous", var, limits = lims, trans = trans, call = call)
126126
}
127127

128-
make_scale <- function(type, var, ...) {
129-
scale <- match.fun(paste("scale_", var, "_", type, sep = ""))
130-
scale(...)
128+
make_scale <- function(type, var, ..., call = NULL) {
129+
name <- paste("scale_", var, "_", type, sep = "")
130+
scale <- match.fun(name)
131+
sc <- scale(...)
132+
sc$call <- call %||% parse_expr(paste0(name, "()"))
133+
sc
131134
}
132135

133136
#' @export
134137
limits.character <- function(lims, var, call = caller_env()) {
135-
make_scale("discrete", var, limits = lims)
138+
make_scale("discrete", var, limits = lims, call = call)
136139
}
137140
#' @export
138141
limits.factor <- function(lims, var, call = caller_env()) {
139-
make_scale("discrete", var, limits = as.character(lims))
142+
make_scale("discrete", var, limits = as.character(lims), call = call)
140143
}
141144
#' @export
142145
limits.Date <- function(lims, var, call = caller_env()) {
143146
if (length(lims) != 2) {
144147
cli::cli_abort("{.arg {var}} must be a two-element vector", call = call)
145148
}
146-
make_scale("date", var, limits = lims)
149+
make_scale("date", var, limits = lims, call = call)
147150
}
148151
#' @export
149152
limits.POSIXct <- function(lims, var, call = caller_env()) {
150153
if (length(lims) != 2) {
151154
cli::cli_abort("{.arg {var}} must be a two-element vector", call = call)
152155
}
153-
make_scale("datetime", var, limits = lims)
156+
make_scale("datetime", var, limits = lims, call = call)
154157
}
155158
#' @export
156159
limits.POSIXlt <- function(lims, var, call = caller_env()) {
157160
if (length(lims) != 2) {
158161
cli::cli_abort("{.arg {var}} must be a two-element vector", call = call)
159162
}
160-
make_scale("datetime", var, limits = as.POSIXct(lims))
163+
make_scale("datetime", var, limits = as.POSIXct(lims), call = call)
161164
}
162165

163166
#' Expand the plot limits, using data

0 commit comments

Comments
 (0)