Skip to content

Commit

Permalink
- The set_tidy_names() and tidy_names() helpers the list of new n…
Browse files Browse the repository at this point in the history
…ames using a bullet list with at most six items (#406).

Closes #406.
  • Loading branch information
krlmlr committed Aug 20, 2018
1 parent 5cc9ee3 commit e816ba3
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 12 deletions.
4 changes: 2 additions & 2 deletions R/msg-format.R
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@ pluralise_n <- function(message, n) {
message
}

bullets <- function(header, ...) {
bullets <- function(header, ..., .problem = " problem(s)") {
problems <- c(...)
MAX_BULLETS <- 6L
if (length(problems) >= MAX_BULLETS) {
n_more <- length(problems) - MAX_BULLETS + 1L
problems[[MAX_BULLETS]] <-
pluralise_n(paste0(pre_dots("and "), n_more, " more problem(s)"), n_more)
pluralise_n(paste0(pre_dots("and "), n_more, " more", .problem), n_more)
length(problems) <- MAX_BULLETS
}

Expand Down
27 changes: 19 additions & 8 deletions R/repair-names.R
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@
#' set_tidy_names(mtcars)
#'
#' # By default, all rename operations are printed to the console:
#' tbl <- as_tibble(structure(list(3, 4, 5), class = "data.frame"),
#' validate = FALSE)
#' tbl <- as_tibble(structure(list(3, 4, 5), class = "data.frame"), .tidy_names = FALSE)
#' set_tidy_names(tbl)
#'
#' # Alternatively, use tidy_names() to assign the result manually:
#' new_names <- tidy_names(names(tbl))
#' rlang::set_names(tbl, new_names)
#'
#' # Optionally, names can be made syntactic:
#' tidy_names("a b", syntactic = TRUE)
#' @export
Expand All @@ -34,14 +37,20 @@ set_tidy_names <- function(x, syntactic = FALSE, quiet = FALSE) {
#' @description
#' `tidy_names()` is the workhorse behind `set_tidy_names()`, it treats the
#' argument as a string to be used to name a data frame or a vector.
#' To make the rename information available to callers, call `tidy_names()`
#' and assign the result via [names()] or [rlang::set_names()].
#'
#' @param name A character vector representing names.
#' @export
tidy_names <- function(name, syntactic = FALSE, quiet = FALSE) {
new_name <- na_to_empty(name)
new_name <- make_syntactic(new_name, syntactic)
new_name <- append_pos(new_name)

describe_tidying(name, new_name, quiet)
if (!quiet) {
describe_tidying(name, new_name)
}

new_name
}

Expand Down Expand Up @@ -72,15 +81,17 @@ append_pos <- function(name) {
name
}

describe_tidying <- function(orig_name, name, quiet) {
describe_tidying <- function(orig_name, name) {
stopifnot(length(orig_name) == length(name))
if (quiet) return()

new_names <- name != na_to_empty(orig_name)
if (any(new_names)) {
message(
"New names:\n",
paste0(tick_if_needed(orig_name[new_names]), " -> ", tick_if_needed(name[new_names]), collapse = "\n")
msg <- bullets(
"New names:",
paste0(tick_if_needed(orig_name[new_names]), " -> ", tick_if_needed(name[new_names])),
.problem = ""
)
message(msg)
}
}

Expand Down
9 changes: 7 additions & 2 deletions man/tidy_names.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit e816ba3

Please sign in to comment.