Skip to content

Commit

Permalink
Put selector functions etc. into a parent env (r-lib#2397)
Browse files Browse the repository at this point in the history
  • Loading branch information
dmurdoch authored and SebKrantz committed Jun 1, 2024
1 parent 56ce35c commit 44b92b0
Show file tree
Hide file tree
Showing 10 changed files with 89 additions and 9 deletions.
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
* Add Catalan translation (@jmaspons, #2333)
* Set RNG seed for htmlwidgets IDs. This reduces noise in pkgdown reference HTML output when examples generate htmlwidgets (@salim-b, #2294).
* Fix BS5 navbar template to get `navbar.type: dark` to work with bslib 0.6+ / Bootstrap 5.3+ (@tanho63, #2388)
* Topic names that conflict with selector functions can now be listed as references in `_pkgdown.yml` (@dmurdoch, #2397).

# pkgdown 2.0.7

Expand Down
19 changes: 10 additions & 9 deletions R/topics.R
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,11 @@ all_sign <- function(x, text) {
}

match_env <- function(topics) {
out <- env(empty_env(),
fns <- env(empty_env(),
"-" = function(x) -x,
"c" = function(...) c(...)
)
out <- env(fns)

topic_index <- seq_along(topics$name)

Expand Down Expand Up @@ -99,36 +100,36 @@ match_env <- function(topics) {
is_public <- function(internal) {
if (!internal) !topics$internal else rep(TRUE, nrow(topics))
}
out$starts_with <- function(x, internal = FALSE) {
fns$starts_with <- function(x, internal = FALSE) {
any_alias(~ grepl(paste0("^", x), .), .internal = internal)
}
out$ends_with <- function(x, internal = FALSE) {
fns$ends_with <- function(x, internal = FALSE) {
any_alias(~ grepl(paste0(x, "$"), .), .internal = internal)
}
out$matches <- function(x, internal = FALSE) {
fns$matches <- function(x, internal = FALSE) {
any_alias(~ grepl(x, .), .internal = internal)
}
out$contains <- function(x, internal = FALSE) {
fns$contains <- function(x, internal = FALSE) {
any_alias(~ grepl(x, ., fixed = TRUE), .internal = internal)
}
out$has_keyword <- function(x) {
fns$has_keyword <- function(x) {
which(purrr::map_lgl(topics$keywords, ~ any(. %in% x)))
}
out$has_concept <- function(x, internal = FALSE) {
fns$has_concept <- function(x, internal = FALSE) {
match <- topics$concepts %>%
purrr::map(~ str_trim(.) == x) %>%
purrr::map_lgl(any)

which(match & is_public(internal))
}
out$lacks_concepts <- function(x, internal = FALSE) {
fns$lacks_concepts <- function(x, internal = FALSE) {
nomatch <- topics$concepts %>%
purrr::map(~ match(str_trim(.), x, nomatch = FALSE)) %>%
purrr::map_lgl(~ length(.) == 0L | all(. == 0L))

which(nomatch & is_public(internal))
}
out$lacks_concept <- out$lacks_concepts
fns$lacks_concept <- fns$lacks_concepts
out
}

Expand Down
28 changes: 28 additions & 0 deletions tests/testthat/_snaps/build-reference-index.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,31 @@
has_icons: no

# can use a selector name as a topic name

Code
data_reference_index(pkg)
Output
pagetitle: Function reference
rows:
- title: bla
slug: bla
desc: ~
is_internal: no
- topics:
- path: matches.html
title: matches
aliases: matches()
icon: ~
- path: A.html
title: A
aliases: A()
icon: ~
names:
- matches
- A
row_has_icons: no
is_internal: no
has_icons: no

6 changes: 6 additions & 0 deletions tests/testthat/assets/reference-selector/DESCRIPTION
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Package: testpackage
Version: 1.0.0
Title: A test package
Description: A test package
Authors@R: person("Hadley Wickham")
RoxygenNote: 7.3.1
4 changes: 4 additions & 0 deletions tests/testthat/assets/reference-selector/NAMESPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Generated by roxygen2: do not edit by hand

export(A)
export(matches)
7 changes: 7 additions & 0 deletions tests/testthat/assets/reference-selector/R/funs.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#' matches
#' @export
matches <- function() {}

#' A
#' @export
A <- function() {}
1 change: 1 addition & 0 deletions tests/testthat/assets/reference-selector/_pkgdown.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
url: http://test.org
11 changes: 11 additions & 0 deletions tests/testthat/assets/reference-selector/man/A.Rd

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

11 changes: 11 additions & 0 deletions tests/testthat/assets/reference-selector/man/matches.Rd

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

10 changes: 10 additions & 0 deletions tests/testthat/test-build-reference-index.R
Original file line number Diff line number Diff line change
Expand Up @@ -126,3 +126,13 @@ test_that("can use a topic from another package", {

expect_snapshot(data_reference_index(pkg))
})

test_that("can use a selector name as a topic name", {
meta <- list(reference = list(list(
title = "bla",
contents = c("matches", "matches('A')")
)))
pkg <- as_pkgdown(test_path("assets/reference-selector"), override = meta)

expect_snapshot(data_reference_index(pkg))
})

0 comments on commit 44b92b0

Please sign in to comment.