From 1a6c8b7bd52488651df0deaec51e5b39c4f0bcd5 Mon Sep 17 00:00:00 2001 From: catalamarti Date: Thu, 15 Aug 2024 17:20:34 -0700 Subject: [PATCH] Allow `BugReports` to be an email (#2758) Fixes #2275 --- NEWS.md | 3 +++ R/build-home-index.R | 15 ++++++++++----- tests/testthat/_snaps/build-home-index.md | 8 ++++++++ tests/testthat/test-build-home-index.R | 9 ++++++++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/NEWS.md b/NEWS.md index 6bd90a976..dcaf54600 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,9 @@ # pkgdown (development version) +* The `BugReports` field can now be an email (@catalamarti, #2275). + * New `clean_cache()` function removes the contents of the cache directory (#2718). + * pkgdown now depends on R >= 4.0.0 (#2714) # pkgdown 2.1.0 diff --git a/R/build-home-index.R b/R/build-home-index.R index d589970b4..70f2764bd 100644 --- a/R/build-home-index.R +++ b/R/build-home-index.R @@ -108,7 +108,7 @@ data_home_sidebar <- function(pkg = ".", call = caller_env()) { "home.sidebar.structure", default = default_sidebar_structure(), call = call - ) + ) # compute all default sections default_components <- list( @@ -122,7 +122,7 @@ data_home_sidebar <- function(pkg = ".", call = caller_env()) { ) needs_components <- setdiff(structure, names(default_components)) - custom_yaml <- config_pluck_sidebar_components(pkg, needs_components, call = call) + custom_yaml <- config_pluck_sidebar_components(pkg, needs_components, call = call) custom_components <- purrr::map(custom_yaml, function(x) { sidebar_section(x$title, markdown_text_block(pkg, x$text)) }) @@ -140,11 +140,11 @@ default_sidebar_structure <- function() { config_pluck_sidebar_components <- function(pkg, new_components, call = caller_env()) { base_path <- "home.sidebar.components" components <- config_pluck_list(pkg, base_path, has_names = new_components, call = call) - + for (name in names(components)) { component <- components[[name]] component_path <- paste0(base_path, ".", name) - + config_pluck_list(pkg, component_path, has_names = c("title", "text"), call = call) config_pluck_string(pkg, paste0(component_path, ".title"), call = call) config_pluck_string(pkg, paste0(component_path, ".text"), call = call) @@ -158,10 +158,15 @@ data_home_sidebar_links <- function(pkg = ".") { repo <- cran_link(pkg$package) links <- config_pluck(pkg, "home.links") + bug_reports <- pkg$desc$get_field("BugReports", default = NULL) + if (grepl("@", bug_reports) && !startsWith(bug_reports, "http")) { + bug_reports <- paste0("mailto:", bug_reports) + } + links <- c( link_url(sprintf(tr_("View on %s"), repo$repo), repo$url), link_url(tr_("Browse source code"), repo_home(pkg)), - link_url(tr_("Report a bug"), pkg$desc$get_field("BugReports", default = NULL)), + link_url(tr_("Report a bug"), bug_reports), purrr::map_chr(links, ~ link_url(.$text, .$href)) ) diff --git a/tests/testthat/_snaps/build-home-index.md b/tests/testthat/_snaps/build-home-index.md index 63e60799b..8de6d29e4 100644 --- a/tests/testthat/_snaps/build-home-index.md +++ b/tests/testthat/_snaps/build-home-index.md @@ -149,3 +149,11 @@ ! In _pkgdown.yml, home.sidebar.components.fancy must have components "title" and "text". 2 missing components: "title" and "text". +# allow email in BugReports + + Code + xpath_xml(html, ".//li/a") + Output + Report a bug + Citing testpackage + diff --git a/tests/testthat/test-build-home-index.R b/tests/testthat/test-build-home-index.R index 283b39126..d452b215f 100644 --- a/tests/testthat/test-build-home-index.R +++ b/tests/testthat/test-build-home-index.R @@ -30,7 +30,7 @@ test_that("math is handled", { expect_equal(xpath_length(html, ".//math"), 1) }) -test_that("data_home() validates yaml metadata", { +test_that("data_home() validates yaml metadata", { data_home_ <- function(...) { pkg <- local_pkgdown_site(meta = list(...)) data_home(pkg) @@ -153,3 +153,10 @@ test_that("cran_unquote works", { "Quoting is CRAN's thing." ) }) + +test_that("allow email in BugReports", { + # currently desc throws a warning if BugReports is an email + pkg <- local_pkgdown_site(desc = list(BugReports = "me@tidyverse.com")) + html <- xml2::read_html(data_home_sidebar(pkg)) + expect_snapshot(xpath_xml(html, ".//li/a")) +})