ui: Add hint for command typo.

* guix/ui.scm (command-hint): New variable
(run-guix-command): Use it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
zimoun 2021-01-19 22:28:10 +01:00 committed by Ludovic Courtès
parent 0df4d5aa04
commit f0a1a55c66
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -2123,6 +2123,14 @@ (define (category-predicate category)
(define (run-guix-command command . args)
"Run COMMAND with the given ARGS. Report an error when COMMAND is not
found."
(define (command-hint guess commands)
(define command-names
(map (lambda (command)
(match (command-name command)
((head tail ...) head)))
commands))
(string-closest (symbol->string guess) command-names #:threshold 3))
(define module
;; Check if there is a matching extension.
(match (search-path (extension-directories)
@ -2132,9 +2140,13 @@ (define module
(lambda ()
(resolve-interface `(guix scripts ,command)))
(lambda _
(format (current-error-port)
(G_ "guix: ~a: command not found~%") command)
(show-guix-usage))))
(let ((hint (command-hint command (commands))))
(format (current-error-port)
(G_ "guix: ~a: command not found~%") command)
(when hint
(display-hint (format #f (G_ "Did you mean @code{~a}?")
hint)))
(show-guix-usage)))))
(file
(load file)
(resolve-interface `(guix extensions ,command)))))