From debbugs-submit-bounces@debbugs.gnu.org Thu Sep 30 05:32:41 2021 Received: (at submit) by debbugs.gnu.org; 30 Sep 2021 09:32:41 +0000 Received: from localhost ([127.0.0.1]:51482 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mVsQj-0007tN-9J for submit@debbugs.gnu.org; Thu, 30 Sep 2021 05:32:41 -0400 Received: from lists.gnu.org ([209.51.188.17]:44000) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mVsQi-0007tG-4D for submit@debbugs.gnu.org; Thu, 30 Sep 2021 05:32:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:34458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mVsQh-00077m-EW for guix-patches@gnu.org; Thu, 30 Sep 2021 05:32:39 -0400 Received: from albert.telenet-ops.be ([2a02:1800:110:4::f00:1a]:47406) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mVsQf-0000Mu-6N for guix-patches@gnu.org; Thu, 30 Sep 2021 05:32:39 -0400 Received: from localhost.localdomain ([IPv6:2a02:1811:8c09:9d00:aaf1:9810:a0b8:a55d]) by albert.telenet-ops.be with bizsmtp id 09YZ260010mfAB4069YZ4W; Thu, 30 Sep 2021 11:32:33 +0200 From: Maxime Devos To: guix-patches@gnu.org Subject: [PATCH] records: Raise a &fix-hint if a field has multiple values. Date: Thu, 30 Sep 2021 11:32:29 +0200 Message-Id: <20210930093229.4730-1-maximedevos@telenet.be> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21; t=1632994353; bh=L5TSpsJm/x3kWZLhDpTtWitInyv05fL6lruxYTWVybc=; h=From:To:Cc:Subject:Date; b=Gzig5GuBcx6XwhLkV5xPof+web1YtnGzoyyXUK4i+iQ0k2vVEo8GoFzNEOBmwTeu1 d3WFBw3f48I1FfajVs7L8H3uJkJP+C+uwVo+T2Zze/OYm+BlFs+XXKbJACIBY9XM1+ gRh80iPdMX8XZpGfGghgmrWlL21xGw9c1Ste1QScC139TDhQnIG6fd0r2JzFf+Sw1Y LJk4HnM+S/UXJmqu8ujzs8mg82sq41CA8MpDqA95d/3dappoEZTPKxE10pgIol6j5e usAC4HCyEjNeK38IJCQTh4Gy1+DY33brf9+IPlUf9Apx9+v6OeR5sb99uwHCp6I4rd a9dSs8yaT1+uw== Received-SPF: pass client-ip=2a02:1800:110:4::f00:1a; envelope-from=maximedevos@telenet.be; helo=albert.telenet-ops.be X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: submit Cc: Maxime Devos X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.3 (--) * guix/records.scm (report-invalid-field-specifier): If 'weird' is something like (field (record ...) extra ...), hint that 'extra ...' should probably be moved inside (record ...). --- guix/records.scm | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/guix/records.scm b/guix/records.scm index ed94c83dac..db0c0a7ca0 100644 --- a/guix/records.scm +++ b/guix/records.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès ;;; Copyright © 2018 Mark H Weaver +;;; Copyright © 2021 Maxime Devos ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,10 +22,13 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-35) + #:use-module (ice-9 exceptions) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (ice-9 rdelim) #:autoload (system base target) (target-most-positive-fixnum) + #:autoload (guix diagnostics) (&fix-hint) #:export (define-record-type* this-record @@ -83,10 +87,35 @@ error-reporting purposes." ;; WEIRD may be an identifier, thus lacking source location info, and ;; BINDINGS is a list, also lacking source location info. Hopefully ;; PARENT-FORM provides source location info. - (apply syntax-violation name "invalid field specifier" + (let ((forms (if parent-form (list parent-form #'weird) - (list #'weird))))))) + (list #'weird)))) + (syntax-case #'weird () + ;; common mistake + ((field (record-name fields ...) extra-value extra-value* ...) + (raise-exception + (condition + (&origin (origin name)) + (&message (message + (format #f "field ‘~a’ should only have one \ +value, but an extra value ‘~a’ was passed as well. Perhaps this extra \ +value was supposed to be a field specifier, and needs to be moved inside \ +the record ‘~a’?" + (syntax->datum #'field) + (syntax->datum #'extra-value) + (syntax->datum #'(record-name fields ...))))) + (&syntax (form (car forms)) + (subform (and (not (null? (cdr forms))) + (cadr forms)))) + (&fix-hint (hint (object->string + (syntax->datum + #'(field + (record-name fields ... extra-value + extra-value* ...))))))))) + (_ + (apply syntax-violation name + "invalid field specifier" forms)))))))) (define (report-duplicate-field-specifier name ctor) "Report the first duplicate identifier among the bindings in CTOR." base-commit: 808f9ffbd3106da4c92d2367b118b98196c9e81e prerequisite-patch-id: 7fdac44e8681baaf419cbf8da78cdebb8b9f9757 prerequisite-patch-id: 1f7f1597b9c85b2b1f9db1044d193bcf6ec8650e prerequisite-patch-id: 588ca94b9c4603424094a9cc2854c4f9bc83c7e4 prerequisite-patch-id: 82b4951463e8979d1c4cd15e1ca6a36308b21b51 prerequisite-patch-id: 75cdb9eb6b038adfb605253163b94efd51e0276c prerequisite-patch-id: 35140f4f2873d0b9f4fc8caca6ec2e013ecb830a prerequisite-patch-id: ed97d14afd166e7b6cac37e3aa87a85246f7e320 prerequisite-patch-id: 3f3d43f5583dce32af7d4e9925771e581c3cc5ee prerequisite-patch-id: e8f735697c0535afe9335448b16e3e1f308de362 prerequisite-patch-id: eaf1f67c4c07482fb4da81525cbd5dcb1ea2194e prerequisite-patch-id: 9a15aa08fbbbf110ba76409dcc2a3ab5e0764806 prerequisite-patch-id: 675a3c516f47dfcbaf61d5ad41ca7f3babdd3f20 prerequisite-patch-id: ac188cb61957c9639d0ac125c941950afbdba9c7 prerequisite-patch-id: f3f1f02944a4aa9635ce7094bfda254315d990b3 prerequisite-patch-id: 5eee450b2221d67fbda1e6581d16628394c912a7 prerequisite-patch-id: bad535152857928abf624dc49dc2b27718d3885e prerequisite-patch-id: 623edc835c2c5dfd8c83dcf32e650cfebea42aa0 prerequisite-patch-id: c0f50259e7fc09455f77dca31113b0b55e955220 prerequisite-patch-id: 9c7c0929a48b103b6b69626dbc86d7744f2f40ad prerequisite-patch-id: 8f8c2af0b856f56c7798a3b79ba90b073bbb382f prerequisite-patch-id: 7d88402829a8967c23650dffe115a94ae26433da prerequisite-patch-id: ffb3d6215a89195f6e0f274f2f119c1f7b65259a prerequisite-patch-id: 54eec153e523b58c3670c48afda9ef50ec44eb8e prerequisite-patch-id: bc5dfc06e9d67d10a37fbd7ba61939907d93ca7c prerequisite-patch-id: f85cc1c9eac0d44f40afe2a547ac3d866769f685 prerequisite-patch-id: 0db9692e872bf73242cfec6f8aa390abe14d08f1 prerequisite-patch-id: 36431a656d29e90e8eb218730c64807e2477c9d7 prerequisite-patch-id: 6817d73f5e42ccd33b19642ea4ef62814ad2b10e prerequisite-patch-id: 9146aec4a40f7da60a4c64643a9aa0e405567b04 prerequisite-patch-id: ff2daf978d58ec12c25dcbce4e7ee010d337cd54 prerequisite-patch-id: c88d74073fcd5d1ff19a4a9338b0df63b648d98a prerequisite-patch-id: 3032f2193b95d5cb625e33daec015f3354f01903 -- 2.33.0 From debbugs-submit-bounces@debbugs.gnu.org Mon Oct 04 10:26:46 2021 Received: (at 50914) by debbugs.gnu.org; 4 Oct 2021 14:26:46 +0000 Received: from localhost ([127.0.0.1]:38052 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mXOvV-0005ZY-ON for submit@debbugs.gnu.org; Mon, 04 Oct 2021 10:26:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:45448) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mXOvT-0005ZD-As; Mon, 04 Oct 2021 10:26:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:55938) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mXOvM-0008E6-MI; Mon, 04 Oct 2021 10:26:37 -0400 Received: from [2001:660:6102:320:e120:2c8f:8909:cdfe] (port=60564 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mXOvM-0003s2-Ao; Mon, 04 Oct 2021 10:26:36 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Maxime Devos Subject: Re: bug#50914: [PATCH] records: Raise a &fix-hint if a field has multiple values. References: <20210930093229.4730-1-maximedevos@telenet.be> Date: Mon, 04 Oct 2021 16:26:33 +0200 In-Reply-To: <20210930093229.4730-1-maximedevos@telenet.be> (Maxime Devos's message of "Thu, 30 Sep 2021 11:32:29 +0200") Message-ID: <87r1d0ooh2.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 50914 Cc: 49671@debbugs.gnu.org, 50914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Hi, Maxime Devos skribis: > * guix/records.scm (report-invalid-field-specifier): If > 'weird' is something like (field (record ...) extra ...), hint that 'ex= tra > ...' should probably be moved inside (record ...). Please see also . > + (condition > + (&origin (origin name)) > + (&message (message > + (format #f "field =E2=80=98~a=E2=80=99 should= only have one \ > +value, but an extra value =E2=80=98~a=E2=80=99 was passed as well. Perh= aps this extra \ > +value was supposed to be a field specifier, and needs to be moved inside= \ > +the record =E2=80=98~a=E2=80=99?" We=E2=80=99ll need i18n here and straight quotes. > + (&syntax (form (car forms)) > + (subform (and (not (null? (cdr forms))) > + (cadr forms)))) No cadrcdr please. :-) > + (&fix-hint (hint (object->string > + (syntax->datum > + #'(field > + (record-name fields ... extra-value > + extra-value* ...)))))= )))) The =E2=80=98hint=E2=80=99 field must be a string, typically the message yo= u had above; see other examples in the code. TIA! Ludo=E2=80=99. From debbugs-submit-bounces@debbugs.gnu.org Mon Oct 04 22:02:28 2021 Received: (at 50914) by debbugs.gnu.org; 5 Oct 2021 02:02:28 +0000 Received: from localhost ([127.0.0.1]:38646 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mXZmm-0002EO-9v for submit@debbugs.gnu.org; Mon, 04 Oct 2021 22:02:28 -0400 Received: from minsky.hcoop.net ([104.248.1.95]:35050) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mXZmi-0002E7-DV for 50914@debbugs.gnu.org; Mon, 04 Oct 2021 22:02:27 -0400 Received: from marsh.hcoop.net ([45.55.52.66]) by minsky.hcoop.net with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mXZmc-00063x-MR; Mon, 04 Oct 2021 22:02:18 -0400 Date: Mon, 4 Oct 2021 22:02:18 -0400 (EDT) From: Jack Hill X-X-Sender: jackhill@marsh.hcoop.net To: Maxime Devos Subject: Re: [bug#50914] [PATCH] records: Raise a &fix-hint if a field has multiple values. In-Reply-To: <20210930093229.4730-1-maximedevos@telenet.be> Message-ID: References: <20210930093229.4730-1-maximedevos@telenet.be> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="925712948-1050268285-1633399338=:4243" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 50914 Cc: 50914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --925712948-1050268285-1633399338=:4243 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 8BIT Wow, thanks for picking up on an annoyance I mentioned on IRC an providing a patch! On Thu, 30 Sep 2021, Maxime Devos wrote: > * guix/records.scm (report-invalid-field-specifier): If > 'weird' is something like (field (record ...) extra ...), hint that 'extra > ...' should probably be moved inside (record ...). > --- I don't have any comments on the code directly, but while the error message is much improved, and would have helped me find my mistake quicker, it's still a bit verbose and doesn't seem to be printing your nice error message. The error I now get is, ``` gnu/packages/mail.scm:2884:2: error: (package (name "msgconvert") (version "0.920") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/mvz/email-outlook-message-perl") (commit "dd382f47fd112032bf91cb673178a27142d23e38"))))) (sha256 (base32 "0idhpvafy0gy3bdvw98q974wdv2x6vld2sv1f95ssl4l226cdqs4")) (file-name (git-file-name name version)) (build-system perl-build-system) (native-inputs (quasiquote (("perl-module-build" (unquote perl-module-build))))) (inputs (quasiquote (("perl-email-address" (unquote perl-email-address)) ("perl-email-mime" (unquote perl-email-mime)) ("perl-email-mime-contenttype" (unquote perl-email-mime-contenttype)) ("perl-email-sender" (unquote perl-email-sender)) ("perl-email-simple" (unquote perl-email-simple)) ("perl-io-all" (unquote perl-io-all)) ("perl-io-string" (unquote perl-io-string)) ("perl-ole-storage-lite" (unquote perl-ole-storage-lite))))) (home-page "https://www.matijs.net/software/msgconv") (synopsis "Foo") (description "Foo.") (license license:gpl1+)): extraneous field initializers (sha256 file-name) ``` For reference, the faulty package definition I used to test: ``` (define-public msgconvert (package (name "msgconvert") (version "0.920") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/mvz/email-outlook-message-perl") (commit "dd382f47fd112032bf91cb673178a27142d23e38" ;; (string-append "v" version) ))) )) (sha256 (base32 "0idhpvafy0gy3bdvw98q974wdv2x6vld2sv1f95ssl4l226cdqs4")) (file-name (git-file-name name version)) (build-system perl-build-system) (native-inputs `(("perl-module-build" ,perl-module-build))) (inputs `(("perl-email-address" ,perl-email-address) ("perl-email-mime" ,perl-email-mime) ("perl-email-mime-contenttype" ,perl-email-mime-contenttype) ("perl-email-sender" ,perl-email-sender) ("perl-email-simple" ,perl-email-simple) ("perl-io-all" ,perl-io-all) ("perl-io-string" ,perl-io-string) ("perl-ole-storage-lite" ,perl-ole-storage-lite))) (home-page "https://www.matijs.net/software/msgconv") (synopsis "Foo") (description "Foo.") (license license:gpl1+))) ``` Best, Jack --925712948-1050268285-1633399338=:4243-- From debbugs-submit-bounces@debbugs.gnu.org Tue Oct 05 00:07:04 2021 Received: (at 50914) by debbugs.gnu.org; 5 Oct 2021 04:07:04 +0000 Received: from localhost ([127.0.0.1]:38752 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mXbjM-0005G8-1B for submit@debbugs.gnu.org; Tue, 05 Oct 2021 00:07:04 -0400 Received: from minsky.hcoop.net ([104.248.1.95]:35496) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mXbjH-0005Fb-Rh for 50914@debbugs.gnu.org; Tue, 05 Oct 2021 00:07:02 -0400 Received: from marsh.hcoop.net ([45.55.52.66]) by minsky.hcoop.net with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mXbjC-00031l-96; Tue, 05 Oct 2021 00:06:54 -0400 Date: Tue, 5 Oct 2021 00:06:54 -0400 (EDT) From: Jack Hill X-X-Sender: jackhill@marsh.hcoop.net To: Maxime Devos Subject: Re: [bug#50914] [PATCH] records: Raise a &fix-hint if a field has multiple values. In-Reply-To: Message-ID: References: <20210930093229.4730-1-maximedevos@telenet.be> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="925712948-234003942-1633406814=:4243" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 50914 Cc: 50914@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --925712948-234003942-1633406814=:4243 Content-Type: text/plain; charset=ISO-8859-7; format=flowed Content-Transfer-Encoding: 8BIT On Mon, 4 Oct 2021, Jack Hill wrote: > Wow, thanks for picking up on an annoyance I mentioned on IRC an providing a > patch! > > On Thu, 30 Sep 2021, Maxime Devos wrote: > >> * guix/records.scm (report-invalid-field-specifier): If >> 'weird' is something like (field (record ...) extra ...), hint that 'extra >> ...' should probably be moved inside (record ...). >> --- > > I don't have any comments on the code directly, but while the error message > is much improved, and would have helped me find my mistake quicker, it's > still a bit verbose and doesn't seem to be printing your nice error message. I did perturb the package definition in different ways and got your error message ``` error: field ¡uri¢ should only have one value, but an extra value ¡(sha256 (base32 0idhpvafy0gy3bdvw98q974wdv2x6vld2sv1f95ssl4l226cdqs4))¢ was passed as well. Perhaps this extra value was supposed to be a field specifier, and needs to be moved inside the record ¡(git-reference (url https://github.com/mvz/email-outlook-message-perl) (commit dd382f47fd112032bf91cb673178a27142d23e38))¢? hint: (uri (git-reference (url "https://github.com/mvz/email-outlook-message-perl") (commit "dd382f47fd112032bf91cb673178a27142d23e38") (sha256 (base32 "0idhpvafy0gy3bdvw98q974wdv2x6vld2sv1f95ssl4l226cdqs4")) (file-name (git-file-name name version)))) ``` with ``` (define-public msgconvert (package (name "msgconvert") (version "0.920") (source (origin (method git-fetch) (uri (git-reference (url "https://github.com/mvz/email-outlook-message-perl") (commit "dd382f47fd112032bf91cb673178a27142d23e38" ;; (string-append "v" version) )) (sha256 (base32 "0idhpvafy0gy3bdvw98q974wdv2x6vld2sv1f95ssl4l226cdqs4")) (file-name (git-file-name name version))))) (build-system perl-build-system) (native-inputs `(("perl-module-build" ,perl-module-build))) (inputs `(("perl-email-address" ,perl-email-address) ("perl-email-mime" ,perl-email-mime) ("perl-email-mime-contenttype" ,perl-email-mime-contenttype) ("perl-email-sender" ,perl-email-sender) ("perl-email-simple" ,perl-email-simple) ("perl-io-all" ,perl-io-all) ("perl-io-string" ,perl-io-string) ("perl-ole-storage-lite" ,perl-ole-storage-lite))) (home-page "https://www.matijs.net/software/msgconv") (synopsis "Foo") (description "Foo.") (license license:gpl1+))) ``` Best, Jack --925712948-234003942-1633406814=:4243--