summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2022-08-07 11:53:32 +0200
committerLudovic Courtès <ludo@gnu.org>2022-08-08 11:22:31 +0200
commitad8beb6325acf067387ac6387f9ee1b6f84893b4 (patch)
treecd3f67e402d5fdb20e330f741aff110ce9297969
parentbde902cb78c529174155e2d46ed814123182619f (diff)
downloadguix-ad8beb6325acf067387ac6387f9ee1b6f84893b4.tar.gz
lint: Add '-e'.
* guix/scripts/lint.scm (show-help, %options): Add '-e'.
(guix-lint): Call 'specification->package' while traversing OPTS.  Add
case for 'expression pair.  Adjust 'for-each' loop to expect packages.
* doc/guix.texi (Invoking guix lint): Document it.
-rw-r--r--doc/guix.texi10
-rw-r--r--guix/scripts/lint.scm22
2 files changed, 24 insertions, 8 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 21cee4e369..d6460a785f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -14359,6 +14359,16 @@ names returned by @option{--list-checkers}.
 Only disable the checkers specified in a comma-separated list using the
 names returned by @option{--list-checkers}.
 
+@item --expression=@var{expr}
+@itemx -e @var{expr}
+Consider the package @var{expr} evaluates to.
+
+This is useful to unambiguously designate packages, as in this example:
+
+@example
+guix lint -c archival -e '(@@ (gnu packages guile) guile-3.0)'
+@end example
+
 @item --no-network
 @itemx -n
 Only enable the checkers that do not depend on Internet access.
diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm
index c72dc3caad..9920c3ee62 100644
--- a/guix/scripts/lint.scm
+++ b/guix/scripts/lint.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2020, 2022 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -108,6 +108,8 @@ run the checkers on all packages.\n"))
                          exclude the specified checkers"))
   (display (G_ "
   -n, --no-network       only run checkers that do not access the network"))
+  (display (G_ "
+  -e, --expression=EXPR  consider the package EXPR evaluates to"))
 
   (display (G_ "
   -L, --load-path=DIR    prepend DIR to the package module search path"))
@@ -161,9 +163,11 @@ run the checkers on all packages.\n"))
                   (exit 0)))
         (option '(#\l "list-checkers") #f #f
                 (lambda (opt name arg result)
-                  (alist-cons 'list?
-                              #t
-                              result)))
+                  (alist-cons 'list? #t result)))
+        (option '(#\e "expression") #t #f
+                (lambda (opt name arg result)
+                  (alist-cons 'expression arg result)))
+
         (option '(#\V "version") #f #f
                 (lambda args
                   (show-version-and-exit "guix lint")))))
@@ -184,8 +188,10 @@ run the checkers on all packages.\n"))
 
   (let* ((opts (parse-options))
          (args (filter-map (match-lambda
-                             (('argument . value)
-                              value)
+                             (('argument . spec)
+                              (specification->package spec))
+                             (('expression . exp)
+                              (read/eval-package-expression exp))
                              (_ #f))
                            (reverse opts)))
          (no-checkers (or (assoc-ref opts 'exclude) '()))
@@ -219,7 +225,7 @@ run the checkers on all packages.\n"))
              (fold-packages (lambda (p r) (run-checkers p checkers
                                                         #:store store)) '()))
             (else
-             (for-each (lambda (spec)
-                         (run-checkers (specification->package spec) checkers
+             (for-each (lambda (package)
+                         (run-checkers package checkers
                                        #:store store))
                        args)))))))))