From 9f735718323f4ae7740258834f642db764a9c33c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 20 Mar 2026 14:30:26 +0000 Subject: [PATCH] Replace all "in \`funcname()\`:" with {.help [{.fun funcname}](AMR::funcname)} Converts all "in `funcname()`:" prefixes in warning_()/message_()/stop_() calls to the full {.help} link format for clickable help in supported terminals. Also fixes adjacent backtick argument names to {.arg}. Files changed: ab.R, ab_property.R, av.R, av_property.R, antibiogram.R, key_antimicrobials.R, mdro.R, mic.R, mo.R, plotting.R https://claude.ai/code/session_01XHWLohiSTdZvCutwD7ag2b --- DESCRIPTION | 2 +- NEWS.md | 5 +++-- R/ab.R | 4 ++-- R/ab_property.R | 6 +++--- R/antibiogram.R | 6 +++--- R/av.R | 4 ++-- R/av_property.R | 4 ++-- R/key_antimicrobials.R | 2 +- R/mdro.R | 4 ++-- R/mic.R | 2 +- R/mo.R | 6 +++--- R/plotting.R | 2 +- 12 files changed, 24 insertions(+), 23 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index a087266e4..274a8fb69 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: AMR -Version: 3.0.1.9038 +Version: 3.0.1.9039 Date: 2026-03-19 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) diff --git a/NEWS.md b/NEWS.md index cc6d16ecc..bfb14c804 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 3.0.1.9038 +# AMR 3.0.1.9039 ### New * Integration with the **tidymodels** framework to allow seamless use of SIR, MIC and disk data in modelling pipelines via `recipes` @@ -32,7 +32,8 @@ ### Updates * Replaced all bare backtick-quoted text in `message_()`, `warning_()`, and `stop_()` calls with proper cli inline markup (`{.arg}`, `{.cls}`, `{.fun}`, `{.pkg}`, `{.code}`); rewrote `print.ab` to use a cli named-vector with `*` bullets and code highlighting when cli is available * Added `format_inline_()` helper that formats a cli-markup string and returns it (rather than emitting it), using `cli::format_inline()` when available and `cli_to_plain()` otherwise; used this in `.onAttach` to replace the duplicated cli/non-cli startup message pattern -* All inline `{variable}` / `{expression}` in messaging calls are now pre-evaluated via `paste0()`, so users without cli or glue never see raw template syntax +* All inline `{variable}` / `{expression}` in messaging calls are now pre-evaluated via `paste0()`, so users without cli or glue never see raw template syntax +* All `"in `funcname()`:"` patterns in `warning_()`/`message_()`/`stop_()` replaced with `{.help [{.fun funcname}](AMR::funcname)}` for clickable help links * `mdro()` now infers resistance for a _missing_ base drug column from an _available_ corresponding drug+inhibitor combination showing resistance (e.g., piperacillin is absent but required, while piperacillin/tazobactam available and resistant). Can be set with the new argument `infer_from_combinations`, which defaults to `TRUE` (#209). Note that this can yield a higher MDRO detection (which is a good thing as it has become more reliable). * `susceptibility()` and `resistance()` gained the argument `guideline`, which defaults to EUCAST, for interpreting the 'I' category correctly. * Added to the `antimicrobials` data set: cefepime/taniborbactam (`FTA`), ceftibuten/avibactam (`CTA`), clorobiocin (`CLB`), kasugamycin (`KAS`), ostreogrycin (`OST`), taniborbactam (`TAN`), thiostrepton (`THS`), xeruborbactam (`XER`), and zorbamycin (`ZOR`) diff --git a/R/ab.R b/R/ab.R index 791d28e38..5af1f3b51 100755 --- a/R/ab.R +++ b/R/ab.R @@ -445,7 +445,7 @@ as.ab <- function(x, flag_multiple_results = TRUE, language = get_AMR_locale(), # take failed ATC codes apart from rest if (length(x_unknown_ATCs) > 0 && fast_mode == FALSE) { warning_( - "in `as.ab()`: these ATC codes are not (yet) in the antimicrobials data set: ", + "in {.help [{.fun as.ab}](AMR::as.ab)}: these ATC codes are not (yet) in the antimicrobials data set: ", vector_and(x_unknown_ATCs), "." ) } @@ -459,7 +459,7 @@ as.ab <- function(x, flag_multiple_results = TRUE, language = get_AMR_locale(), x_unknown <- x_unknown[!x_unknown %in% c("", NA)] if (length(x_unknown) > 0 && fast_mode == FALSE) { warning_( - "in `as.ab()`: ", ifelse(length(unique(x_unknown)) == 1, "this value", "these values"), " could not be coerced to a valid antimicrobial ID: ", + "in {.help [{.fun as.ab}](AMR::as.ab)}: ", ifelse(length(unique(x_unknown)) == 1, "this value", "these values"), " could not be coerced to a valid antimicrobial ID: ", vector_and(x_unknown), "." ) } diff --git a/R/ab_property.R b/R/ab_property.R index b91541566..3f90aa844 100755 --- a/R/ab_property.R +++ b/R/ab_property.R @@ -265,7 +265,7 @@ ab_ddd <- function(x, administration = "oral", ...) { if (any(ab_name(x, language = NULL) %like% "/" & is.na(out))) { warning_( - "in `ab_ddd()`: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", + "in {.help [{.fun ab_ddd}](AMR::ab_ddd)}: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", "Please refer to the WHOCC website:\n", "atcddd.fhi.no/ddd/list_of_ddds_combined_products/" ) @@ -285,7 +285,7 @@ ab_ddd_units <- function(x, administration = "oral", ...) { if (any(ab_name(x, language = NULL) %like% "/" & is.na(out))) { warning_( - "in `ab_ddd_units()`: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", + "in {.help [{.fun ab_ddd_units}](AMR::ab_ddd_units)}: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", "Please refer to the WHOCC website:\n", "atcddd.fhi.no/ddd/list_of_ddds_combined_products/" ) @@ -424,7 +424,7 @@ set_ab_names <- function(data, ..., property = "name", language = get_AMR_locale ) if (any(x %in% c("", NA))) { warning_( - "in `set_ab_names()`: no ", property, " found for column(s): ", + "in {.help [{.fun set_ab_names}](AMR::set_ab_names)}: no ", property, " found for column(s): ", vector_and(vars[x %in% c("", NA)], sort = FALSE) ) x[x %in% c("", NA)] <- vars[x %in% c("", NA)] diff --git a/R/antibiogram.R b/R/antibiogram.R index fb23aa038..40bf874b8 100755 --- a/R/antibiogram.R +++ b/R/antibiogram.R @@ -583,9 +583,9 @@ antibiogram.default <- function(x, if (length(existing_ab_combined_cols) > 0 && !is.null(ab_transform)) { ab_transform <- NULL warning_( - "Detected column name(s) containing the '+' character, which conflicts with the expected syntax in `antibiogram()`: the '+' is used to combine separate antimicrobial drug columns (e.g., \"AMP+GEN\").\n\n", - "To avoid incorrectly guessing which antimicrobials this represents, `ab_transform` was automatically set to `NULL`.\n\n", - "If this is unintended, please rename the column(s) to avoid using '+' in the name, or set `ab_transform = NULL` explicitly to suppress this message." + "Detected column name(s) containing the '+' character, which conflicts with the expected syntax in {.help [{.fun antibiogram}](AMR::antibiogram)}: the '+' is used to combine separate antimicrobial drug columns (e.g., \"AMP+GEN\").\n\n", + "To avoid incorrectly guessing which antimicrobials this represents, {.arg ab_transform} was automatically set to {.code NULL}.\n\n", + "If this is unintended, please rename the column(s) to avoid using '+' in the name, or set {.code ab_transform = NULL} explicitly to suppress this message." ) } antimicrobials <- ab_trycatch diff --git a/R/av.R b/R/av.R index 117730167..a5d3509a5 100755 --- a/R/av.R +++ b/R/av.R @@ -475,7 +475,7 @@ as.av <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) { # take failed ATC codes apart from rest if (length(x_unknown_ATCs) > 0 && fast_mode == FALSE) { warning_( - "in `as.av()`: these ATC codes are not (yet) in the antivirals data set: ", + "in {.help [{.fun as.av}](AMR::as.av)}: these ATC codes are not (yet) in the antivirals data set: ", vector_and(x_unknown_ATCs), "." ) } @@ -486,7 +486,7 @@ as.av <- function(x, flag_multiple_results = TRUE, info = interactive(), ...) { ) if (length(x_unknown) > 0 && fast_mode == FALSE) { warning_( - "in `as.av()`: these values could not be coerced to a valid antiviral drug ID: ", + "in {.help [{.fun as.av}](AMR::as.av)}: these values could not be coerced to a valid antiviral drug ID: ", vector_and(x_unknown), "." ) } diff --git a/R/av_property.R b/R/av_property.R index b46f683fb..41f83df7c 100755 --- a/R/av_property.R +++ b/R/av_property.R @@ -162,7 +162,7 @@ av_ddd <- function(x, administration = "oral", ...) { if (any(av_name(x, language = NULL) %like% "/" & is.na(out))) { warning_( - "in `av_ddd()`: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", + "in {.help [{.fun av_ddd}](AMR::av_ddd)}: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", "Please refer to the WHOCC website:\n", "atcddd.fhi.no/ddd/list_of_ddds_combined_products/" ) @@ -182,7 +182,7 @@ av_ddd_units <- function(x, administration = "oral", ...) { if (any(av_name(x, language = NULL) %like% "/" & is.na(out))) { warning_( - "in `av_ddd_units()`: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", + "in {.help [{.fun av_ddd_units}](AMR::av_ddd_units)}: DDDs of some combined products are available for different dose combinations and not (yet) part of the AMR package.", "Please refer to the WHOCC website:\n", "atcddd.fhi.no/ddd/list_of_ddds_combined_products/" ) diff --git a/R/key_antimicrobials.R b/R/key_antimicrobials.R index 20b949ed2..0fb749b56 100755 --- a/R/key_antimicrobials.R +++ b/R/key_antimicrobials.R @@ -182,7 +182,7 @@ key_antimicrobials <- function(x = NULL, any(filter, na.rm = TRUE) && message_not_thrown_before("key_antimicrobials", name)) { warning_( - "in `key_antimicrobials()`: ", + "in {.help [{.fun key_antimicrobials}](AMR::key_antimicrobials)}: ", ifelse(values_new_length == 0, "No columns available ", paste0("Only using ", values_new_length, " out of ", values_old_length, " defined columns ") diff --git a/R/mdro.R b/R/mdro.R index 64f332e4d..c1bd4dfae 100755 --- a/R/mdro.R +++ b/R/mdro.R @@ -1888,8 +1888,8 @@ mdro <- function(x = NULL, if (any(x$MDRO == -1, na.rm = TRUE)) { if (message_not_thrown_before("mdro", "availability")) { warning_( - "in `mdro()`: NA introduced for isolates where the available percentage of antimicrobial classes was below ", - percentage(pct_required_classes), " (set with `pct_required_classes`)" + "in {.help [{.fun mdro}](AMR::mdro)}: NA introduced for isolates where the available percentage of antimicrobial classes was below ", + percentage(pct_required_classes), " (set with {.arg pct_required_classes})" ) } # set these -1s to NA diff --git a/R/mic.R b/R/mic.R index ae0ff7813..74e3d8d25 100644 --- a/R/mic.R +++ b/R/mic.R @@ -331,7 +331,7 @@ rescale_mic <- function(x, mic_range, keep_operators = "edges", as.mic = TRUE, r } stop_ifnot( all(mic_range %in% c(VALID_MIC_LEVELS, NA)), - "Values in `mic_range` must be valid MIC values. ", + "Values in {.arg mic_range} must be valid MIC values. ", "The allowed range is ", format(as.double(as.mic(VALID_MIC_LEVELS)[1]), scientific = FALSE), " to ", format(as.double(as.mic(VALID_MIC_LEVELS)[length(VALID_MIC_LEVELS)]), scientific = FALSE), ". ", "Unvalid: ", vector_and(mic_range[!mic_range %in% c(VALID_MIC_LEVELS, NA)], quotes = FALSE), "." ) diff --git a/R/mo.R b/R/mo.R index f9ca68b73..cfac9b427 100755 --- a/R/mo.R +++ b/R/mo.R @@ -1256,14 +1256,14 @@ replace_old_mo_codes <- function(x, property) { } if (property != "mo") { warning_( - "in `mo_", property, "()`: the input contained ", n_matched, + "in {.help [{.fun mo_", property, "}](AMR::mo_", property, ")}: the input contained ", n_matched, " old MO code", ifelse(n_matched == 1, "", "s"), " (", n_unique, "from a previous AMR package version). ", - "Please update your MO codes with `as.mo()` to increase speed." + "Please update your MO codes with {.help [{.fun as.mo}](AMR::as.mo)} to increase speed." ) } else { warning_( - "in `as.mo()`: the input contained ", n_matched, + "in {.help [{.fun as.mo}](AMR::as.mo)}: the input contained ", n_matched, " old MO code", ifelse(n_matched == 1, "", "s"), " (", n_unique, "from a previous AMR package version). ", n_solved, " old MO code", ifelse(n_solved == 1, "", "s"), diff --git a/R/plotting.R b/R/plotting.R index cae705f53..39fb877d9 100755 --- a/R/plotting.R +++ b/R/plotting.R @@ -1590,7 +1590,7 @@ expand_SIR_colours <- function(colours_SIR, unname = TRUE) { # named input: match and reorder stop_ifnot( all(names(colours_SIR) %in% sir_order), - "Unknown names in `colours_SIR`. Expected any of: ", vector_or(levels(NA_sir_), quotes = FALSE, sort = FALSE), "." + "Unknown names in {.arg colours_SIR}. Expected any of: ", vector_or(levels(NA_sir_), quotes = FALSE, sort = FALSE), "." ) if (length(colours_SIR) == 4) { # add colours for SI (same as S) and IR (same as R)