Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding "last" argument to cli_abort #675

Closed
njtierney opened this issue Mar 12, 2024 · 2 comments
Closed

Adding "last" argument to cli_abort #675

njtierney opened this issue Mar 12, 2024 · 2 comments

Comments

@njtierney
Copy link

Hello!

Thanks again for maintaining cli, I feel like I am still discovering nice new features all the time (like diff_chr and diff_str recently!).

I'm wondering if there is an argument to be had for a "last" argument to cli_abort and friends?

Currently the output is limited to using "and".

I can use rlang::arg_match to solve this particular problem, but it feels like a last argument could be something that is more generally useful?

check_valid_fruit <- function(fruit) {
  valid_fruits <- c("apples", "bananas")
  is_valid_fruit <- fruit %in% valid_fruits
  if (!is_valid_fruit) {
    cli::cli_abort(
      message = "{.var {fruit}} must be one of {.var {valid_fruits}}"
      # potential argument option?
      # .last = "or"
    )
  }
}

check_valid_fruit("apples")
check_valid_fruit("lemons")
#> Error in `check_valid_fruit()`:
#> ! `lemons` must be one of `apples` and `bananas`

# this does what I want, but sometimes we don't always want to use 
# arg matching?
check_valid_fruit_arg <- function(fruit) {
  rlang::arg_match0(fruit, c("apples", "bananas"))
}

check_valid_fruit_arg("apples")
#> [1] "apples"
check_valid_fruit_arg("lemons")
#> Error in `check_valid_fruit_arg()`:
#> ! `fruit` must be one of "apples" or "bananas", not "lemons".

Created on 2024-03-12 with reprex v2.1.0

Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.3.3 (2024-02-29)
#>  os       macOS Sonoma 14.3.1
#>  system   aarch64, darwin20
#>  ui       X11
#>  language (EN)
#>  collate  en_US.UTF-8
#>  ctype    en_US.UTF-8
#>  tz       Australia/Hobart
#>  date     2024-03-12
#>  pandoc   3.1.1 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package     * version date (UTC) lib source
#>  cli           3.6.2   2023-12-11 [1] CRAN (R 4.3.1)
#>  digest        0.6.34  2024-01-11 [1] CRAN (R 4.3.1)
#>  evaluate      0.23    2023-11-01 [1] CRAN (R 4.3.1)
#>  fansi         1.0.6   2023-12-08 [1] CRAN (R 4.3.1)
#>  fastmap       1.1.1   2023-02-24 [1] CRAN (R 4.3.0)
#>  fs            1.6.3   2023-07-20 [1] CRAN (R 4.3.0)
#>  glue          1.7.0   2024-01-09 [1] CRAN (R 4.3.1)
#>  htmltools     0.5.7   2023-11-03 [1] CRAN (R 4.3.1)
#>  knitr         1.45    2023-10-30 [1] CRAN (R 4.3.1)
#>  lifecycle     1.0.4   2023-11-07 [1] CRAN (R 4.3.1)
#>  magrittr      2.0.3   2022-03-30 [1] CRAN (R 4.3.0)
#>  pillar        1.9.0   2023-03-22 [1] CRAN (R 4.3.0)
#>  purrr         1.0.2   2023-08-10 [1] CRAN (R 4.3.0)
#>  R.cache       0.16.0  2022-07-21 [2] CRAN (R 4.3.0)
#>  R.methodsS3   1.8.2   2022-06-13 [2] CRAN (R 4.3.0)
#>  R.oo          1.26.0  2024-01-24 [2] CRAN (R 4.3.1)
#>  R.utils       2.12.3  2023-11-18 [2] CRAN (R 4.3.1)
#>  reprex        2.1.0   2024-01-11 [2] CRAN (R 4.3.1)
#>  rlang         1.1.3   2024-01-10 [1] CRAN (R 4.3.1)
#>  rmarkdown     2.25    2023-09-18 [1] CRAN (R 4.3.1)
#>  rstudioapi    0.15.0  2023-07-07 [1] CRAN (R 4.3.0)
#>  sessioninfo   1.2.2   2021-12-06 [2] CRAN (R 4.3.0)
#>  styler        1.10.2  2023-08-29 [2] CRAN (R 4.3.0)
#>  utf8          1.2.4   2023-10-22 [1] CRAN (R 4.3.1)
#>  vctrs         0.6.5   2023-12-01 [1] CRAN (R 4.3.1)
#>  withr         3.0.0   2024-01-16 [1] CRAN (R 4.3.1)
#>  xfun          0.42    2024-02-08 [1] CRAN (R 4.3.1)
#>  yaml          2.3.8   2023-12-11 [1] CRAN (R 4.3.1)
#> 
#>  [1] /Users/nick/Library/R/arm64/4.3/library
#>  [2] /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────

Initially posted about this here: https://community.rstudio.com/t/cli-package-using-or-instead-of-and-as-last-separator/183142/4

@gaborcsardi
Copy link
Member

You can already do this:

fruit <- "fruit"
valid_fruits <- letters[1:4]
cli::cli_abort(
  message = "{.var {fruit}} must be one of {.or {.var {valid_fruits}}}"
)
Error:
! `fruit` must be one of `a`, `b`, `c`, or `d`
Run `rlang::last_trace()` to see where the error occurred.

@njtierney
Copy link
Author

Ah, that's awesome! I didn't know about {.or } - thanks, @gaborcsardi !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants