Developpment de package avec {fusen} & {attachment} : charger les fonctions du flat, gérer les qmd et auto-remplissage du champ Remotes

Author : Sébastien Rochette
Tags : astuces, développement, fusen, package, Rmarkdown, thinkrverse
Date :

L’un des objectifs de nos packages open-source chez ThinkR est de faciliter nos flux de travail de développement. {attachment} et {fusen} sont développés et maintenus pour faciliter le développement et la maintenance des paquets. Inception… S’ils nous aident tous les jours, ils peuvent probablement vous aider aussi ! Dans cet article de blog, je vous présente les dernières modifications de ces deux packages.

Si vous voulez savoir comment ils fonctionnent pour votre vie de tous les jours, vous pouvez consulter les Readmes :

hex log of fusen package

Installer depuis r-universe

Ces deux paquets sont disponibles sur CRAN.
Cependant, si vous souhaitez obtenir la dernière version, sans être contraint par GitHub (token nécessaire, certaines service IT bloquant GitHub, …), vous pouvez les installer en utilisant https://thinkr-open.r-universe.dev/ comme dépôt de sources.

# Enable repository from thinkr-open
options(repos = c(
  thinkropen = 'https://thinkr-open.r-universe.dev',
  CRAN = 'https://cloud.r-project.org'))
# Download and install attachment & fusen in R
install.packages('attachment')
install.packages('fusen')

La R-runiverse est une formidable plateforme lancée et développée par Jeroen Ooms pour ROpenSci.
La plateforme R-universe permet de rechercher et d’installer des paquets R provenant directement des développeurs, sans risque qu’ils soient supprimés sans le consentement de ces mêmes développeurs.
Vous avez directement accès à la documentation, ainsi qu’aux indicateurs de maintenance des paquets.

:name status badge
:total status badge

Rapides Nouveautés dans {fusen} v0.4.1

Nouvelles fonctionnalités

