~ruther/guix-local

8c97926a01f4d23d2af6fff067ce9e465d0d6a69 — Ricardo Wurmus 1 year, 11 months ago 1261bf8
import/cran: Enhance import pattern.

* guix/import/cran.scm (import-pattern): Comment; capture direct namespace
imports as well as silent imports.

Change-Id: Ia54035d6f230d695aa950adb3e691cbce4f2d416
1 files changed, 23 insertions(+), 7 deletions(-)

M guix/import/cran.scm
M guix/import/cran.scm => guix/import/cran.scm +23 -7
@@ 552,10 552,23 @@ referenced in build system files."
    (set)
    (find-files dir "(Makevars(.in.*)?|configure.*)"))))

;; A pattern matching "library" or "require" statements, capturing the first
;; argument.
;; A pattern matching package imports.  It detects uses of "library" or
;; "require", capturing the first argument; it also detects direct access of
;; namespaces via "::" or ":::", capturing the namespace.
(define import-pattern
  (make-regexp "^ *(require|library)\\(\"?([^, \")]+)"))
  (make-regexp
   (string-append
    ;; Ignore leading spaces, but don't capture commented expressions.
    "(^ *"
    ;; Quiet imports
    "(suppressPackageStartupMessages\\()?"
    ;; the actual import statement.
    "(require|library)\\(\"?([^, \")]+)"
    ;; Or perhaps...
    "|"
    ;; ...direct namespace access.
    " *([A-Za-z0-9]+):::?"
    ")")))

(define (needed-test-inputs-in-directory dir)
  "Return a set of R package names that are found in library import


@@ 581,8 594,10 @@ statements in files in the directory DIR."
                                  (else
                                   (loop
                                    (fold (lambda (match acc)
                                            (let ((imported (match:substring match 2)))
                                              (if (or (string=? imported package-directory-name)
                                            (let ((imported (or (match:substring match 4)
                                                                (match:substring match 5))))
                                              (if (or (not imported)
                                                      (string=? imported package-directory-name)
                                                      (member imported default-r-packages))
                                                  acc
                                                  (set-insert imported acc))))


@@ 623,8 638,9 @@ in vignette files in the directory DIR."
                            (else
                             (loop
                              (fold (lambda (match acc)
                                      (let ((imported (match:substring match 2)))
                                        (if (or (string=? imported package-directory-name)
                                      (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))))