diff --git a/guix/import/cran.scm b/guix/import/cran.scm index a53e75a71b..9c31f50e3e 100644 --- a/guix/import/cran.scm +++ b/guix/import/cran.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015-2025 Ricardo Wurmus +;;; Copyright © 2015-2026 Ricardo Wurmus ;;; Copyright © 2015-2017, 2019-2021, 2023 Ludovic Courtès ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2020 Martin Becze @@ -570,7 +570,7 @@ referenced in build system files." ;; Quiet imports "(suppressPackageStartupMessages\\()?" ;; the actual import statement. - "(require|library|check_installed)\\(\"?([^, \")]+)" + "(require|library|check_installed)\\([\"']?([^, \"')]+)" ;; Or perhaps... "|" ;; ...direct namespace access. @@ -654,16 +654,10 @@ in vignette files in the directory DIR." (cond ((eof-object? line) packages) (else - (loop - (fold (lambda (match acc) - (let ((imported (match:substring match 4))) - (if (or (not imported) - (string=? imported package-directory-name) - (member imported default-r-packages)) - acc - (set-insert imported acc)))) - packages - (list-matches import-pattern line)))))))))) + (loop (extract-imports line + #:initial-set packages + #:ignored-names (cons package-directory-name + default-r-packages)))))))))) (set) (append-map (lambda (directory) (find-files directory "\\.Rnw")) diff --git a/tests/import/cran.scm b/tests/import/cran.scm index 0b6303370a..19fd580931 100644 --- a/tests/import/cran.scm +++ b/tests/import/cran.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2025 Ricardo Wurmus +;;; Copyright © 2015, 2025-2026 Ricardo Wurmus ;;; Copyright © 2017 Mathieu Othacehe ;;; ;;; This file is part of GNU Guix. @@ -98,6 +98,11 @@ Date/Publication: 2015-07-14 14:15:16 (set->list ((@ (guix import cran) extract-imports) "\"hello::world\", \"this is not data.table::some_procedure(), actually\""))) +(test-equal "extract-imports: extracts text inside single quotes" + (list "FDb.InfiniumMethylation.hg19") + (set->list ((@ (guix import cran) extract-imports) + "suppressPackageStartupMessages(require('FDb.InfiniumMethylation.hg19'))"))) + (test-equal "extract-imports: ignores other colon separated things" (list) (set->list ((@ (guix import cran) extract-imports)