Voir ci-dessous une description plus longue

  • Charger tous les “chunks” de fonction du fichier “flat” actuellement ouvert avec load_flat_functions() (Comme un load_all() pour un fichier plat)
  • Possibilité de inflate() un fichier plat Quarto “.qmd” (#160)

Minor

  • Fix HTML5 doc

Rapides Nouveautés dans {attachment} v0.3.0

Nouvelles fonctionnalités

Voir ci-dessous une description plus longue

  • find_remotes() et set_remotes_to_desc() détectent maintenant les installations GitHub, GitLab, git, Bitbucket, locales à ajouter à la partie “Remotes :” du fichier DESCRIPTION (@MurielleDelmotte)
  • Les documents Quarto peuvent être traités avec att_from_qmds() comme un alias de att_from_rmds().

Minor changes

  • Mise à jour de la documentation pour bookdown et quarto sur l’extraction des dépendances

Bug fixes

  • Permet d’utiliser les dépendances après att_amend_desc() #52
  • Correction des problèmes HTML5 avec la mise à jour de {roxygen2}.

hex log of fusen package

{fusen} – Puis-je charger toutes les fonctions du fichier “flat” actuel pendant le développement sans avoir à inflate() ?

Oui. Vous pouvez exécuter et charger uniquement les “chunk” function dans le fichier plat actuellement ouvert avec load_flat_functions().
Avec un long fichier plat en cours de développement, et avant inflate(), il est parfois difficile d’exécuter tous les chunks nécessaires après de multiples modifications. Cela peut aussi être utile lorsque vous recommencez votre développement le lendemain.

load_flat_functions() est comme un load_all() pour un fichier plat, bien qu’il ne tienne pas compte des dépendances.

Dans la console, exécutez :

fusen::load_flat_functions()

Vous pouvez également exécuter des “chunks” function d’un fichier plat spécifique avec :

fusen::load_flat_functions(flat_file = "dev/flat_full.Rmd")

{fusen} – Puis-je gonfler un fichier Quarto qmd ?

Oui, c’est possible. Tant que ce que vous incluez dans votre fichier plat qmd est correct pour une vignette de package R, vous pouvez utiliser le format qmd.
Cela ne changera pas vraiment la sortie de quoi que ce soit puisque le fichier plat n’est pas destiné à être rendu.
La vignette créée à partir de ce fichier plat sera toujours un fichier Rmd.
Mais pourquoi pas ?

Vous pouvez donc ajouter un fichier plat et changer son extension en “.qmd” si ça vous dit.

{attachment} – Proposer du contenu pour le champ “Remotes” de votre DESCRIPTION

set_remotes_to_desc() ajoute les paquets qui ont été installés depuis une autre source que le CRAN au champ Remotes: de DESCRIPTION.

Par exemple :

  • Pour GitHub : Remotes: thinkr-open/attachment
  • Pour GitLab : Remotes: gitlab::jimhester/covr
  • Pour Git : Remotes: git::https://theurl/package_git.git
  • Pour un package local : Remotes: local::c:\mylocalpackage ou Remotes: local::subdir/mylocalpackage
  • Pour Bioconductor : Remotes: bioc::3.3/package_bioc

Vous pourriez vouloir l’exécuter après att_amend_desc().

att_amend_desc() %>%
  set_remotes_to_desc()

Si vous voulez seulement savoir si des paquets ont été installés à partir d’une autre source que CRAN, sans modifier DESCRIPTION, vous pouvez utiliser find_remotes().

Vous pouvez l’utiliser sur un vecteur de noms de packages

find_remotes(pkg = c("attachment", "desc", "glue"))

Vous pouvez également vouloir le combiner à att_from_description().

att_from_description() %>%
  find_remotes()

{attachment} – Utiliser {attachment} avec {bookdown} / {pagedown} / {quarto} et les dépendances du code inclu

Les dépendances de votre Bookdown peuvent être automatiquement découvertes et installées si vous utilisez un fichier “DESCRIPTION” en combinaison avec {attachment}.
En effet, vous pouvez utiliser cette procédure pour créer le fichier DESCRIPTION pour une installation locale ou pour une intégration continue avec les pages GitLab ou les GitHub Actions.
Voir par exemple les flux de travail GitLab CI dans {gitlabr} : https://github.com/statnmap/gitlabr/tree/main/inst/gitlab-ci

  1. Créer un fichier “DESCRIPTION
usethis::use_description()
  1. Remplissez le fichier “DESCRIPTION” en utilisant attachment::att_to_desc_from_is().
    Notez que pour l’inclure directement dans CI (comme proposé dans les templates {gitlabr}), vous devrez peut-être définir att_to_desc_from_is(must.exist = FALSE).
    Notez que att_from_rmds() fonctionne également pour les documents “.qmd”. Vous pouvez utiliser att_from_qmds() si vous le souhaitez, bien que pour l’instant il n’y ait aucune différence et qu’il analysera également les documents “.Rmd”.
# bookdown Imports are in Rmds
imports <- c("bookdown", attachment::att_from_rmds("."))
attachment::att_to_desc_from_is(
  path.d = "DESCRIPTION",
  imports = imports, suggests = NULL, 
  must.exist = FALSE
)
  1. Installer les dépendances depuis le fichier DESCRIPTION
# install.packages("remotes")
remotes::install_deps()
  1. Construire votr {bookdown} / {pagedown} / {quarto}

 

hex log of fusen package

{attachment} et {fusen} travaillent ensemble dans vos flux de travail

Une note rapide pour vous rappeler que {fusen} utilise {attachment} en arrière-plan.

Si vous réalisez un inflate() de votre fichier plat, alors attachment::att_amend_desc() sera aussi exécuté.
Comme il est lancé sans option, vous pouvez empêcher {attachment} d’être lancé avec :

fusen::inflate(document = FALSE)
# I would add this line after, to jump to your own version of attachment::att_amend_desc()
rstudioapi::navigateToFile("dev/0-dev_history.Rmd", line = 92)

Ensuite, dans votre “dev/0-dev_history.Rmd”, vous pouvez ajouter votre propre code spécifique.
Par exemple, dans {attachment} lui-même, dans “dev/dev_history.R”, vous pouvez trouver ceci :

attachment::att_amend_desc(
  pkg_ignore = c("remotes", "i", "usethis", "rstudioapi", "renv",
                 "gitlab", "git", "local", "find.rscript", "bioc"), #i
  extra.suggests = c("testthat", "rstudioapi", "renv", "lifecycle"), #"pkgdown", "covr",
  dir.t = "",
  normalize = FALSE)

Profitez de ces deux packages individuellement ou en les combinant !


Comments


Also read

{golem} 0.3.2

2022-03-11 / Colin Fay