From 93f6bcd703ab7922139c46c15ef000596759238f Mon Sep 17 00:00:00 2001 From: Anthony North Date: Sun, 30 Jul 2023 16:19:42 +1000 Subject: [PATCH] configurable globals filename. closes #10 --- NAMESPACE | 2 ++ NEWS.md | 3 ++- R/global_roclet.R | 8 +++++--- R/options.R | 29 ++++++++++++++++++++++++++--- R/use_roxyglobals.R | 3 +++ R/utils.R | 5 +++++ man/options.Rd | 24 ++++++++++++++++++++++-- 7 files changed, 65 insertions(+), 9 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 4917faa..f89ffc3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,7 +6,9 @@ S3method(roclet_process,roclet_global) S3method(roxy_tag_parse,roxy_tag_autoglobal) S3method(roxy_tag_parse,roxy_tag_global) export(global_roclet) +export(options_get_filename) export(options_get_unique) +export(options_set_filename) export(options_set_unique) export(use_roxyglobals) importFrom(roxygen2,roclet) diff --git a/NEWS.md b/NEWS.md index b4dcfc0..c3a5850 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,7 +1,8 @@ # roxyglobals (development version) -- (optionally) write unique globals (#6) +- configurable globals filename (#10) - preserve existing roclets (#9) +- (optionally) write unique globals (#6) # roxyglobals 0.2.2 diff --git a/R/global_roclet.R b/R/global_roclet.R index 0b17878..ccc07eb 100644 --- a/R/global_roclet.R +++ b/R/global_roclet.R @@ -21,14 +21,14 @@ roclet_process.roclet_global <- function(x, blocks, env, base_path) { #' @importFrom roxygen2 roclet_output #' @export roclet_output.roclet_global <- function(x, results, base_path, ...) { - stringi::stri_write_lines(results, globals_path(base_path)) + stringi::stri_write_lines(results, globals_filename(base_path)) invisible(NULL) } #' @importFrom roxygen2 roclet_clean #' @export roclet_clean.roclet_global <- function(x, base_path) { - unlink(globals_path(base_path), force = TRUE) + unlink(globals_filename(base_path), force = TRUE) } #' @importFrom roxygen2 roxy_tag_parse @@ -92,4 +92,6 @@ generated_by <- function() { paste0("# Generated by ", utils::packageName(), ": do not edit by hand\n") } -globals_path <- function(base_path) file.path(base_path, "R", "globals.R") +globals_filename <- function(base_path) { + file.path(base_path, "R", options_get_filename(base_path)) +} diff --git a/R/options.R b/R/options.R index 74dd5eb..9956a99 100644 --- a/R/options.R +++ b/R/options.R @@ -10,6 +10,7 @@ NULL #' @export +#' @return The option value #' @describeIn options get unique options_get_unique <- function(file = ".") { text <- desc::desc_get_field( @@ -21,12 +22,34 @@ options_get_unique <- function(file = ".") { } #' @export -#' @param unique Whether to emit unique globals +#' @param value The new option value #' @describeIn options set unique -options_set_unique <- function(unique, file = ".") { +options_set_unique <- function(value, file = ".") { desc::desc_set( options_key("unique"), - isTRUE(unique), + isTRUE(value), + file = file + ) +} + +#' @export +#' @describeIn options get filename +options_get_filename <- function(file = ".") { + desc::desc_get_field( + options_key("filename"), + "globals.R", + file = file + ) +} + +#' @export +#' @describeIn options set filename +options_set_filename <- function(value, file = ".") { + stopifnot(is_r_file(value)) + + desc::desc_set( + options_key("filename"), + basename(value[1]), file = file ) } diff --git a/R/use_roxyglobals.R b/R/use_roxyglobals.R index e6718dd..148db72 100644 --- a/R/use_roxyglobals.R +++ b/R/use_roxyglobals.R @@ -16,7 +16,10 @@ use_roxyglobals <- function() { paste0(utils::packageName(), "::", substitute(global_roclet)) )) + # use global_roclet options_set_roxygen(options) + # ensure roxyglobals options + options_set_filename(options_get_filename()) options_set_unique(options_get_unique()) } diff --git a/R/utils.R b/R/utils.R index a2f8886..6f7a163 100644 --- a/R/utils.R +++ b/R/utils.R @@ -4,3 +4,8 @@ first <- function(x) x[[1]] quote_str <- function(x, q = "\"") paste0(q, x, q) paste_line <- function(...) paste0(c(...), collapse = "\n") indent <- function(..., size = 2) paste0(strrep(" ", size), ...) + +is_r_file <- function(filename) { + ext <- toupper(tools::file_ext(trimws(filename))) + ext == "R" %??% FALSE +} diff --git a/man/options.Rd b/man/options.Rd index b1692e8..c3bf152 100644 --- a/man/options.Rd +++ b/man/options.Rd @@ -4,11 +4,27 @@ \alias{options} \alias{options_get_unique} \alias{options_set_unique} +\alias{options_get_filename} +\alias{options_set_filename} \title{Roxyglobals options} \usage{ -options_get_unique() +options_get_unique(file = ".") -options_set_unique(unique) +options_set_unique(value, file = ".") + +options_get_filename(file = ".") + +options_set_filename(value, file = ".") +} +\arguments{ +\item{file}{DESCRIPTION file to use. By default the DESCRIPTION +file of the current package (i.e. the package the working directory +is part of) is used.} + +\item{value}{The new option value} +} +\value{ +The option value } \description{ Get & set roxyglobals options in DESCRIPTION file. @@ -19,5 +35,9 @@ Get & set roxyglobals options in DESCRIPTION file. \item \code{options_set_unique()}: set unique +\item \code{options_get_filename()}: get filename + +\item \code{options_set_filename()}: set filename + }} \keyword{internal}