From 3347bd3d57027e43a3e07a5c35952f692a29526f Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Wed, 8 May 2024 09:03:29 -0500 Subject: [PATCH 1/2] WIP: display package dependencies --- R/build-home-deps.R | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 R/build-home-deps.R diff --git a/R/build-home-deps.R b/R/build-home-deps.R new file mode 100644 index 000000000..d551caad4 --- /dev/null +++ b/R/build-home-deps.R @@ -0,0 +1,38 @@ +data_dependencies <- function(pkg = ".") { + pkg <- as_pkgdown(pkg) + + deps <- pkg$desc$get_deps() + deps <- deps[order(deps$type, deps$package), c("package", "type")] + deps <- deps[deps$package != "R", ] + + recursive <- sort(unique(unlist(tools::package_dependencies(deps$package[deps$type %in% c("Depends", "Imports")])))) + recursive <- setdiff(recursive, deps$package) + deps <- rbind(deps, data.frame(package = recursive, type = "Recursive")) + + deps$package <- purrr::map_chr(deps$package, package_link) + rownames(deps) <- NULL + + deps +} + +package_link <- function(package) { + href <- downlit::href_package(package) + + if (is.na(href)) { + if (is_base_package(package)) { + href <- NA + } else { + href <- paste0("https://cran.r-project.org/web/packages/", package) + } + } + + a(package, href) +} + +is_base_package <- function(x) { + x %in% c( + "base", "compiler", "datasets", "graphics", "grDevices", "grid", + "methods", "parallel", "splines", "stats", "stats4", "tcltk", + "tools", "utils" + ) +} From 3c559ff1c68479f8ff0e098b2e11c037e42be1f2 Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Thu, 27 Jun 2024 07:51:37 -0500 Subject: [PATCH 2/2] More WIP --- R/build-home-deps.R | 13 ++++++++++++- R/build-home-index.R | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/R/build-home-deps.R b/R/build-home-deps.R index d551caad4..d8c3d7077 100644 --- a/R/build-home-deps.R +++ b/R/build-home-deps.R @@ -1,4 +1,15 @@ -data_dependencies <- function(pkg = ".") { +build_home_depencies <- function(pkg = ".") { + pkg <- as_pkgdown(pkg) + + deps <- dependencies_table(pkg) + cats <- split(deps$package, deps$type) + cats <- purrr::map_chr(cats, paste0, collapse = ", ") + + # Need to translate category titles + paste0("

", names(cats), ": ", cats, "

") +} + +dependencies_table <- function(pkg = ".") { pkg <- as_pkgdown(pkg) deps <- pkg$desc$get_deps() diff --git a/R/build-home-index.R b/R/build-home-index.R index d589970b4..534f6c457 100644 --- a/R/build-home-index.R +++ b/R/build-home-index.R @@ -160,6 +160,7 @@ data_home_sidebar_links <- function(pkg = ".") { links <- c( link_url(sprintf(tr_("View on %s"), repo$repo), repo$url), + link_url(sprintf("See dependencies"), 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)), purrr::map_chr(links, ~ link_url(.$text, .$href))