From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Subject: [PATCH 2/6] ui: Define and honor '&error-location' and '&fix-hint' conditions. Date: Wed, 8 Nov 2017 14:09:17 +0100 Message-ID: <20171108130921.25202-3-ludo@gnu.org> References: <87zi7xwvso.fsf_-_@gnu.org> <20171108130921.25202-1-ludo@gnu.org> Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55128) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eCQ71-0006aL-GL for guix-devel@gnu.org; Wed, 08 Nov 2017 08:09:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eCQ70-0004Uu-EN for guix-devel@gnu.org; Wed, 08 Nov 2017 08:09:47 -0500 In-Reply-To: <20171108130921.25202-1-ludo@gnu.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org * guix/utils.scm (&error-location, &fix-hint): New condition types. * guix/ui.scm (report-load-error): Handle them. (call-with-error-handling): Honor '&error-location'. --- guix/ui.scm | 23 +++++++++++++++++++---- guix/utils.scm | 17 +++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/guix/ui.scm b/guix/ui.scm index 40371e471..a1152605e 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -251,10 +251,20 @@ ARGS is the list of arguments received by the 'throw' handler." (location->string loc) message))) (('srfi-34 obj) (if (message-condition? obj) - (report-error (G_ "~a~%") - (gettext (condition-message obj) - %gettext-domain)) - (report-error (G_ "exception thrown: ~s~%") obj))) + (if (error-location? obj) + (format (current-error-port) + (G_ "~a: error: ~a~%") + (location->string (error-location obj)) + (gettext (condition-message obj) + %gettext-domain)) + (report-error (G_ "~a~%") + (gettext (condition-message obj) + %gettext-domain))) + (report-error (G_ "exception thrown: ~s~%") obj)) + (when (fix-hint? obj) + (format (current-error-port) (G_ "hint: ~a~%") + (fill-paragraph (texi->plain-text (condition-fix-hint obj)) + (terminal-columns) 8)))) ((error args ...) (report-error (G_ "failed to load '~a':~%") file) (apply display-error frame (current-error-port) args)))) @@ -517,6 +527,11 @@ interpreted." directories:~{ ~a~}~%") (file-search-error-file-name c) (file-search-error-search-path c))) + ((and (error-location? c) (message-condition? c)) + (format (current-error-port) + (G_ "~a: error: ~a~%") + (location->string (error-location c)) + (gettext (condition-message c) %gettext-domain))) ((message-condition? c) ;; Normally '&message' error conditions have an i18n'd message. (leave (G_ "~a~%") diff --git a/guix/utils.scm b/guix/utils.scm index eb1ec29b3..c0ffed172 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -28,6 +28,7 @@ #:use-module (srfi srfi-9) #:use-module (srfi srfi-11) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-35) #:use-module (srfi srfi-39) #:use-module (ice-9 binary-ports) #:autoload (rnrs io ports) (make-custom-binary-input-port) @@ -60,6 +61,14 @@ source-properties->location location->source-properties + &error-location + error-location? + error-location + + &fix-hint + fix-hint? + condition-fix-hint + nix-system->gnu-triplet gnu-triplet->nix-system %current-system @@ -750,6 +759,14 @@ a location object." (column . ,(location-column loc)) (filename . ,(location-file loc)))) +(define-condition-type &error-location &error + error-location? + (location error-location)) ; + +(define-condition-type &fix-hint &condition + fix-hint? + (hint condition-fix-hint)) ;string + ;;; Local Variables: ;;; eval: (put 'call-with-progress-reporter 'scheme-indent-function 1) ;;; End: -- 2.15.0