From 961b3cdb2520b59a771fe6984c86b14589f9e9af Mon Sep 17 00:00:00 2001 From: Milan Malfait Date: Mon, 12 Aug 2024 15:51:51 +0100 Subject: [PATCH 01/13] Add `{lintr}` config --- .lintr | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .lintr diff --git a/.lintr b/.lintr new file mode 100644 index 0000000..1d4a89e --- /dev/null +++ b/.lintr @@ -0,0 +1,4 @@ +linters: linters_with_defaults( + line_length_linter(120) + ) +encoding: "UTF-8" From 61790c2cad49b3f49dea53b3bead499cbc749b40 Mon Sep 17 00:00:00 2001 From: Milan Malfait Date: Mon, 12 Aug 2024 15:52:52 +0100 Subject: [PATCH 02/13] `styler::style_pkg()`; resolve lintr warnings --- R/app_config.R | 23 +++++++++++------------ R/app_server.R | 1 - R/mod_daterange.R | 10 ++++------ R/mod_monthly_count.R | 4 ++-- R/run_app.R | 11 +++++------ tests/spelling.R | 9 ++++++--- tests/testthat/test-golem-recommended.R | 4 ++-- 7 files changed, 30 insertions(+), 32 deletions(-) diff --git a/R/app_config.R b/R/app_config.R index 16c24f3..fb85c38 100644 --- a/R/app_config.R +++ b/R/app_config.R @@ -23,18 +23,17 @@ app_sys <- function(...) { #' #' @noRd get_golem_config <- function( - value, - config = Sys.getenv( - "GOLEM_CONFIG_ACTIVE", - Sys.getenv( - "R_CONFIG_ACTIVE", - "default" - ) - ), - use_parent = TRUE, - # Modify this if your config file is somewhere else - file = app_sys("golem-config.yml") -) { + value, + config = Sys.getenv( + "GOLEM_CONFIG_ACTIVE", + Sys.getenv( + "R_CONFIG_ACTIVE", + "default" + ) + ), + use_parent = TRUE, + # Modify this if your config file is somewhere else + file = app_sys("golem-config.yml")) { config::get( value = value, config = config, diff --git a/R/app_server.R b/R/app_server.R index dec7360..ba7ba74 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -5,7 +5,6 @@ #' @import shiny #' @noRd app_server <- function(input, output, session) { - # TODO: to be replaced by real data, which should be reactive so it responds to filtering options mock_data <- data.frame( concept_id = c(2212648, 2617206, 2212406), diff --git a/R/mod_daterange.R b/R/mod_daterange.R index a11118d..fc0ec3d 100644 --- a/R/mod_daterange.R +++ b/R/mod_daterange.R @@ -19,10 +19,10 @@ mod_date_range_ui <- function(id) { format = "yyyy-mm", ), sliderInput(ns("slider"), "Date range:", - min = as.Date("2019-04-01", "%Y-%m-%d"), - max = as.Date("2024-08-01", "%Y-%m-%d"), - value = c(as.Date("2019-04-01"), as.Date("2024-08-01")), - timeFormat = "%Y-%m" + min = as.Date("2019-04-01", "%Y-%m-%d"), + max = as.Date("2024-08-01", "%Y-%m-%d"), + value = c(as.Date("2019-04-01"), as.Date("2024-08-01")), + timeFormat = "%Y-%m" ) ) } @@ -32,7 +32,5 @@ mod_date_range_ui <- function(id) { #' @noRd mod_date_range_server <- function(id) { moduleServer(id, function(input, output, session) { - ns <- session$ns }) } - diff --git a/R/mod_monthly_count.R b/R/mod_monthly_count.R index feb09fd..734d37d 100644 --- a/R/mod_monthly_count.R +++ b/R/mod_monthly_count.R @@ -7,7 +7,7 @@ #' @noRd #' #' @importFrom shiny NS tagList -mod_monthly_count_ui <- function(id){ +mod_monthly_count_ui <- function(id) { ns <- NS(id) tagList( plotOutput(ns("monthly_count_plot"), height = 250) @@ -23,7 +23,7 @@ mod_monthly_count_server <- function(id) { # Need to get the input data and filter it based on the selected timeframe and selected row # see https://stackoverflow.com/a/77039776/11801854 monthly_count <- data.frame( - date = c("2020-01","2020-02", "2020-03", "2020-04"), + date = c("2020-01", "2020-02", "2020-03", "2020-04"), record_count = c(120, 250, 281, 220) ) output$monthly_count_plot <- renderPlot({ diff --git a/R/run_app.R b/R/run_app.R index 5d60ac1..383ea60 100644 --- a/R/run_app.R +++ b/R/run_app.R @@ -8,12 +8,11 @@ #' @importFrom shiny shinyApp #' @importFrom golem with_golem_options run_app <- function( - onStart = NULL, - options = list(), - enableBookmarking = NULL, - uiPattern = "/", - ... -) { + onStart = NULL, + options = list(), + enableBookmarking = NULL, + uiPattern = "/", + ...) { with_golem_options( app = shinyApp( ui = app_ui, diff --git a/tests/spelling.R b/tests/spelling.R index 6713838..13f77d9 100644 --- a/tests/spelling.R +++ b/tests/spelling.R @@ -1,3 +1,6 @@ -if(requireNamespace('spelling', quietly = TRUE)) - spelling::spell_check_test(vignettes = TRUE, error = FALSE, - skip_on_cran = TRUE) +if (requireNamespace("spelling", quietly = TRUE)) { + spelling::spell_check_test( + vignettes = TRUE, error = FALSE, + skip_on_cran = TRUE + ) +} diff --git a/tests/testthat/test-golem-recommended.R b/tests/testthat/test-golem-recommended.R index b314130..7a5f214 100644 --- a/tests/testthat/test-golem-recommended.R +++ b/tests/testthat/test-golem-recommended.R @@ -51,9 +51,9 @@ test_that( ) # Configure this test to fit your need. -# testServer() function makes it possible to test code in server functions and modules, without needing to run the full Shiny application +# testServer() function makes it possible to test code in server functions and modules, without +# needing to run the full Shiny application testServer(app_server, { - # Set and test an input session$setInputs(x = 2) expect_equal(input$x, 2) From 6008a77a1c059999338e48f20511ba049faa8b45 Mon Sep 17 00:00:00 2001 From: Milan Malfait Date: Mon, 12 Aug 2024 15:56:48 +0100 Subject: [PATCH 03/13] Add linting to CI --- .github/workflows/lint.yaml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/lint.yaml diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 0000000..018b8db --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,34 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master] + pull_request: + branches: [main, master] + +name: lint.yaml + +permissions: read-all + +jobs: + lint: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::lintr, local::. + needs: lint + + - name: Lint + run: lintr::lint_package() + shell: Rscript {0} + env: + LINTR_ERROR_ON_LINT: true From e775f50baaf420cfd36a2bacf77bb8298215880e Mon Sep 17 00:00:00 2001 From: Milan Malfait Date: Mon, 12 Aug 2024 15:58:23 +0100 Subject: [PATCH 04/13] Add PR commands GHA Adds `/document` and `/style` as PR commands --- .github/workflows/pr-commands.yaml | 85 ++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 .github/workflows/pr-commands.yaml diff --git a/.github/workflows/pr-commands.yaml b/.github/workflows/pr-commands.yaml new file mode 100644 index 0000000..2edd93f --- /dev/null +++ b/.github/workflows/pr-commands.yaml @@ -0,0 +1,85 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + issue_comment: + types: [created] + +name: pr-commands.yaml + +permissions: read-all + +jobs: + document: + if: ${{ github.event.issue.pull_request && (github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER') && startsWith(github.event.comment.body, '/document') }} + name: document + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/pr-fetch@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::roxygen2 + needs: pr-document + + - name: Document + run: roxygen2::roxygenise() + shell: Rscript {0} + + - name: commit + run: | + git config --local user.name "$GITHUB_ACTOR" + git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" + git add man/\* NAMESPACE + git commit -m 'Document' + + - uses: r-lib/actions/pr-push@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + style: + if: ${{ github.event.issue.pull_request && (github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER') && startsWith(github.event.comment.body, '/style') }} + name: style + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/pr-fetch@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - uses: r-lib/actions/setup-r@v2 + + - name: Install dependencies + run: install.packages("styler") + shell: Rscript {0} + + - name: Style + run: styler::style_pkg() + shell: Rscript {0} + + - name: commit + run: | + git config --local user.name "$GITHUB_ACTOR" + git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" + git add \*.R + git commit -m 'Style' + + - uses: r-lib/actions/pr-push@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} From dc20ec473a70442ba773a7b99f6b6e8882baebeb Mon Sep 17 00:00:00 2001 From: Milan Malfait Date: Mon, 12 Aug 2024 16:40:24 +0100 Subject: [PATCH 05/13] Add `lintr` as dev dependency --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index d3f5a85..e6aeb7b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -16,7 +16,8 @@ Suggests: usethis, styler, testthat (>= 3.0.0), - spelling + spelling, + lintr Encoding: UTF-8 LazyData: true RoxygenNote: 7.3.2 From 9c4b88055f7b9a77d810f7ff0df774c21e17de38 Mon Sep 17 00:00:00 2001 From: Milan Malfait Date: Mon, 12 Aug 2024 16:45:34 +0100 Subject: [PATCH 06/13] Resolve `lintr` warnings --- R/app_server.R | 2 +- R/run_app.R | 12 ++++++------ tests/testthat/test-golem-recommended.R | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index ba7ba74..9984fe9 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -9,7 +9,7 @@ app_server <- function(input, output, session) { mock_data <- data.frame( concept_id = c(2212648, 2617206, 2212406), name = c( - "Blood count; complete (CBC), automated (Hgb, Hct, RBC, WBC and platelet count) and automated differential WBC count", + "Blood count; complete (CBC), automated (Hgb, Hct, RBC, WBC and platelet count) and automated differential WBC count", # nolint "Prostate specific antigen test (psa)", "Homocysteine" ), diff --git a/R/run_app.R b/R/run_app.R index 383ea60..6a10eb6 100644 --- a/R/run_app.R +++ b/R/run_app.R @@ -8,19 +8,19 @@ #' @importFrom shiny shinyApp #' @importFrom golem with_golem_options run_app <- function( - onStart = NULL, + on_start = NULL, options = list(), - enableBookmarking = NULL, - uiPattern = "/", + enable_bookmarking = NULL, + ui_pattern = "/", ...) { with_golem_options( app = shinyApp( ui = app_ui, server = app_server, - onStart = onStart, + onStart = on_start, options = options, - enableBookmarking = enableBookmarking, - uiPattern = uiPattern + enableBookmarking = enable_bookmarking, + uiPattern = ui_pattern ), golem_opts = list(...) ) diff --git a/tests/testthat/test-golem-recommended.R b/tests/testthat/test-golem-recommended.R index 7a5f214..8704b81 100644 --- a/tests/testthat/test-golem-recommended.R +++ b/tests/testthat/test-golem-recommended.R @@ -58,11 +58,13 @@ testServer(app_server, { session$setInputs(x = 2) expect_equal(input$x, 2) + # nolint start # Example of tests you can do on the server: # - Checking reactiveValues # expect_equal(r$lg, 'EN') # - Checking output # expect_equal(output$txt, "Text") + # nolint end }) # Configure this test to fit your need From 511df465206b3ab3d1dadfa53f21e8de407e8902 Mon Sep 17 00:00:00 2001 From: Milan Malfait <38256462+milanmlft@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:17:51 +0100 Subject: [PATCH 07/13] Add `.lintr` to buildignore --- .Rbuildignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.Rbuildignore b/.Rbuildignore index 7cad094..d769952 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -9,3 +9,4 @@ $run_dev.* ^.here$ ^LICENSE\.md$ ^\.github$ +^\.lintr$ From fe672c54fd1504cdc88f466ded70a58b537af02c Mon Sep 17 00:00:00 2001 From: Milan Malfait <38256462+milanmlft@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:18:03 +0100 Subject: [PATCH 08/13] Roxygenise --- man/run_app.Rd | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/man/run_app.Rd b/man/run_app.Rd index c6c36f7..4721a85 100644 --- a/man/run_app.Rd +++ b/man/run_app.Rd @@ -5,34 +5,20 @@ \title{Run the Shiny Application} \usage{ run_app( - onStart = NULL, + on_start = NULL, options = list(), - enableBookmarking = NULL, - uiPattern = "/", + enable_bookmarking = NULL, + ui_pattern = "/", ... ) } \arguments{ -\item{onStart}{A function that will be called before the app is actually run. -This is only needed for \code{shinyAppObj}, since in the \code{shinyAppDir} -case, a \code{global.R} file can be used for this purpose.} - \item{options}{Named options that should be passed to the \code{runApp} call (these can be any of the following: "port", "launch.browser", "host", "quiet", "display.mode" and "test.mode"). You can also specify \code{width} and \code{height} parameters which provide a hint to the embedding environment about the ideal height/width for the app.} -\item{enableBookmarking}{Can be one of \code{"url"}, \code{"server"}, or -\code{"disable"}. The default value, \code{NULL}, will respect the setting from -any previous calls to \code{\link[shiny:enableBookmarking]{enableBookmarking()}}. See \code{\link[shiny:enableBookmarking]{enableBookmarking()}} -for more information on bookmarking your app.} - -\item{uiPattern}{A regular expression that will be applied to each \code{GET} -request to determine whether the \code{ui} should be used to handle the -request. Note that the entire request path must match the regular -expression in order for the match to be considered successful.} - \item{...}{arguments to pass to golem_opts. See `?golem::get_golem_options` for more details.} } From 909a411ce8524d12295bcef034dba341681c4a12 Mon Sep 17 00:00:00 2001 From: Milan Malfait <38256462+milanmlft@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:37:34 +0100 Subject: [PATCH 09/13] Switch back to `camelCase` for `ShinyApp` args --- R/run_app.R | 12 ++++++------ man/run_app.Rd | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/R/run_app.R b/R/run_app.R index 6a10eb6..383ea60 100644 --- a/R/run_app.R +++ b/R/run_app.R @@ -8,19 +8,19 @@ #' @importFrom shiny shinyApp #' @importFrom golem with_golem_options run_app <- function( - on_start = NULL, + onStart = NULL, options = list(), - enable_bookmarking = NULL, - ui_pattern = "/", + enableBookmarking = NULL, + uiPattern = "/", ...) { with_golem_options( app = shinyApp( ui = app_ui, server = app_server, - onStart = on_start, + onStart = onStart, options = options, - enableBookmarking = enable_bookmarking, - uiPattern = ui_pattern + enableBookmarking = enableBookmarking, + uiPattern = uiPattern ), golem_opts = list(...) ) diff --git a/man/run_app.Rd b/man/run_app.Rd index 4721a85..c6c36f7 100644 --- a/man/run_app.Rd +++ b/man/run_app.Rd @@ -5,20 +5,34 @@ \title{Run the Shiny Application} \usage{ run_app( - on_start = NULL, + onStart = NULL, options = list(), - enable_bookmarking = NULL, - ui_pattern = "/", + enableBookmarking = NULL, + uiPattern = "/", ... ) } \arguments{ +\item{onStart}{A function that will be called before the app is actually run. +This is only needed for \code{shinyAppObj}, since in the \code{shinyAppDir} +case, a \code{global.R} file can be used for this purpose.} + \item{options}{Named options that should be passed to the \code{runApp} call (these can be any of the following: "port", "launch.browser", "host", "quiet", "display.mode" and "test.mode"). You can also specify \code{width} and \code{height} parameters which provide a hint to the embedding environment about the ideal height/width for the app.} +\item{enableBookmarking}{Can be one of \code{"url"}, \code{"server"}, or +\code{"disable"}. The default value, \code{NULL}, will respect the setting from +any previous calls to \code{\link[shiny:enableBookmarking]{enableBookmarking()}}. See \code{\link[shiny:enableBookmarking]{enableBookmarking()}} +for more information on bookmarking your app.} + +\item{uiPattern}{A regular expression that will be applied to each \code{GET} +request to determine whether the \code{ui} should be used to handle the +request. Note that the entire request path must match the regular +expression in order for the match to be considered successful.} + \item{...}{arguments to pass to golem_opts. See `?golem::get_golem_options` for more details.} } From 1a13a46679d6dfb056107e881da97efd1dff71d4 Mon Sep 17 00:00:00 2001 From: Milan Malfait <38256462+milanmlft@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:38:05 +0100 Subject: [PATCH 10/13] Allow `camelCase` object names Often used in Shiny arguments --- .lintr | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.lintr b/.lintr index 1d4a89e..ba8f1a3 100644 --- a/.lintr +++ b/.lintr @@ -1,4 +1,5 @@ linters: linters_with_defaults( - line_length_linter(120) + line_length_linter(120), + object_name_linter(styles = c("snake_case", "symbols", "camelCase")) ) encoding: "UTF-8" From b89cb8cd3140fe40aa672e65485a8253d5a9a3da Mon Sep 17 00:00:00 2001 From: Milan Malfait <38256462+milanmlft@users.noreply.github.com> Date: Tue, 13 Aug 2024 17:30:12 +0100 Subject: [PATCH 11/13] Use `setup-renv` instead of `setup-r-dependencies` See https://github.com/r-lib/actions/issues/911 --- .github/workflows/R-CMD-check.yaml | 9 +++++---- .github/workflows/lint.yaml | 9 +++++---- .github/workflows/pr-commands.yaml | 9 +++++---- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index a5ee068..0340f9a 100644 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -23,10 +23,11 @@ jobs: with: use-public-rspm: true - - uses: r-lib/actions/setup-r-dependencies@v2 - with: - extra-packages: any::rcmdcheck - needs: check + - uses: r-lib/actions/setup-renv@v2 + + - name: Install rcmdcheck + run: install.packages("rcmdcheck") + shell: Rscript {0} - uses: r-lib/actions/check-r-package@v2 with: diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 018b8db..331ef75 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -22,10 +22,11 @@ jobs: with: use-public-rspm: true - - uses: r-lib/actions/setup-r-dependencies@v2 - with: - extra-packages: any::lintr, local::. - needs: lint + - uses: r-lib/actions/setup-renv@v2 + + - name: Install lintr + run: install.packages("lintr") + shell: Rscript {0} - name: Lint run: lintr::lint_package() diff --git a/.github/workflows/pr-commands.yaml b/.github/workflows/pr-commands.yaml index 2edd93f..a8cda62 100644 --- a/.github/workflows/pr-commands.yaml +++ b/.github/workflows/pr-commands.yaml @@ -28,10 +28,11 @@ jobs: with: use-public-rspm: true - - uses: r-lib/actions/setup-r-dependencies@v2 - with: - extra-packages: any::roxygen2 - needs: pr-document + - uses: r-lib/actions/setup-renv@v2 + + - name: Install roxygen2 + run: install.packages("roxygen2") + shell: Rscript {0} - name: Document run: roxygen2::roxygenise() From 18c06db6e4156aa2f00b0f4664118041502121aa Mon Sep 17 00:00:00 2001 From: Milan Malfait <38256462+milanmlft@users.noreply.github.com> Date: Wed, 14 Aug 2024 10:41:40 +0100 Subject: [PATCH 12/13] Switch renv `snapshot.type` setting to `"implicit"` Needed to capture dev dependencies --- renv/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renv/settings.json b/renv/settings.json index 74c1d4b..ffdbb32 100644 --- a/renv/settings.json +++ b/renv/settings.json @@ -10,7 +10,7 @@ "ppm.enabled": null, "ppm.ignored.urls": [], "r.version": null, - "snapshot.type": "explicit", + "snapshot.type": "implicit", "use.cache": true, "vcs.ignore.cellar": true, "vcs.ignore.library": true, From 6c13c16da42c6fa8b931697eea78772afb995ea1 Mon Sep 17 00:00:00 2001 From: Milan Malfait <38256462+milanmlft@users.noreply.github.com> Date: Wed, 14 Aug 2024 10:50:13 +0100 Subject: [PATCH 13/13] Update renv --- renv.lock | 822 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 822 insertions(+) diff --git a/renv.lock b/renv.lock index 88754af..7466935 100644 --- a/renv.lock +++ b/renv.lock @@ -89,6 +89,38 @@ ], "Hash": "f27411eb6d9c3dada5edd444b8416675" }, + "askpass": { + "Package": "askpass", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "sys" + ], + "Hash": "cad6cf7f1d5f6e906700b9d3e718c796" + }, + "attachment": { + "Package": "attachment", + "Version": "0.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "desc", + "glue", + "knitr", + "magrittr", + "rmarkdown", + "roxygen2", + "stats", + "stringr", + "utils", + "withr", + "yaml" + ], + "Hash": "6fb32c60d80a143293aabd0f2aa80597" + }, "attempt": { "Package": "attempt", "Version": "0.3.1", @@ -109,6 +141,23 @@ ], "Hash": "543776ae6848fde2f48ff3816d0628bc" }, + "brew": { + "Package": "brew", + "Version": "1.0-10", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "8f4a384e19dccd8c65356dc096847b76" + }, + "brio": { + "Package": "brio", + "Version": "1.1.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "c1ee497a6d999947c2c224ae46799b1a" + }, "bslib": { "Package": "bslib", "Version": "0.8.0", @@ -142,6 +191,19 @@ ], "Hash": "cd9a672193789068eb5a2aad65a0dedf" }, + "callr": { + "Package": "callr", + "Version": "3.7.6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "processx", + "utils" + ], + "Hash": "d7e13f49c19103ece9e58ad2d83a7354" + }, "cli": { "Package": "cli", "Version": "3.6.3", @@ -153,6 +215,16 @@ ], "Hash": "b21916dd77a27642b447374a5d30ecf3" }, + "clipr": { + "Package": "clipr", + "Version": "0.8.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "utils" + ], + "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" + }, "colorspace": { "Package": "colorspace", "Version": "2.1-1", @@ -184,6 +256,16 @@ ], "Hash": "8b7222e9d9eb5178eea545c0c4d33fc2" }, + "cpp11": { + "Package": "cpp11", + "Version": "0.4.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "5a295d7d963cc5035284dcdbaf334f4e" + }, "crayon": { "Package": "crayon", "Version": "1.5.3", @@ -196,6 +278,20 @@ ], "Hash": "859d96e65ef198fd43e82b9628d593ef" }, + "credentials": { + "Package": "credentials", + "Version": "2.0.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "askpass", + "curl", + "jsonlite", + "openssl", + "sys" + ], + "Hash": "c7844b32098dcbd1c59cbd8dddb4ecc6" + }, "crosstalk": { "Package": "crosstalk", "Version": "1.2.1", @@ -209,6 +305,78 @@ ], "Hash": "ab12c7b080a57475248a30f4db6298c0" }, + "curl": { + "Package": "curl", + "Version": "5.2.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "411ca2c03b1ce5f548345d2fc2685f7a" + }, + "desc": { + "Package": "desc", + "Version": "1.4.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "utils" + ], + "Hash": "99b79fcbd6c4d1ce087f5c5c758b384f" + }, + "devtools": { + "Package": "devtools", + "Version": "2.4.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "desc", + "ellipsis", + "fs", + "lifecycle", + "memoise", + "miniUI", + "pkgbuild", + "pkgdown", + "pkgload", + "profvis", + "rcmdcheck", + "remotes", + "rlang", + "roxygen2", + "rversions", + "sessioninfo", + "stats", + "testthat", + "tools", + "urlchecker", + "usethis", + "utils", + "withr" + ], + "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb" + }, + "diffobj": { + "Package": "diffobj", + "Version": "0.3.5", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "crayon", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" + }, "digest": { "Package": "digest", "Version": "0.6.36", @@ -220,6 +388,37 @@ ], "Hash": "fd6824ad91ede64151e93af67df6376b" }, + "downlit": { + "Package": "downlit", + "Version": "0.4.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "brio", + "desc", + "digest", + "evaluate", + "fansi", + "memoise", + "rlang", + "vctrs", + "withr", + "yaml" + ], + "Hash": "45a6a596bf0108ee1ff16a040a2df897" + }, + "ellipsis": { + "Package": "ellipsis", + "Version": "0.3.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "rlang" + ], + "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" + }, "evaluate": { "Package": "evaluate", "Version": "0.24.0", @@ -280,6 +479,21 @@ ], "Hash": "15aeb8c27f5ea5161f9f6a641fafd93a" }, + "gert": { + "Package": "gert", + "Version": "2.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "askpass", + "credentials", + "openssl", + "rstudioapi", + "sys", + "zip" + ], + "Hash": "bdc909d9f16e2478d615b0e6a7330435" + }, "ggplot2": { "Package": "ggplot2", "Version": "3.5.1", @@ -305,6 +519,34 @@ ], "Hash": "44c6a2f8202d5b7e878ea274b1092426" }, + "gh": { + "Package": "gh", + "Version": "1.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "gitcreds", + "glue", + "httr2", + "ini", + "jsonlite", + "lifecycle", + "rlang" + ], + "Hash": "fbbbc48eba7a6626a08bb365e44b563b" + }, + "gitcreds": { + "Package": "gitcreds", + "Version": "0.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" + }, "glue": { "Package": "glue", "Version": "1.7.0", @@ -416,6 +658,61 @@ ], "Hash": "d55aa087c47a63ead0f6fc10f8fa1ee0" }, + "httr": { + "Package": "httr", + "Version": "1.4.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "curl", + "jsonlite", + "mime", + "openssl" + ], + "Hash": "ac107251d9d9fd72f0ca8049988f1d7f" + }, + "httr2": { + "Package": "httr2", + "Version": "1.0.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "cli", + "curl", + "glue", + "lifecycle", + "magrittr", + "openssl", + "rappdirs", + "rlang", + "vctrs", + "withr" + ], + "Hash": "320c8fe23fcb25a6690ef7bdb6a3a705" + }, + "hunspell": { + "Package": "hunspell", + "Version": "3.0.3", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "Rcpp", + "digest" + ], + "Hash": "e957e989ea17f937964f0d46b0f0bca0" + }, + "ini": { + "Package": "ini", + "Version": "0.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "6154ec2223172bce8162d4153cda21f7" + }, "isoband": { "Package": "isoband", "Version": "0.2.7", @@ -571,6 +868,18 @@ ], "Hash": "18e9c28c1d3ca1560ce30658b22ce104" }, + "miniUI": { + "Package": "miniUI", + "Version": "0.1.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "htmltools", + "shiny", + "utils" + ], + "Hash": "fec5f52652d60615fdb3957b3d74324a" + }, "munsell": { "Package": "munsell", "Version": "0.5.1", @@ -596,6 +905,16 @@ ], "Hash": "2769a88be217841b1f33ed469675c3cc" }, + "openssl": { + "Package": "openssl", + "Version": "2.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "askpass" + ], + "Hash": "2bcca3848e4734eb3b16103bc9aa4b8e" + }, "pillar": { "Package": "pillar", "Version": "1.9.0", @@ -613,6 +932,21 @@ ], "Hash": "15da5a8412f317beeee6175fbc76f4bb" }, + "pkgbuild": { + "Package": "pkgbuild", + "Version": "1.4.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "desc", + "processx" + ], + "Hash": "a29e8e134a460a01e0ca67a4763c595b" + }, "pkgconfig": { "Package": "pkgconfig", "Version": "2.0.3", @@ -623,6 +957,103 @@ ], "Hash": "01f28d4278f15c76cddbea05899c5d6f" }, + "pkgdown": { + "Package": "pkgdown", + "Version": "2.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "bslib", + "callr", + "cli", + "desc", + "digest", + "downlit", + "fontawesome", + "fs", + "httr2", + "jsonlite", + "openssl", + "purrr", + "ragg", + "rlang", + "rmarkdown", + "tibble", + "whisker", + "withr", + "xml2", + "yaml" + ], + "Hash": "0d3d789055c873f48521ce7e23c23f48" + }, + "pkgload": { + "Package": "pkgload", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "desc", + "fs", + "glue", + "lifecycle", + "methods", + "pkgbuild", + "processx", + "rlang", + "rprojroot", + "utils", + "withr" + ], + "Hash": "2ec30ffbeec83da57655b850cf2d3e0e" + }, + "praise": { + "Package": "praise", + "Version": "1.0.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "a555924add98c99d2f411e37e7d25e9f" + }, + "prettyunits": { + "Package": "prettyunits", + "Version": "1.2.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R" + ], + "Hash": "6b01fc98b1e86c4f705ce9dcfd2f57c7" + }, + "processx": { + "Package": "processx", + "Version": "3.8.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "ps", + "utils" + ], + "Hash": "0c90a7d71988856bad2a2a45dd871bb9" + }, + "profvis": { + "Package": "profvis", + "Version": "0.3.8", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "htmlwidgets", + "purrr", + "rlang", + "stringr", + "vctrs" + ], + "Hash": "aa5a3864397ce6ae03458f98618395a1" + }, "promises": { "Package": "promises", "Version": "1.3.0", @@ -639,6 +1070,43 @@ ], "Hash": "434cd5388a3979e74be5c219bcd6e77d" }, + "ps": { + "Package": "ps", + "Version": "1.7.7", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "utils" + ], + "Hash": "878b467580097e9c383acbb16adab57a" + }, + "purrr": { + "Package": "purrr", + "Version": "1.0.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "lifecycle", + "magrittr", + "rlang", + "vctrs" + ], + "Hash": "1cba04a4e9414bdefc9dcaa99649a8dc" + }, + "ragg": { + "Package": "ragg", + "Version": "1.3.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "systemfonts", + "textshaping" + ], + "Hash": "e3087db406e079a8a2fd87f413918ed3" + }, "rappdirs": { "Package": "rappdirs", "Version": "0.3.3", @@ -649,6 +1117,59 @@ ], "Hash": "5e3c5dc0b071b21fa128676560dbe94d" }, + "rcmdcheck": { + "Package": "rcmdcheck", + "Version": "1.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R6", + "callr", + "cli", + "curl", + "desc", + "digest", + "pkgbuild", + "prettyunits", + "rprojroot", + "sessioninfo", + "utils", + "withr", + "xopen" + ], + "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" + }, + "rematch": { + "Package": "rematch", + "Version": "2.0.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "cbff1b666c6fa6d21202f07e2318d4f1" + }, + "rematch2": { + "Package": "rematch2", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "tibble" + ], + "Hash": "76c9e04c712a05848ae7a23d2f170a40" + }, + "remotes": { + "Package": "remotes", + "Version": "2.5.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "methods", + "stats", + "tools", + "utils" + ], + "Hash": "3ee025083e66f18db6cf27b56e23e141" + }, "renv": { "Package": "renv", "Version": "1.0.7", @@ -659,6 +1180,32 @@ ], "Hash": "397b7b2a265bc5a7a06852524dabae20" }, + "rhub": { + "Package": "rhub", + "Version": "2.0.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "callr", + "cli", + "curl", + "desc", + "gert", + "gitcreds", + "glue", + "jsonlite", + "pkgbuild", + "processx", + "rappdirs", + "rematch", + "rprojroot", + "utils", + "whoami" + ], + "Hash": "403efdc0d221efb38e2eccdfdc5f4b25" + }, "rlang": { "Package": "rlang", "Version": "1.1.4", @@ -693,6 +1240,32 @@ ], "Hash": "27f9502e1cdbfa195f94e03b0f517484" }, + "roxygen2": { + "Package": "roxygen2", + "Version": "7.3.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "brew", + "cli", + "commonmark", + "cpp11", + "desc", + "knitr", + "methods", + "pkgload", + "purrr", + "rlang", + "stringi", + "stringr", + "utils", + "withr", + "xml2" + ], + "Hash": "6ee25f9054a70f44d615300ed531ba8d" + }, "rprojroot": { "Package": "rprojroot", "Version": "2.0.4", @@ -703,6 +1276,25 @@ ], "Hash": "4c8415e0ec1e29f3f4f6fc108bef0144" }, + "rstudioapi": { + "Package": "rstudioapi", + "Version": "0.16.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "96710351d642b70e8f02ddeb237c46a7" + }, + "rversions": { + "Package": "rversions", + "Version": "2.1.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "curl", + "utils", + "xml2" + ], + "Hash": "a9881dfed103e83f9de151dc17002cd1" + }, "sass": { "Package": "sass", "Version": "0.4.9", @@ -737,6 +1329,19 @@ ], "Hash": "c19df082ba346b0ffa6f833e92de34d1" }, + "sessioninfo": { + "Package": "sessioninfo", + "Version": "1.2.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "tools", + "utils" + ], + "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" + }, "shiny": { "Package": "shiny", "Version": "1.9.1", @@ -780,6 +1385,110 @@ ], "Hash": "5f5a7629f956619d519205ec475fe647" }, + "spelling": { + "Package": "spelling", + "Version": "2.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "commonmark", + "hunspell", + "knitr", + "xml2" + ], + "Hash": "632e9e83d3dc774d361b9415b15642bb" + }, + "stringi": { + "Package": "stringi", + "Version": "1.8.4", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "stats", + "tools", + "utils" + ], + "Hash": "39e1144fd75428983dc3f63aa53dfa91" + }, + "stringr": { + "Package": "stringr", + "Version": "1.5.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "glue", + "lifecycle", + "magrittr", + "rlang", + "stringi", + "vctrs" + ], + "Hash": "960e2ae9e09656611e0b8214ad543207" + }, + "sys": { + "Package": "sys", + "Version": "3.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "3a1be13d68d47a8cd0bfd74739ca1555" + }, + "systemfonts": { + "Package": "systemfonts", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cpp11", + "lifecycle" + ], + "Hash": "213b6b8ed5afbf934843e6c3b090d418" + }, + "testthat": { + "Package": "testthat", + "Version": "3.2.1.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "R6", + "brio", + "callr", + "cli", + "desc", + "digest", + "evaluate", + "jsonlite", + "lifecycle", + "magrittr", + "methods", + "pkgload", + "praise", + "processx", + "ps", + "rlang", + "utils", + "waldo", + "withr" + ], + "Hash": "3f6e7e5e2220856ff865e4834766bf2b" + }, + "textshaping": { + "Package": "textshaping", + "Version": "0.4.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cpp11", + "lifecycle", + "systemfonts" + ], + "Hash": "5142f8bc78ed3d819d26461b641627ce" + }, "tibble": { "Package": "tibble", "Version": "3.2.1", @@ -809,6 +1518,51 @@ ], "Hash": "cfbad971a71f0e27cec22e544a08bc3b" }, + "urlchecker": { + "Package": "urlchecker", + "Version": "1.0.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "curl", + "tools", + "xml2" + ], + "Hash": "409328b8e1253c8d729a7836fe7f7a16" + }, + "usethis": { + "Package": "usethis", + "Version": "3.0.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "clipr", + "crayon", + "curl", + "desc", + "fs", + "gert", + "gh", + "glue", + "jsonlite", + "lifecycle", + "purrr", + "rappdirs", + "rlang", + "rprojroot", + "rstudioapi", + "stats", + "utils", + "whisker", + "withr", + "yaml" + ], + "Hash": "b2fbf93c2127bedd2cbe9b799530d5d2" + }, "utf8": { "Package": "utf8", "Version": "1.2.4", @@ -843,6 +1597,43 @@ ], "Hash": "c826c7c4241b6fc89ff55aaea3fa7491" }, + "waldo": { + "Package": "waldo", + "Version": "0.5.2", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "diffobj", + "fansi", + "glue", + "methods", + "rematch2", + "rlang", + "tibble" + ], + "Hash": "c7d3fd6d29ab077cbac8f0e2751449e6" + }, + "whisker": { + "Package": "whisker", + "Version": "0.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "c6abfa47a46d281a7d5159d0a8891e88" + }, + "whoami": { + "Package": "whoami", + "Version": "1.3.0", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "httr", + "jsonlite", + "utils" + ], + "Hash": "ef0f4d9b8f2cc2ebeccae1d725b8a023" + }, "withr": { "Package": "withr", "Version": "3.0.1", @@ -867,6 +1658,30 @@ ], "Hash": "00ce32f398db0415dde61abfef11300c" }, + "xml2": { + "Package": "xml2", + "Version": "1.3.6", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "cli", + "methods", + "rlang" + ], + "Hash": "1d0336142f4cd25d8d23cd3ba7a8fb61" + }, + "xopen": { + "Package": "xopen", + "Version": "1.0.1", + "Source": "Repository", + "Repository": "CRAN", + "Requirements": [ + "R", + "processx" + ], + "Hash": "423df1e86d5533fcb73c6b02b4923b49" + }, "xtable": { "Package": "xtable", "Version": "1.8-4", @@ -885,6 +1700,13 @@ "Source": "Repository", "Repository": "CRAN", "Hash": "51dab85c6c98e50a18d7551e9d49f76c" + }, + "zip": { + "Package": "zip", + "Version": "2.3.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "fcc4bd8e6da2d2011eb64a5e5cc685ab" } } }