From e68ae7f00e2e9817dacb301a97289da68efed5a1 Mon Sep 17 00:00:00 2001 From: zimoun Date: Fri, 5 Feb 2021 00:02:50 +0100 Subject: [PATCH] guix: scripts: Fix corner cases of hint for option typo. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- guix/scripts.scm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/guix/scripts.scm b/guix/scripts.scm index 0c896a2b8ce..3aabaf5c9cf 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