summary refs log tree commit diff
diff options
context:
space:
mode:
authorzimoun <zimon.toutoune@gmail.com>2021-02-05 00:02:50 +0100
committerLudovic Courtès <ludo@gnu.org>2021-02-24 23:50:13 +0100
commite68ae7f00e2e9817dacb301a97289da68efed5a1 (patch)
tree5fb24083355f1f848d336553a105325daf505669
parentee3226e9d54891c7e696912245e4904435be191c (diff)
downloadguix-e68ae7f00e2e9817dacb301a97289da68efed5a1.tar.gz
guix: scripts: Fix corner cases of hint for option typo.
* guix/scripts.scm (option-hint): Fix corner cases.
(parse-command-line)[parse-options-from]: Remove 'string?' check
introduced in 11f11d7ecb817d1421f8b5340bcced59396d8708.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--guix/scripts.scm10
1 files changed, 7 insertions, 3 deletions
diff --git a/guix/scripts.scm b/guix/scripts.scm
index 0c896a2b8c..3aabaf5c9c 100644
--- a/guix/scripts.scm
+++ b/guix/scripts.scm
@@ -118,7 +118,12 @@ procedure, but both the category and synopsis are meant to be read (parsed) by
 according to'string-distance'."
   (define (options->long-names options)
     (filter string? (append-map option-names options)))
-  (string-closest guess (options->long-names options) #:threshold 3))
+  (match guess
+    ((? string?)
+     (match (string-split guess #\=)
+       ((name rest ...)
+        (string-closest name (options->long-names options) #:threshold 3))))
+    (_ #f)))
 
 (define (args-fold* args options unrecognized-option-proc operand-proc . seeds)
   "A wrapper on top of `args-fold' that does proper user-facing error
@@ -157,8 +162,7 @@ parameter of 'args-fold'."
     ;; Actual parsing takes place here.
     (apply args-fold* args options
            (lambda (opt name arg . rest)
-             (let ((hint (and (string? name)      ;not a short option
-                              (option-hint name options))))
+             (let ((hint (option-hint name options)))
                (report-error (G_ "~A: unrecognized option~%") name)
                (when hint
                  (display-hint