diff --git a/NAMESPACE b/NAMESPACE index b4af061f..199a4a40 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -23,6 +23,7 @@ export(rust_source) export(to_toml) export(use_crate) export(use_extendr) +export(use_extendr_badge) export(use_msrv) export(use_positron) export(use_vscode) diff --git a/NEWS.md b/NEWS.md index 905eb075..114122b3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -17,6 +17,7 @@ * Adds [WebR](https://docs.r-wasm.org/webr/latest/) support out of the box for all extendr packages. * Note that not all Rust crates are wasm compatible. This change only enables the package to build in the `wasm32-unknown-emscripten` target. It does not guarantee all dependencies will compile. * Addresses new CRAN check in R 4.5+ adding warning for `_abort` usage +* `use_extendr_badge()` has been added to add an extendr-specific badge to a `README.Rmd` via `usethis::use_badge()` * Removes `Makevars.ucrt` as R versions < 4.1 are not supported by extendr * `purrr` has been replaced with [`R/standalone-purrr.R`](https://github.com/r-lib/rlang/blob/main/R/standalone-purrr.R) removing `purrr` from `Imports` * `document()` will no longer try to save all open files using rstudioapi diff --git a/R/badge.R b/R/badge.R new file mode 100644 index 00000000..61815192 --- /dev/null +++ b/R/badge.R @@ -0,0 +1,35 @@ +#' extendr README badge +#' +#' Add the version of extendr being used by an R package to its README. +#' +#' Requires `usethis` to be available. +#' +#' @examples +#' \dontrun{ +#' use_extendr_badge() +#' } +#' +#' @inheritParams use_extendr +#' @export +use_extendr_badge <- function(path = ".") { + rlang::check_installed("usethis") + meta <- read_cargo_metadata(path) + deps <- meta[[c("packages", "dependencies")]][[1]] + + if (rlang::is_null(deps)) { + cli::cli_abort("Unable to determine version of `extendr-api`") + } + + is_extendr <- which(deps$name == "extendr-api") + if (!rlang::is_bare_numeric(is_extendr, 1)) { + cli::cli_abort("Unable to determine version of `extendr-api`") + } + + extendr_version <- deps$req[is_extendr] + + usethis::use_badge( + "extendr", + "https://extendr.github.io/extendr/extendr_api/", + sprintf("https://img.shields.io/badge/extendr-%s-276DC2", extendr_version) + ) +} diff --git a/R/use_extendr.R b/R/use_extendr.R index 6a6d7258..7760fae3 100644 --- a/R/use_extendr.R +++ b/R/use_extendr.R @@ -268,6 +268,10 @@ use_extendr <- function( "Please run {.fun rextendr::document} for changes to take effect." ) ) + # encourage use of use_extendr__badge + cli::cli_alert_info( + "Call {.fn use_extendr_badge} to add an extendr badge to your {.file README}" + ) } return(invisible(TRUE)) diff --git a/_pkgdown.yml b/_pkgdown.yml index 20d4c4e1..51360cdb 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -33,3 +33,4 @@ reference: - make_module_macro - rust_sitrep - read_cargo_metadata + - use_extendr_badge diff --git a/man/use_extendr_badge.Rd b/man/use_extendr_badge.Rd new file mode 100644 index 00000000..2b71af93 --- /dev/null +++ b/man/use_extendr_badge.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/badge.R +\name{use_extendr_badge} +\alias{use_extendr_badge} +\title{extendr README badge} +\usage{ +use_extendr_badge(path = ".") +} +\arguments{ +\item{path}{File path to the package for which to generate wrapper code.} +} +\description{ +Add the version of extendr being used by an R package to its README. +} +\details{ +Requires \code{usethis} to be available. +} +\examples{ +\dontrun{ +use_extendr_badge() +} + +} diff --git a/tests/testthat/_snaps/cran-compliance.md b/tests/testthat/_snaps/cran-compliance.md index 3ce6439c..56c973e6 100644 --- a/tests/testthat/_snaps/cran-compliance.md +++ b/tests/testthat/_snaps/cran-compliance.md @@ -20,7 +20,7 @@ 3 extendr-macros *.*.* 4 once_cell *.*.* 5 paste *.*.* - 6 proc-macro2 *.*.* + 6 proc-macro2 *.*.* 7 quote *.*.* 8 syn *.*.* 9 unicode-ident *.*.* diff --git a/tests/testthat/_snaps/use_extendr.md b/tests/testthat/_snaps/use_extendr.md index 137ff321..20327066 100644 --- a/tests/testthat/_snaps/use_extendr.md +++ b/tests/testthat/_snaps/use_extendr.md @@ -370,6 +370,7 @@ > File 'configure.win' already exists. Skip writing the file. v Finished configuring extendr for package testpkg.wrap. * Please run `rextendr::document()` for changes to take effect. + i Call `use_extendr_badge()` to add an extendr badge to your 'README' # use_extendr() can overwrite files in non-interactive sessions @@ -390,6 +391,7 @@ v Writing 'configure.win' v Finished configuring extendr for package testpkg. * Please run `rextendr::document()` for changes to take effect. + i Call `use_extendr_badge()` to add an extendr badge to your 'README' ---