X-Loop: help-debbugs@HIDDEN Subject: bug#67916: 30.0.50; No lexical-binding directive warning in -pkg.el files Resent-From: "Basil L. Contovounesios" <contovob@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: monnier@HIDDEN, philipk@HIDDEN, mattias.engdegard@HIDDEN, bug-gnu-emacs@HIDDEN Resent-Date: Tue, 19 Dec 2023 21:50:02 +0000 Resent-Message-ID: <handler.67916.B.170302259021035 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 67916 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 67916 <at> debbugs.gnu.org Cc: "Stefan Monnier" <monnier@HIDDEN>, "Philip Kaludercic" <philipk@HIDDEN>, "Mattias =?UTF-8?Q?Engdeg=C3=A5rd?=" <mattias.engdegard@HIDDEN> X-Debbugs-Original-To: bug-gnu-emacs@HIDDEN X-Debbugs-Original-Xcc: "Stefan Monnier" <monnier@HIDDEN>, "Philip Kaludercic" <philipk@HIDDEN>, "Mattias =?UTF-8?Q?Engdeg=C3=A5rd?=" <mattias.engdegard@HIDDEN> Received: via spool by submit <at> debbugs.gnu.org id=B.170302259021035 (code B ref -1); Tue, 19 Dec 2023 21:50:02 +0000 Received: (at submit) by debbugs.gnu.org; 19 Dec 2023 21:49:50 +0000 Received: from localhost ([127.0.0.1]:37515 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rFhyI-0005TA-3O for submit <at> debbugs.gnu.org; Tue, 19 Dec 2023 16:49:50 -0500 Received: from lists.gnu.org ([2001:470:142::17]:57642) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <contovob@HIDDEN>) id 1rFhyE-0005Su-MU for submit <at> debbugs.gnu.org; Tue, 19 Dec 2023 16:49:48 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <contovob@HIDDEN>) id 1rFhy5-0003pn-Bz for bug-gnu-emacs@HIDDEN; Tue, 19 Dec 2023 16:49:37 -0500 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <contovob@HIDDEN>) id 1rFhxz-0001GZ-Je for bug-gnu-emacs@HIDDEN; Tue, 19 Dec 2023 16:49:36 -0500 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-40c6e2a47f6so52398875e9.0 for <bug-gnu-emacs@HIDDEN>; Tue, 19 Dec 2023 13:49:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd.ie; s=google21; t=1703022564; x=1703627364; darn=gnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=sPdVKPUwFAMioucwdobrlLq1El0Vn4Ztx38/DelNT+Q=; b=d4wA66xuHAdBYTqll/AM+HfwmzdbKxPGSkd8lZjQoKlpDXk+LAWFr6Fx/ITEstpqQ5 6u6o7dCiq6LklbNEIoR9LFB+p0SppvwADrNSSTYK2n7qCif/zQKlHeGgb6+uJKnLu68D uy/QLod/seejcEGQCDQbufhFdgbmBkhO2NRDVelYuu93+IdzY4Z8epViw2d26iLMQoLg 4ejOwIc3cyAjNNzZzQ0sdLYGYtaYQ76xvzjQWCy2dScp6q/6jIkfT8boKbvqad1M82Uu 15sc9wKjy0ARYrqLvHXJdB5566csw4LPP5B9BAsJvpDBWnX3+wbMPmfcSQjcZmZleZY0 yREQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703022564; x=1703627364; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=sPdVKPUwFAMioucwdobrlLq1El0Vn4Ztx38/DelNT+Q=; b=f6yi3ZOBEeWlhNRJIhcXxdwGh86FK8uPku7EewjIY1xAkyYmXPmRXm3Cti+Z4k18Bu JEFQqjv5TEaAzO7y2x1ctK0oipRjrCNHVgIVrvdiYDlHf8t9Nztn9OhgGQ+10QBzdFVA 2tjZZ88wKtfp3DfGbbShLhstlSGVoC+MARSkM6WPgg7VTmCxSZ7ydS+ScZz4Y/IYs4oY QT9OdJPN/1R0hrBazscp0cEfX8vFG3yMVxwk2rTShHU53CFhFJqdssFv/N3m9BfdULY6 tfkckKqSt1582ebzQuu9Z2a8Fc8ePSHG25qZb7LxPvRZ7eLmFD3tYLHj24vDA0dRBTBR 0HCg== X-Gm-Message-State: AOJu0Ywz9h3l410/a3ez2DP4H+j+10Eg1AV2LGcKLyjezMGUA4xiD16z Cx9raWzkFM23fmcFPkcc0Uu9iCPA1wH6bOwkinY= X-Google-Smtp-Source: AGHT+IEUz52DodPFcO7zxF6JZkUZ7wqJKsxE6Iv0WpCxtO0pOK/xy2eaVgOE/ZWhPEiGulGRI2t+Hw== X-Received: by 2002:a05:600c:22c3:b0:40c:61fe:383c with SMTP id 3-20020a05600c22c300b0040c61fe383cmr2358843wmg.198.1703022564523; Tue, 19 Dec 2023 13:49:24 -0800 (PST) Received: from localhost ([2001:620:618:5c0:2:80b3:0:42]) by smtp.gmail.com with ESMTPSA id m26-20020a05600c3b1a00b0040b2b38a1fasm4598196wms.4.2023.12.19.13.49.23 for <bug-gnu-emacs@HIDDEN> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Dec 2023 13:49:23 -0800 (PST) From: "Basil L. Contovounesios" <contovob@HIDDEN> Date: Tue, 19 Dec 2023 22:49:22 +0100 Message-ID: <87msu5q2vx.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=2a00:1450:4864:20::32d; envelope-from=contovob@HIDDEN; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 0.9 (/) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.1 (/) Severity: minor 0. cd "$(mktemp -d)" 1. HOME=3D"${PWD}" XDG_CONFIG_HOME=3D"${PWD}/.config" emacs 2. M-x package-install RET rbit RET 3. C-x b *Compile-Log* RET In toplevel form: rbit-pkg.el:1:1: Warning: file has no =E2=80=98lexical-binding=E2=80=99 dir= ective on its first line I wasn't sure about this one: - OT1H the warning wouldn't crop up if byte-compile-file checked no-byte-compile before it checks lexical-binding, or if package--compile added -pkg.el files to the ignore list - OTOH which dialect an Elisp file is written in (and our push for having this specified everywhere by default) is generally orthogonal to whether it should be byte-compiled - OT3H -pkg.el files are arguably plain .eld files for which specifying lexical-binding makes little sense WDYT? Couple of sample patches to follow. Thanks, --=20 Basil In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.18.0, Xaw3d scroll bars) of 2023-12-19 built on tia Repository revision: 7c1c2519167d51931a5d17f27529c8c8358c7c61 Repository branch: master Windowing system distributor 'The X.Org Foundation', version 11.0.12101009 System Description: Debian GNU/Linux trixie/sid Configured using: 'configure 'CFLAGS=3D-Og -ggdb3' -C --prefix=3D/home/blc/.local --enable-checking=3Dstructs --without-native-compilation --with-file-notification=3Dyes --with-x-toolkit=3Dlucid --with-x' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XAW3D XDBE XIM XINPUT2 XPM LUCID ZLIB Important settings: value of $LANG: en_IE.UTF-8 value of $XMODIFIERS: @im=3Dibus locale-coding-system: utf-8-unix Major mode: elisp-compile Minor modes in effect: tooltip-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t minibuffer-regexp-mode: t buffer-read-only: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug ert ewoc debug backtrace help-mode find-func pcase warnings compile comint ansi-osc ansi-color ring rbit-autoloads loaddefs-gen lisp-mnt radix-tree cus-edit pp cus-start cus-load icons wid-edit mm-archive message sendmail yank-media dired dired-loaddefs rfc822 mml mml-sec epa derived gnus-util text-property-search time-date mailabbrev gmm-utils mailheader mm-decode mm-bodies mm-encode mail-utils gnutls network-stream url-cache url-http url-auth mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm puny epg rfc6068 epg-config finder-inf package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo x-toolkit xinput2 x multi-tty move-toolbar make-network-process emacs) Memory information: ((conses 16 136237 15260) (symbols 48 11969 6) (strings 32 44639 1179) (string-bytes 1 1150536) (vectors 16 21515) (vector-slots 8 263985 21000) (floats 8 39 77) (intervals 56 408 0) (buffers 992 12))
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: "Basil L. Contovounesios" <contovob@HIDDEN> Subject: bug#67916: Acknowledgement (30.0.50; No lexical-binding directive warning in -pkg.el files) Message-ID: <handler.67916.B.170302259021035.ack <at> debbugs.gnu.org> References: <87msu5q2vx.fsf@HIDDEN> X-Gnu-PR-Message: ack 67916 X-Gnu-PR-Package: emacs Reply-To: 67916 <at> debbugs.gnu.org Date: Tue, 19 Dec 2023 21:50:02 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. As you requested using X-Debbugs-CC, your message was also forwarded to "Stefan Monnier" <monnier@HIDDEN>, "Philip Kaludercic" <philipk= @posteo.net>, "Mattias Engdeg=C3=A5rd" <mattias.engdegard@HIDDEN> (after having been given a bug report number, if it did not have one). Your message has been sent to the package maintainer(s): bug-gnu-emacs@HIDDEN If you wish to submit further information on this problem, please send it to 67916 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 67916: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D67916 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN Subject: bug#67916: 30.0.50; No lexical-binding directive warning in -pkg.el files Resent-From: "Basil L. Contovounesios" <contovob@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Tue, 19 Dec 2023 22:16:02 +0000 Resent-Message-ID: <handler.67916.B67916.17030241528943 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 67916 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 67916 <at> debbugs.gnu.org Cc: Philip Kaludercic <philipk@HIDDEN>, Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>, Stefan Monnier <monnier@HIDDEN> Received: via spool by 67916-submit <at> debbugs.gnu.org id=B67916.17030241528943 (code B ref 67916); Tue, 19 Dec 2023 22:16:02 +0000 Received: (at 67916) by debbugs.gnu.org; 19 Dec 2023 22:15:52 +0000 Received: from localhost ([127.0.0.1]:37769 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rFiNR-0002Gu-Q9 for submit <at> debbugs.gnu.org; Tue, 19 Dec 2023 17:15:51 -0500 Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]:61573) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <contovob@HIDDEN>) id 1rFiNL-0001yd-T9 for 67916 <at> debbugs.gnu.org; Tue, 19 Dec 2023 17:15:45 -0500 Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-a2335397e64so418990166b.2 for <67916 <at> debbugs.gnu.org>; Tue, 19 Dec 2023 14:15:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd.ie; s=google21; t=1703024134; x=1703628934; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=NsZE7e2MCv3Z5v+OFLYDcS1gPncvGQpXlcmYBZA8Zlo=; b=DtX5XmDvOFbdPr+lmHHAs3P3l9V+1bwM9v0by/jHL/mw6uKBJn3ZxFIX2B38Y4bJbu uKrk/qCReGVqcvkAacEbr1FoTd+Xp+0hyAeucUshpNqjcMTO91NNy2wonHx8O4qLa2ng iBauvGrwq//xzluEfKoR/vor/oRr0t8oYtU9B2JTwrp1NgTQzlNKIA/i+WTFIt2JJEEO mixHcDUBsEU8j0tzPnhOnh3/xm9KS9ML1zF1VGK6EKEx2rPLUXwRpf6c72z4vN9jzD7y JJOXwYONSCawwdt1Q8Nk+mqNb3sCNgQXliY1kpYZAbT4sGrHl08tt7vIU/MbYbAOnqJG 9RjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703024134; x=1703628934; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=NsZE7e2MCv3Z5v+OFLYDcS1gPncvGQpXlcmYBZA8Zlo=; b=WGPD261Fri8Jv7e36E9MPQC5eI1Q18GfBskf6yh4tORPYmNhJ3hZ321mSfp83xC1gL YfbwS4Yh9nXYUO/9ae32jmtq5PqHnKcXIRuRmGOb0XbScDOZSlFuxmn82wOrgAByI1GG gihxkMWyDvQ4/1xFOGiXhKu4o2j4Kzq6CnKC8FzF2QYfY+ctM/z1W0/+FmfmUGUW8qIo W6hjM5TlUww2+Fku9ipvs4r/GdU3YisCmAAGlmb/JFKKWEp0Xfd6OqHFV2zEU6XVQNy5 8HGjpdf22vMUDKAuZpIz8+wuJs6zCzJcNnj50DRSwIghBXm/H8jNEyoulg5vBoRX4A/A jxgw== X-Gm-Message-State: AOJu0YwnXCyx/p8NTxnXOxFTeOJRXoP5xO9eEXfjQ0ANajoKdz9h3oJj maeFagRyhe0ayAFtK/snEHdAnxIGXOIFpxcDB/I= X-Google-Smtp-Source: AGHT+IEilbJ8bsntyGmyLxKGf6OsvSIP3rihY6TRhiv5cyyUftiX/zS/UZBjD8xn4EB3DZyjrKBl8A== X-Received: by 2002:a17:906:1de:b0:a23:5a0a:aeba with SMTP id 30-20020a17090601de00b00a235a0aaebamr2062059ejj.68.1703024134519; Tue, 19 Dec 2023 14:15:34 -0800 (PST) Received: from localhost ([2001:620:618:5c0:2:80b3:0:42]) by smtp.gmail.com with ESMTPSA id u8-20020a170906c40800b00a25f5dba09dsm996560ejz.145.2023.12.19.14.15.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Dec 2023 14:15:33 -0800 (PST) From: "Basil L. Contovounesios" <contovob@HIDDEN> In-Reply-To: <87msu5q2vx.fsf@HIDDEN> (Basil L. Contovounesios" via "Bug reports for GNU Emacs, the Swiss army knife of text editors's message of "Tue, 19 Dec 2023 22:49:22 +0100") References: <87msu5q2vx.fsf@HIDDEN> Date: Tue, 19 Dec 2023 23:15:32 +0100 Message-ID: <87y1dpon3v.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain tags 67916 + patch quit Basil L. Contovounesios [2023-12-19 22:49 +0100] wrote: > WDYT? Couple of sample patches to follow. I attach a patch each for emacs.git and elpa.git. Their main intention was emitting a lexical-binding cookie in -pkg.el files, but even if we decide against that, the patches contain some other cleanups which are hopefully welcome. Question for Philip: package-vc--generate-description-file currently passes: :kind 'vc unquoted to define-package, which results in the -pkg.el contents: (define-package ... :kind vc ... :keywords '(...) ...) Note the difference in quoting between :kind and :keywords. Is this intentional? Or can/should :kind pass through macroexp-quote as well? Questions for Stefan: - Which version of Emacs can/does elpa-admin.el assume? - When the FIXME in elpaa--write-pkg-file says to use package-generate-description-file, does that mean reuse its guts like I did in package-vc.el with package--write-description-file? Or was the idea rather to have elpaa--write-pkg-file create synthetic package-desc structs for passing to the public API of package-generate-description-file directly? Thanks, -- Basil --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Declare-lexical-binding-in-pkg.el-files.patch From e602e79c00f2c4515c31b3f4ae744e63b7192174 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" <contovob@HIDDEN> Date: Mon, 18 Dec 2023 13:27:39 +0100 Subject: [PATCH] Declare lexical-binding in -pkg.el files Running package-install emits a 'has no lexical-binding directive' warning for generated -pkg.el files. * lisp/emacs-lisp/package.el: (package--with-response-buffer-1): Remove redundant requires and function declarations. (package): Add to tools :group as per Keywords header. Bump :version accordingly. (package-vc-p): Remove redundant inline-letevals. (package--unquote): New convenience function. (package-desc-from-define, package-desc-suffix): Use it. (package-desc): Add individual :type and :documentation options to slots. Document dir and vc kinds. (package--alist-to-plist-args): Replace nconc+mapcar with mapcan. (package--write-description-file): New function extracted from package-generate-description-file. Specify lexical-binding to avoid package-install warnings (bug#67916). Stricter calls to prin1 and replace-regexp-in-string with overriding arguments. Use macroexp-quote. (package-generate-description-file): Refactor in terms of package--write-description-file. * lisp/emacs-lisp/package-vc.el: Add development and vc Keywords. Remove redundant requires. (package-vc): Add to vc :group and bump :version accordingly. (package-vc--main-file): Simplify. (package-vc--generate-description-file): Simplify and refactor in terms of package--write-description-file. (package-vc--unpack): Use package-vc-p. --- lisp/emacs-lisp/package-vc.el | 78 +++++---------- lisp/emacs-lisp/package.el | 182 ++++++++++++++++------------------ 2 files changed, 110 insertions(+), 150 deletions(-) diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index bef498f997c..14f3dc859bf 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2022-2023 Free Software Foundation, Inc. ;; Author: Philip Kaludercic <philipk@HIDDEN> -;; Keywords: tools +;; Keywords: development, tools, vc ;; This file is part of GNU Emacs. @@ -44,20 +44,19 @@ ;;; Code: -(eval-when-compile (require 'rx)) (eval-when-compile (require 'map)) (eval-when-compile (require 'cl-lib)) (require 'package) (require 'lisp-mnt) (require 'vc) -(require 'seq) (defgroup package-vc nil "Manage packages from VC checkouts." :group 'package + :group 'vc :link '(custom-manual "(emacs) Fetching Package Sources") :prefix "package-vc-" - :version "29.1") + :version "30.1") (defconst package-vc--elpa-packages-version 1 "Version number of the package specification format understood by package-vc.") @@ -308,59 +307,32 @@ package-vc--main-file ;; try and find the closest match. (let ((distance most-positive-fixnum) (best nil)) (dolist (alt (directory-files directory t "\\.el\\'" t)) - (let ((sd (string-distance file alt))) - (when (and (not (string-match-p (rx (or (: "-autoloads.el") - (: "-pkg.el")) - eos) - alt)) - (< sd distance)) + (unless (or (string-suffix-p "-autoloads.el" alt) + (string-suffix-p "-pkg.el" alt)) + (let ((sd (string-distance file alt))) (when (< sd distance) - (setq distance (string-distance file alt) - best alt))))) + (setq distance sd best alt))))) best)))) (defun package-vc--generate-description-file (pkg-desc pkg-file) "Generate a package description file for PKG-DESC and write it to PKG-FILE." - (let ((name (package-desc-name pkg-desc))) - ;; Infer the subject if missing. - (unless (package-desc-summary pkg-desc) - (setf (package-desc-summary pkg-desc) - (let ((main-file (package-vc--main-file pkg-desc))) - (or (package-desc-summary pkg-desc) - (and-let* ((pkg (cadr (assq name package-archive-contents)))) - (package-desc-summary pkg)) - (and main-file (file-exists-p main-file) - (lm-summary main-file)) - package--default-summary)))) - (let ((print-level nil) - (print-quoted t) - (print-length nil)) - (write-region - (concat - ";;; Generated package description from " - (replace-regexp-in-string - "-pkg\\.el\\'" ".el" - (file-name-nondirectory pkg-file)) - " -*- no-byte-compile: t -*-\n" - (prin1-to-string - (nconc - (list 'define-package - (symbol-name name) - (package-vc--version pkg-desc) - (package-desc-summary pkg-desc) - (let ((requires (package-desc-reqs pkg-desc))) - (list 'quote - ;; Turn version lists into string form. - (mapcar - (lambda (elt) - (list (car elt) - (package-version-join (cadr elt)))) - requires)))) - (list :kind 'vc) - (package--alist-to-plist-args - (package-desc-extras pkg-desc)))) - "\n") - nil pkg-file nil 'silent)))) + ;; Infer the subject if missing. + (unless (package-desc-summary pkg-desc) + (setf (package-desc-summary pkg-desc) + (or (and-let* ((pkg (cadr (assq (package-desc-name pkg-desc) + package-archive-contents)))) + (package-desc-summary pkg)) + (and-let* ((main-file (package-vc--main-file pkg-desc)) + ((file-exists-p main-file))) + (lm-summary main-file)) + package--default-summary))) + (let ((name (symbol-name (package-desc-name pkg-desc))) + (ver (package-vc--version pkg-desc)) + (doc (package-desc-summary pkg-desc)) + (reqs (package-desc-reqs pkg-desc)) + (extras (package-desc-extras pkg-desc)) + (props '(:kind vc))) + (package--write-description-file pkg-file name ver doc reqs extras props))) (defcustom package-vc-allow-build-commands nil "Whether to run extra build commands when installing VC packages. @@ -674,7 +646,7 @@ package-vc--unpack how to fetch and build the package. See `package-vc--archive-spec-alists' for details. The optional argument REV specifies a specific revision to checkout. This overrides the `:branch' attribute in PKG-SPEC." - (unless (eq (package-desc-kind pkg-desc) 'vc) + (unless (package-vc-p pkg-desc) (let ((copy (copy-package-desc pkg-desc))) (setf (package-desc-kind copy) 'vc pkg-desc copy))) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index bed6e74c921..d1ff6e67a8a 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -144,20 +144,17 @@ ;;; Code: (require 'cl-lib) -(eval-when-compile (require 'subr-x)) (eval-when-compile (require 'epg)) ;For setf accessors. -(eval-when-compile (require 'inline)) ;For `define-inline' -(require 'seq) (require 'tabulated-list) -(require 'macroexp) (require 'url-handlers) (require 'browse-url) (defgroup package nil "Manager for Emacs Lisp packages." :group 'applications - :version "24.1") + :group 'tools + :version "30.1") ;;; Customization options @@ -325,9 +322,6 @@ package-directory-list :risky t :version "24.1") -(declare-function epg-find-configuration "epg-config" - (protocol &optional no-cache program-alist)) - (defcustom package-gnupghome-dir (expand-file-name "gnupg" package-user-dir) "Directory containing GnuPG keyring or nil. This variable specifies the GnuPG home directory used by package. @@ -457,14 +451,18 @@ package--default-summary (define-inline package-vc-p (pkg-desc) "Return non-nil if PKG-DESC is a VC package." - (inline-letevals (pkg-desc) - (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc)))) + (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc))) + +(define-inline package--unquote (arg) + "Return ARG without its surrounding `quote', if any." + (inline-letevals (arg) + (inline-quote (if (eq (car-safe ,arg) 'quote) (cadr ,arg) ,arg)))) (cl-defstruct (package-desc ;; Rename the default constructor from `make-package-desc'. (:constructor package-desc-create) ;; Has the same interface as the old `define-package', - ;; which is still used in the "foo-pkg.el" files. Extra + ;; which is still used in the "foo-pkg.el" files. Extra ;; options can be supported by adding additional keys. (:constructor package-desc-from-define @@ -472,15 +470,14 @@ package-vc-p &rest rest-plist &aux (name (intern name-string)) - (version (if (eq (car-safe version-string) 'vc) - (version-to-list (cdr version-string)) - (version-to-list version-string))) + (version (version-to-list + (if (eq (car-safe version-string) 'vc) + (cdr version-string) + version-string))) (reqs (mapcar (lambda (elt) (list (car elt) (version-to-list (cadr elt)))) - (if (eq 'quote (car requirements)) - (nth 1 requirements) - requirements))) + (package--unquote requirements))) (kind (plist-get rest-plist :kind)) (archive (plist-get rest-plist :archive)) (extras (let (alist) @@ -489,47 +486,42 @@ package-vc-p (let ((value (cadr rest-plist))) (when value (push (cons (car rest-plist) - (if (eq (car-safe value) 'quote) - (cadr value) - value)) + (package--unquote value)) alist)))) (setq rest-plist (cddr rest-plist))) alist))))) - "Structure containing information about an individual package. -Slots: - -`name' Name of the package, as a symbol. - -`version' Version of the package, as a version list. - -`summary' Short description of the package, typically taken from - the first line of the file. - -`reqs' Requirements of the package. A list of (PACKAGE - VERSION-LIST) naming the dependent package and the minimum - required version. - -`kind' The distribution format of the package. Currently, it is - either `single' or `tar'. - -`archive' The name of the archive (as a string) whence this - package came. - -`dir' The directory where the package is installed (if installed), - `builtin' if it is built-in, or nil otherwise. - -`extras' Optional alist of additional keyword-value pairs. - -`signed' Flag to indicate that the package is signed by provider." - name - version - (summary package--default-summary) - reqs - kind - archive - dir - extras - signed) + "Structure containing information about an individual package." + (name + nil :type symbol :documentation + "Name of the package.") + (version + () :type list :documentation + "Version of the package, as a version list.") + (summary + package--default-summary :type string :documentation + "Short description of the package, typically taken from the first +line of the file.") + (reqs + () :type list :documentation + "Requirements of the package. A list of (PACKAGE VERSION-LIST) +naming the dependent package and the minimum required version.") + (kind + nil :type symbol :documentation + "The distribution format of the package. Currently, it is one of +`single', `tar', `dir', or `vc'.") + (archive + nil :type string :documentation + "The name of the archive whence this package came.") + (dir + nil :type (or string symbol) :documentation + "The directory where the package is installed (if installed), +`builtin' if it is built-in, or nil otherwise." ) + (extras + () :type list :documentation + "Optional alist of additional keyword-value pairs.") + (signed + nil :type boolean :documentation + "Flag to indicate that the package is signed by provider.")) (defun package--from-builtin (bi-desc) "Create a `package-desc' object from BI-DESC. @@ -597,12 +589,9 @@ package-desc-suffix (defun package-desc--keywords (pkg-desc) "Return keywords of package-desc object PKG-DESC. These keywords come from the foo-pkg.el file, and in general -corresponds to the keywords in the \"Keywords\" header of the +correspond to the keywords in the \"Keywords\" header of the package." - (let ((keywords (cdr (assoc :keywords (package-desc-extras pkg-desc))))) - (if (eq (car-safe keywords) 'quote) - (nth 1 keywords) - keywords))) + (package--unquote (cdr (assq :keywords (package-desc-extras pkg-desc))))) (defun package-desc-priority (pkg-desc) "Return the priority of the archive of package-desc object PKG-DESC." @@ -978,8 +967,7 @@ package-untar-buffer (defun package--alist-to-plist-args (alist) (mapcar #'macroexp-quote - (apply #'nconc - (mapcar (lambda (pair) (list (car pair) (cdr pair))) alist)))) + (mapcan (lambda (pair) (list (car pair) (cdr pair))) alist))) (defun package-unpack (pkg-desc) "Install the contents of the current buffer as a package." @@ -1032,37 +1020,43 @@ package-unpack (package--reload-previously-loaded new-desc))) pkg-dir)) +;; Potentially also used in elpa.git. +(defun package--write-description-file ( file name version doc reqs extras + &optional extra-props verbose) + "Write a `define-package' declaration to FILE. +Absolute FILE names the -pkg.el description file. +NAME, VERSION, and DOC are the leading, and EXTRA-PROPS the +trailing, arguments of `define-package'. +REQS and EXTRAS are the eponymous `package-desc' slots. +Non-nil VERBOSE means display \"Wrote file\" message." + (let* ((src (replace-regexp-in-string (rx "-pkg.el" eos) ".el" + (file-name-nondirectory file) t t)) + (def `(define-package ,name ,version ,doc + ,(macroexp-quote + ;; Turn requirement version lists into string form. + (mapcar (lambda (elt) + (list (car elt) + (package-version-join (cadr elt)))) + reqs)) + ,@extra-props + ,@(package--alist-to-plist-args extras))) + (print-cfg '((length . nil) + (level . nil) + (quoted . t))) + (str (concat ";;; Generated package description from " src + " -*- no-byte-compile: t; lexical-binding: t -*-\n" + (prin1-to-string def nil print-cfg) + "\n"))) + (write-region str nil file nil (unless verbose 'silent)))) + (defun package-generate-description-file (pkg-desc pkg-file) "Create the foo-pkg.el file PKG-FILE for single-file package PKG-DESC." - (let* ((name (package-desc-name pkg-desc))) - (let ((print-level nil) - (print-quoted t) - (print-length nil)) - (write-region - (concat - ";;; Generated package description from " - (replace-regexp-in-string "-pkg\\.el\\'" ".el" - (file-name-nondirectory pkg-file)) - " -*- no-byte-compile: t -*-\n" - (prin1-to-string - (nconc - (list 'define-package - (symbol-name name) - (package-version-join (package-desc-version pkg-desc)) - (package-desc-summary pkg-desc) - (let ((requires (package-desc-reqs pkg-desc))) - (list 'quote - ;; Turn version lists into string form. - (mapcar - (lambda (elt) - (list (car elt) - (package-version-join (cadr elt)))) - requires)))) - (package--alist-to-plist-args - (package-desc-extras pkg-desc)))) - "\n") - nil pkg-file nil 'silent)))) - + (let ((name (symbol-name (package-desc-name pkg-desc))) + (ver (package-version-join (package-desc-version pkg-desc))) + (doc (package-desc-summary pkg-desc)) + (reqs (package-desc-reqs pkg-desc)) + (extras (package-desc-extras pkg-desc))) + (package--write-description-file pkg-file name ver doc reqs extras))) ;;;; Autoload (declare-function autoload-rubric "autoload" (file &optional type feature)) @@ -1311,11 +1305,6 @@ package--archive-file-exists-p (url-http-file-exists-p (concat location file))) (file-exists-p (expand-file-name file location))))) -(declare-function epg-make-context "epg" - (&optional protocol armor textmode include-certs - cipher-algorithm - digest-algorithm - compress-algorithm)) (declare-function epg-verify-string "epg" ( context signature &optional signed-text)) (declare-function epg-context-result-for "epg" (context name)) @@ -1397,7 +1386,6 @@ package--with-response-buffer-1 url (lambda (status) (let ((b (current-buffer))) - (require 'url-handlers) (package--unless-error body (when-let* ((er (plist-get status :error))) (error "Error retrieving: %s %S" url er)) -- 2.43.0 --=-=-= Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0002-Declare-lexical-binding-in-pkg.el-files.patch Content-Transfer-Encoding: quoted-printable From 0359f04660bd23423d93f8aa9d9bce3a726d79a4 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" <contovob@HIDDEN> Date: Tue, 19 Dec 2023 19:44:43 +0100 Subject: [PATCH] Declare lexical-binding in -pkg.el files This avoids a 'has no lexical-binding directive' warning when byte-compiling generated -pkg.el files (bug#67916). * elpa-admin.el (elpaa--alist-to-plist-args): Remove. All callers updated to call package--alist-to-plist-args instead. (elpaa--write-pkg-file): Emit lexical-binding cookie on ;;;-heading. Hoist metadata destructuring for reuse. Mention new package--write-description-file in commentary. (elpaa-batch-generate-autoloads): Remove redundant call to require. --- elpa-admin.el | 56 ++++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/elpa-admin.el b/elpa-admin.el index 9cbc805ba4..2e4fcc82df 100644 --- a/elpa-admin.el +++ b/elpa-admin.el @@ -1401,16 +1401,6 @@ elpaa--metadata (t (error "Can't find main file %s file in %s" mainfile dir))))) =20 -(defun elpaa--alist-to-plist-args (alist) - (mapcar (lambda (x) - (if (and (not (consp x)) - (or (keywordp x) - (not (symbolp x)) - (memq x '(nil t)))) - x `',x)) - (apply #'nconc - (mapcar (lambda (pair) (list (car pair) (cdr pair))) alis= t)))) - (defun elpaa--plist-args-to-alist (plist) (let (alist) (while plist @@ -1451,25 +1441,24 @@ elpaa--multi-file-package-def (elpaa--form-from-file-contents pkg-file))) =20 (defun elpaa--write-pkg-file (pkg-dir name metadata &optional revision) - (setf (alist-get :commit (nth 4 metadata)) - (or revision - ;; FIXME: Emacs-26's `vc-git-working-revision' ignores its - ;; arg and uses the `default-directory' to get the revision. - ;; Similar to the kludge in `elpaa--select-revision'. - (let ((default-directory pkg-dir)) - (vc-working-revision pkg-dir)))) - ;; FIXME: Use package-generate-description-file! - (let ((pkg-file (expand-file-name (format "%s-pkg.el" name) pkg-dir)) - (print-level nil) - (print-quoted t) - (print-length nil)) - (elpaa--temp-file pkg-file) - (write-region - (concat (format ";; Generated package description from %s.el -*- no-= byte-compile: t -*-\n" - name) - (prin1-to-string - (pcase-let ((`(,version ,desc ,requires ,extras) - (cdr metadata))) + (pcase-let ((`(,version ,desc ,requires ,extras) (cdr metadata))) + (setf (alist-get :commit extras) + (or revision + ;; FIXME: Emacs-26's `vc-git-working-revision' ignores its + ;; arg and uses the `default-directory' to get the revision. + ;; Similar to the kludge in `elpaa--select-revision'. + (let ((default-directory pkg-dir)) + (vc-working-revision pkg-dir)))) + ;; FIXME: Use `package--write-description-file' (in Emacs=E2=89=A530)! + (let ((pkg-file (expand-file-name (format "%s-pkg.el" name) pkg-dir)) + (print-level nil) + (print-quoted t) + (print-length nil)) + (elpaa--temp-file pkg-file) + (write-region + (concat (format ";;; Generated package description from %s.el" name) + " -*- no-byte-compile: t; lexical-binding: t -*-\n" + (prin1-to-string (nconc (list 'define-package (format "%s" name) ;It's been a string, historicall= y :-( @@ -1482,10 +1471,10 @@ elpaa--write-pkg-file (list (car elt) (package-version-join (cadr elt)))) requires))) - (elpaa--alist-to-plist-args extras)))) - "\n") - nil - pkg-file))) + (package--alist-to-plist-args extras))) + "\n") + nil + pkg-file)))) =20 (defun elpaa--write-plain-readme (pkg-dir pkg-spec) "Render a plain text readme from PKG-SPEC in PKG-DIR. @@ -2904,7 +2893,6 @@ elpaa-batch-generate-autoloads (pkgname (file-name-nondirectory (directory-file-name dir))) (pkg-spec (elpaa--get-package-spec pkgname nil 'guess)) (lisp-dir (elpaa--spec-get pkg-spec :lisp-dir))) - (require 'package) (if (null lisp-dir) (progn (cl-assert (equal alf (format "%s%s-autoloads.el" --=20 2.43.0 --=-=-=--
Received: (at control) by debbugs.gnu.org; 19 Dec 2023 22:15:48 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Tue Dec 19 17:15:48 2023 Received: from localhost ([127.0.0.1]:37767 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rFiNO-0002CA-Hb for submit <at> debbugs.gnu.org; Tue, 19 Dec 2023 17:15:48 -0500 Received: from mail-ej1-x62f.google.com ([2a00:1450:4864:20::62f]:60845) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <contovob@HIDDEN>) id 1rFiNL-0001xN-IR for control <at> debbugs.gnu.org; Tue, 19 Dec 2023 17:15:45 -0500 Received: by mail-ej1-x62f.google.com with SMTP id a640c23a62f3a-a2685675b6eso107946466b.1 for <control <at> debbugs.gnu.org>; Tue, 19 Dec 2023 14:15:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd.ie; s=google21; t=1703024134; x=1703628934; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=NsZE7e2MCv3Z5v+OFLYDcS1gPncvGQpXlcmYBZA8Zlo=; b=DtX5XmDvOFbdPr+lmHHAs3P3l9V+1bwM9v0by/jHL/mw6uKBJn3ZxFIX2B38Y4bJbu uKrk/qCReGVqcvkAacEbr1FoTd+Xp+0hyAeucUshpNqjcMTO91NNy2wonHx8O4qLa2ng iBauvGrwq//xzluEfKoR/vor/oRr0t8oYtU9B2JTwrp1NgTQzlNKIA/i+WTFIt2JJEEO mixHcDUBsEU8j0tzPnhOnh3/xm9KS9ML1zF1VGK6EKEx2rPLUXwRpf6c72z4vN9jzD7y JJOXwYONSCawwdt1Q8Nk+mqNb3sCNgQXliY1kpYZAbT4sGrHl08tt7vIU/MbYbAOnqJG 9RjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703024134; x=1703628934; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=NsZE7e2MCv3Z5v+OFLYDcS1gPncvGQpXlcmYBZA8Zlo=; b=jkpja+gR9JSGekCpdurabahP4TxodvEr4WgrDV0ea6feMwrFYxq0ZBOpUUoONK4coI Oz8+GdqB4qPcUPpaHOyT7jCUzEGTlA4jpixJLQp+25kZPXKXZXh7ELzySjcNghNmAcDG +tDMQZVjmntyGHvIqa0J5PpWzqMyFLj5RyOvikcUfuk4ckj+YIRL4H4pg4DTInIWBjwf bKXuk7GJRKdMv0EVOjTMOb8Wo4NJF+v7ckVu/It2vkTQ2OCxpCo5s6M4l89uq8NKNCrJ Tk+U52yDv2/T9+YNHLZsLipWZ/XHEoGLxyL253ao00AoIjkX3NNHNsx1howSntoLo+ka fEBQ== X-Gm-Message-State: AOJu0YyQqDB2mvzethupEtn+5NNuXcMrfSTEOaqLrzp+ornunxM6gNm4 qPSsNvngeDU9sculBQC9RekEHA== X-Google-Smtp-Source: AGHT+IEilbJ8bsntyGmyLxKGf6OsvSIP3rihY6TRhiv5cyyUftiX/zS/UZBjD8xn4EB3DZyjrKBl8A== X-Received: by 2002:a17:906:1de:b0:a23:5a0a:aeba with SMTP id 30-20020a17090601de00b00a235a0aaebamr2062059ejj.68.1703024134519; Tue, 19 Dec 2023 14:15:34 -0800 (PST) Received: from localhost ([2001:620:618:5c0:2:80b3:0:42]) by smtp.gmail.com with ESMTPSA id u8-20020a170906c40800b00a25f5dba09dsm996560ejz.145.2023.12.19.14.15.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Dec 2023 14:15:33 -0800 (PST) From: "Basil L. Contovounesios" <contovob@HIDDEN> To: 67916 <at> debbugs.gnu.org Subject: Re: bug#67916: 30.0.50; No lexical-binding directive warning in -pkg.el files In-Reply-To: <87msu5q2vx.fsf@HIDDEN> (Basil L. Contovounesios" via "Bug reports for GNU Emacs, the Swiss army knife of text editors's message of "Tue, 19 Dec 2023 22:49:22 +0100") References: <87msu5q2vx.fsf@HIDDEN> Date: Tue, 19 Dec 2023 23:15:32 +0100 Message-ID: <87y1dpon3v.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: control Cc: Philip Kaludercic <philipk@HIDDEN>, =?utf-8?Q?Mattias_Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>, Stefan Monnier <monnier@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --=-=-= Content-Type: text/plain tags 67916 + patch quit Basil L. Contovounesios [2023-12-19 22:49 +0100] wrote: > WDYT? Couple of sample patches to follow. I attach a patch each for emacs.git and elpa.git. Their main intention was emitting a lexical-binding cookie in -pkg.el files, but even if we decide against that, the patches contain some other cleanups which are hopefully welcome. Question for Philip: package-vc--generate-description-file currently passes: :kind 'vc unquoted to define-package, which results in the -pkg.el contents: (define-package ... :kind vc ... :keywords '(...) ...) Note the difference in quoting between :kind and :keywords. Is this intentional? Or can/should :kind pass through macroexp-quote as well? Questions for Stefan: - Which version of Emacs can/does elpa-admin.el assume? - When the FIXME in elpaa--write-pkg-file says to use package-generate-description-file, does that mean reuse its guts like I did in package-vc.el with package--write-description-file? Or was the idea rather to have elpaa--write-pkg-file create synthetic package-desc structs for passing to the public API of package-generate-description-file directly? Thanks, -- Basil --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Declare-lexical-binding-in-pkg.el-files.patch From e602e79c00f2c4515c31b3f4ae744e63b7192174 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" <contovob@HIDDEN> Date: Mon, 18 Dec 2023 13:27:39 +0100 Subject: [PATCH] Declare lexical-binding in -pkg.el files Running package-install emits a 'has no lexical-binding directive' warning for generated -pkg.el files. * lisp/emacs-lisp/package.el: (package--with-response-buffer-1): Remove redundant requires and function declarations. (package): Add to tools :group as per Keywords header. Bump :version accordingly. (package-vc-p): Remove redundant inline-letevals. (package--unquote): New convenience function. (package-desc-from-define, package-desc-suffix): Use it. (package-desc): Add individual :type and :documentation options to slots. Document dir and vc kinds. (package--alist-to-plist-args): Replace nconc+mapcar with mapcan. (package--write-description-file): New function extracted from package-generate-description-file. Specify lexical-binding to avoid package-install warnings (bug#67916). Stricter calls to prin1 and replace-regexp-in-string with overriding arguments. Use macroexp-quote. (package-generate-description-file): Refactor in terms of package--write-description-file. * lisp/emacs-lisp/package-vc.el: Add development and vc Keywords. Remove redundant requires. (package-vc): Add to vc :group and bump :version accordingly. (package-vc--main-file): Simplify. (package-vc--generate-description-file): Simplify and refactor in terms of package--write-description-file. (package-vc--unpack): Use package-vc-p. --- lisp/emacs-lisp/package-vc.el | 78 +++++---------- lisp/emacs-lisp/package.el | 182 ++++++++++++++++------------------ 2 files changed, 110 insertions(+), 150 deletions(-) diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el index bef498f997c..14f3dc859bf 100644 --- a/lisp/emacs-lisp/package-vc.el +++ b/lisp/emacs-lisp/package-vc.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2022-2023 Free Software Foundation, Inc. ;; Author: Philip Kaludercic <philipk@HIDDEN> -;; Keywords: tools +;; Keywords: development, tools, vc ;; This file is part of GNU Emacs. @@ -44,20 +44,19 @@ ;;; Code: -(eval-when-compile (require 'rx)) (eval-when-compile (require 'map)) (eval-when-compile (require 'cl-lib)) (require 'package) (require 'lisp-mnt) (require 'vc) -(require 'seq) (defgroup package-vc nil "Manage packages from VC checkouts." :group 'package + :group 'vc :link '(custom-manual "(emacs) Fetching Package Sources") :prefix "package-vc-" - :version "29.1") + :version "30.1") (defconst package-vc--elpa-packages-version 1 "Version number of the package specification format understood by package-vc.") @@ -308,59 +307,32 @@ package-vc--main-file ;; try and find the closest match. (let ((distance most-positive-fixnum) (best nil)) (dolist (alt (directory-files directory t "\\.el\\'" t)) - (let ((sd (string-distance file alt))) - (when (and (not (string-match-p (rx (or (: "-autoloads.el") - (: "-pkg.el")) - eos) - alt)) - (< sd distance)) + (unless (or (string-suffix-p "-autoloads.el" alt) + (string-suffix-p "-pkg.el" alt)) + (let ((sd (string-distance file alt))) (when (< sd distance) - (setq distance (string-distance file alt) - best alt))))) + (setq distance sd best alt))))) best)))) (defun package-vc--generate-description-file (pkg-desc pkg-file) "Generate a package description file for PKG-DESC and write it to PKG-FILE." - (let ((name (package-desc-name pkg-desc))) - ;; Infer the subject if missing. - (unless (package-desc-summary pkg-desc) - (setf (package-desc-summary pkg-desc) - (let ((main-file (package-vc--main-file pkg-desc))) - (or (package-desc-summary pkg-desc) - (and-let* ((pkg (cadr (assq name package-archive-contents)))) - (package-desc-summary pkg)) - (and main-file (file-exists-p main-file) - (lm-summary main-file)) - package--default-summary)))) - (let ((print-level nil) - (print-quoted t) - (print-length nil)) - (write-region - (concat - ";;; Generated package description from " - (replace-regexp-in-string - "-pkg\\.el\\'" ".el" - (file-name-nondirectory pkg-file)) - " -*- no-byte-compile: t -*-\n" - (prin1-to-string - (nconc - (list 'define-package - (symbol-name name) - (package-vc--version pkg-desc) - (package-desc-summary pkg-desc) - (let ((requires (package-desc-reqs pkg-desc))) - (list 'quote - ;; Turn version lists into string form. - (mapcar - (lambda (elt) - (list (car elt) - (package-version-join (cadr elt)))) - requires)))) - (list :kind 'vc) - (package--alist-to-plist-args - (package-desc-extras pkg-desc)))) - "\n") - nil pkg-file nil 'silent)))) + ;; Infer the subject if missing. + (unless (package-desc-summary pkg-desc) + (setf (package-desc-summary pkg-desc) + (or (and-let* ((pkg (cadr (assq (package-desc-name pkg-desc) + package-archive-contents)))) + (package-desc-summary pkg)) + (and-let* ((main-file (package-vc--main-file pkg-desc)) + ((file-exists-p main-file))) + (lm-summary main-file)) + package--default-summary))) + (let ((name (symbol-name (package-desc-name pkg-desc))) + (ver (package-vc--version pkg-desc)) + (doc (package-desc-summary pkg-desc)) + (reqs (package-desc-reqs pkg-desc)) + (extras (package-desc-extras pkg-desc)) + (props '(:kind vc))) + (package--write-description-file pkg-file name ver doc reqs extras props))) (defcustom package-vc-allow-build-commands nil "Whether to run extra build commands when installing VC packages. @@ -674,7 +646,7 @@ package-vc--unpack how to fetch and build the package. See `package-vc--archive-spec-alists' for details. The optional argument REV specifies a specific revision to checkout. This overrides the `:branch' attribute in PKG-SPEC." - (unless (eq (package-desc-kind pkg-desc) 'vc) + (unless (package-vc-p pkg-desc) (let ((copy (copy-package-desc pkg-desc))) (setf (package-desc-kind copy) 'vc pkg-desc copy))) diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index bed6e74c921..d1ff6e67a8a 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -144,20 +144,17 @@ ;;; Code: (require 'cl-lib) -(eval-when-compile (require 'subr-x)) (eval-when-compile (require 'epg)) ;For setf accessors. -(eval-when-compile (require 'inline)) ;For `define-inline' -(require 'seq) (require 'tabulated-list) -(require 'macroexp) (require 'url-handlers) (require 'browse-url) (defgroup package nil "Manager for Emacs Lisp packages." :group 'applications - :version "24.1") + :group 'tools + :version "30.1") ;;; Customization options @@ -325,9 +322,6 @@ package-directory-list :risky t :version "24.1") -(declare-function epg-find-configuration "epg-config" - (protocol &optional no-cache program-alist)) - (defcustom package-gnupghome-dir (expand-file-name "gnupg" package-user-dir) "Directory containing GnuPG keyring or nil. This variable specifies the GnuPG home directory used by package. @@ -457,14 +451,18 @@ package--default-summary (define-inline package-vc-p (pkg-desc) "Return non-nil if PKG-DESC is a VC package." - (inline-letevals (pkg-desc) - (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc)))) + (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc))) + +(define-inline package--unquote (arg) + "Return ARG without its surrounding `quote', if any." + (inline-letevals (arg) + (inline-quote (if (eq (car-safe ,arg) 'quote) (cadr ,arg) ,arg)))) (cl-defstruct (package-desc ;; Rename the default constructor from `make-package-desc'. (:constructor package-desc-create) ;; Has the same interface as the old `define-package', - ;; which is still used in the "foo-pkg.el" files. Extra + ;; which is still used in the "foo-pkg.el" files. Extra ;; options can be supported by adding additional keys. (:constructor package-desc-from-define @@ -472,15 +470,14 @@ package-vc-p &rest rest-plist &aux (name (intern name-string)) - (version (if (eq (car-safe version-string) 'vc) - (version-to-list (cdr version-string)) - (version-to-list version-string))) + (version (version-to-list + (if (eq (car-safe version-string) 'vc) + (cdr version-string) + version-string))) (reqs (mapcar (lambda (elt) (list (car elt) (version-to-list (cadr elt)))) - (if (eq 'quote (car requirements)) - (nth 1 requirements) - requirements))) + (package--unquote requirements))) (kind (plist-get rest-plist :kind)) (archive (plist-get rest-plist :archive)) (extras (let (alist) @@ -489,47 +486,42 @@ package-vc-p (let ((value (cadr rest-plist))) (when value (push (cons (car rest-plist) - (if (eq (car-safe value) 'quote) - (cadr value) - value)) + (package--unquote value)) alist)))) (setq rest-plist (cddr rest-plist))) alist))))) - "Structure containing information about an individual package. -Slots: - -`name' Name of the package, as a symbol. - -`version' Version of the package, as a version list. - -`summary' Short description of the package, typically taken from - the first line of the file. - -`reqs' Requirements of the package. A list of (PACKAGE - VERSION-LIST) naming the dependent package and the minimum - required version. - -`kind' The distribution format of the package. Currently, it is - either `single' or `tar'. - -`archive' The name of the archive (as a string) whence this - package came. - -`dir' The directory where the package is installed (if installed), - `builtin' if it is built-in, or nil otherwise. - -`extras' Optional alist of additional keyword-value pairs. - -`signed' Flag to indicate that the package is signed by provider." - name - version - (summary package--default-summary) - reqs - kind - archive - dir - extras - signed) + "Structure containing information about an individual package." + (name + nil :type symbol :documentation + "Name of the package.") + (version + () :type list :documentation + "Version of the package, as a version list.") + (summary + package--default-summary :type string :documentation + "Short description of the package, typically taken from the first +line of the file.") + (reqs + () :type list :documentation + "Requirements of the package. A list of (PACKAGE VERSION-LIST) +naming the dependent package and the minimum required version.") + (kind + nil :type symbol :documentation + "The distribution format of the package. Currently, it is one of +`single', `tar', `dir', or `vc'.") + (archive + nil :type string :documentation + "The name of the archive whence this package came.") + (dir + nil :type (or string symbol) :documentation + "The directory where the package is installed (if installed), +`builtin' if it is built-in, or nil otherwise." ) + (extras + () :type list :documentation + "Optional alist of additional keyword-value pairs.") + (signed + nil :type boolean :documentation + "Flag to indicate that the package is signed by provider.")) (defun package--from-builtin (bi-desc) "Create a `package-desc' object from BI-DESC. @@ -597,12 +589,9 @@ package-desc-suffix (defun package-desc--keywords (pkg-desc) "Return keywords of package-desc object PKG-DESC. These keywords come from the foo-pkg.el file, and in general -corresponds to the keywords in the \"Keywords\" header of the +correspond to the keywords in the \"Keywords\" header of the package." - (let ((keywords (cdr (assoc :keywords (package-desc-extras pkg-desc))))) - (if (eq (car-safe keywords) 'quote) - (nth 1 keywords) - keywords))) + (package--unquote (cdr (assq :keywords (package-desc-extras pkg-desc))))) (defun package-desc-priority (pkg-desc) "Return the priority of the archive of package-desc object PKG-DESC." @@ -978,8 +967,7 @@ package-untar-buffer (defun package--alist-to-plist-args (alist) (mapcar #'macroexp-quote - (apply #'nconc - (mapcar (lambda (pair) (list (car pair) (cdr pair))) alist)))) + (mapcan (lambda (pair) (list (car pair) (cdr pair))) alist))) (defun package-unpack (pkg-desc) "Install the contents of the current buffer as a package." @@ -1032,37 +1020,43 @@ package-unpack (package--reload-previously-loaded new-desc))) pkg-dir)) +;; Potentially also used in elpa.git. +(defun package--write-description-file ( file name version doc reqs extras + &optional extra-props verbose) + "Write a `define-package' declaration to FILE. +Absolute FILE names the -pkg.el description file. +NAME, VERSION, and DOC are the leading, and EXTRA-PROPS the +trailing, arguments of `define-package'. +REQS and EXTRAS are the eponymous `package-desc' slots. +Non-nil VERBOSE means display \"Wrote file\" message." + (let* ((src (replace-regexp-in-string (rx "-pkg.el" eos) ".el" + (file-name-nondirectory file) t t)) + (def `(define-package ,name ,version ,doc + ,(macroexp-quote + ;; Turn requirement version lists into string form. + (mapcar (lambda (elt) + (list (car elt) + (package-version-join (cadr elt)))) + reqs)) + ,@extra-props + ,@(package--alist-to-plist-args extras))) + (print-cfg '((length . nil) + (level . nil) + (quoted . t))) + (str (concat ";;; Generated package description from " src + " -*- no-byte-compile: t; lexical-binding: t -*-\n" + (prin1-to-string def nil print-cfg) + "\n"))) + (write-region str nil file nil (unless verbose 'silent)))) + (defun package-generate-description-file (pkg-desc pkg-file) "Create the foo-pkg.el file PKG-FILE for single-file package PKG-DESC." - (let* ((name (package-desc-name pkg-desc))) - (let ((print-level nil) - (print-quoted t) - (print-length nil)) - (write-region - (concat - ";;; Generated package description from " - (replace-regexp-in-string "-pkg\\.el\\'" ".el" - (file-name-nondirectory pkg-file)) - " -*- no-byte-compile: t -*-\n" - (prin1-to-string - (nconc - (list 'define-package - (symbol-name name) - (package-version-join (package-desc-version pkg-desc)) - (package-desc-summary pkg-desc) - (let ((requires (package-desc-reqs pkg-desc))) - (list 'quote - ;; Turn version lists into string form. - (mapcar - (lambda (elt) - (list (car elt) - (package-version-join (cadr elt)))) - requires)))) - (package--alist-to-plist-args - (package-desc-extras pkg-desc)))) - "\n") - nil pkg-file nil 'silent)))) - + (let ((name (symbol-name (package-desc-name pkg-desc))) + (ver (package-version-join (package-desc-version pkg-desc))) + (doc (package-desc-summary pkg-desc)) + (reqs (package-desc-reqs pkg-desc)) + (extras (package-desc-extras pkg-desc))) + (package--write-description-file pkg-file name ver doc reqs extras))) ;;;; Autoload (declare-function autoload-rubric "autoload" (file &optional type feature)) @@ -1311,11 +1305,6 @@ package--archive-file-exists-p (url-http-file-exists-p (concat location file))) (file-exists-p (expand-file-name file location))))) -(declare-function epg-make-context "epg" - (&optional protocol armor textmode include-certs - cipher-algorithm - digest-algorithm - compress-algorithm)) (declare-function epg-verify-string "epg" ( context signature &optional signed-text)) (declare-function epg-context-result-for "epg" (context name)) @@ -1397,7 +1386,6 @@ package--with-response-buffer-1 url (lambda (status) (let ((b (current-buffer))) - (require 'url-handlers) (package--unless-error body (when-let* ((er (plist-get status :error))) (error "Error retrieving: %s %S" url er)) -- 2.43.0 --=-=-= Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0002-Declare-lexical-binding-in-pkg.el-files.patch Content-Transfer-Encoding: quoted-printable From 0359f04660bd23423d93f8aa9d9bce3a726d79a4 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" <contovob@HIDDEN> Date: Tue, 19 Dec 2023 19:44:43 +0100 Subject: [PATCH] Declare lexical-binding in -pkg.el files This avoids a 'has no lexical-binding directive' warning when byte-compiling generated -pkg.el files (bug#67916). * elpa-admin.el (elpaa--alist-to-plist-args): Remove. All callers updated to call package--alist-to-plist-args instead. (elpaa--write-pkg-file): Emit lexical-binding cookie on ;;;-heading. Hoist metadata destructuring for reuse. Mention new package--write-description-file in commentary. (elpaa-batch-generate-autoloads): Remove redundant call to require. --- elpa-admin.el | 56 ++++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/elpa-admin.el b/elpa-admin.el index 9cbc805ba4..2e4fcc82df 100644 --- a/elpa-admin.el +++ b/elpa-admin.el @@ -1401,16 +1401,6 @@ elpaa--metadata (t (error "Can't find main file %s file in %s" mainfile dir))))) =20 -(defun elpaa--alist-to-plist-args (alist) - (mapcar (lambda (x) - (if (and (not (consp x)) - (or (keywordp x) - (not (symbolp x)) - (memq x '(nil t)))) - x `',x)) - (apply #'nconc - (mapcar (lambda (pair) (list (car pair) (cdr pair))) alis= t)))) - (defun elpaa--plist-args-to-alist (plist) (let (alist) (while plist @@ -1451,25 +1441,24 @@ elpaa--multi-file-package-def (elpaa--form-from-file-contents pkg-file))) =20 (defun elpaa--write-pkg-file (pkg-dir name metadata &optional revision) - (setf (alist-get :commit (nth 4 metadata)) - (or revision - ;; FIXME: Emacs-26's `vc-git-working-revision' ignores its - ;; arg and uses the `default-directory' to get the revision. - ;; Similar to the kludge in `elpaa--select-revision'. - (let ((default-directory pkg-dir)) - (vc-working-revision pkg-dir)))) - ;; FIXME: Use package-generate-description-file! - (let ((pkg-file (expand-file-name (format "%s-pkg.el" name) pkg-dir)) - (print-level nil) - (print-quoted t) - (print-length nil)) - (elpaa--temp-file pkg-file) - (write-region - (concat (format ";; Generated package description from %s.el -*- no-= byte-compile: t -*-\n" - name) - (prin1-to-string - (pcase-let ((`(,version ,desc ,requires ,extras) - (cdr metadata))) + (pcase-let ((`(,version ,desc ,requires ,extras) (cdr metadata))) + (setf (alist-get :commit extras) + (or revision + ;; FIXME: Emacs-26's `vc-git-working-revision' ignores its + ;; arg and uses the `default-directory' to get the revision. + ;; Similar to the kludge in `elpaa--select-revision'. + (let ((default-directory pkg-dir)) + (vc-working-revision pkg-dir)))) + ;; FIXME: Use `package--write-description-file' (in Emacs=E2=89=A530)! + (let ((pkg-file (expand-file-name (format "%s-pkg.el" name) pkg-dir)) + (print-level nil) + (print-quoted t) + (print-length nil)) + (elpaa--temp-file pkg-file) + (write-region + (concat (format ";;; Generated package description from %s.el" name) + " -*- no-byte-compile: t; lexical-binding: t -*-\n" + (prin1-to-string (nconc (list 'define-package (format "%s" name) ;It's been a string, historicall= y :-( @@ -1482,10 +1471,10 @@ elpaa--write-pkg-file (list (car elt) (package-version-join (cadr elt)))) requires))) - (elpaa--alist-to-plist-args extras)))) - "\n") - nil - pkg-file))) + (package--alist-to-plist-args extras))) + "\n") + nil + pkg-file)))) =20 (defun elpaa--write-plain-readme (pkg-dir pkg-spec) "Render a plain text readme from PKG-SPEC in PKG-DIR. @@ -2904,7 +2893,6 @@ elpaa-batch-generate-autoloads (pkgname (file-name-nondirectory (directory-file-name dir))) (pkg-spec (elpaa--get-package-spec pkgname nil 'guess)) (lisp-dir (elpaa--spec-get pkg-spec :lisp-dir))) - (require 'package) (if (null lisp-dir) (progn (cl-assert (equal alf (format "%s%s-autoloads.el" --=20 2.43.0 --=-=-=--
X-Loop: help-debbugs@HIDDEN Subject: bug#67916: 30.0.50; No lexical-binding directive warning in -pkg.el files Resent-From: Philip Kaludercic <philipk@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 20 Dec 2023 15:15:01 +0000 Resent-Message-ID: <handler.67916.B67916.170308526410812 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 67916 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: "Basil L. Contovounesios" <contovob@HIDDEN> Cc: 67916 <at> debbugs.gnu.org, Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>, Stefan Monnier <monnier@HIDDEN> Received: via spool by 67916-submit <at> debbugs.gnu.org id=B67916.170308526410812 (code B ref 67916); Wed, 20 Dec 2023 15:15:01 +0000 Received: (at 67916) by debbugs.gnu.org; 20 Dec 2023 15:14:24 +0000 Received: from localhost ([127.0.0.1]:41620 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rFyH8-0002oI-Q6 for submit <at> debbugs.gnu.org; Wed, 20 Dec 2023 10:14:23 -0500 Received: from mout02.posteo.de ([185.67.36.66]:54195) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <philipk@HIDDEN>) id 1rFyH2-0002nz-07 for 67916 <at> debbugs.gnu.org; Wed, 20 Dec 2023 10:14:21 -0500 Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 5419F240101 for <67916 <at> debbugs.gnu.org>; Wed, 20 Dec 2023 16:14:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1703085246; bh=F3Q/VtkMagA2rTYtfVlAcaSgZoJxHXd3Gx1xXqGV4h4=; h=From:To:Cc:Subject:Autocrypt:Date:Message-ID:MIME-Version:From; b=RyJIWP0KAgPNzap0La1hFJQcbUnc3HspBv9jjvMh46Vf7i/x0uH7gLZwQWMLe5WeS aQcU51lGMQi3z08hORuJda0RrR4nNnTwOpy+PoWPVYUj8GT4juko1z6pew5O4jgdxe uwICX+u5zHrO8FljspRuNaMiK5EdsIeqDlNpc4kh6ZLWDcRLtOaX5SbH2LQWz7od+D QYHaDbw5U7Sipmc86+dBC9VA6WcW5ohMW49vvMf4qrZFp9zFGTw7Kqdz4u7NCZyvZA KMpnCqfYoWD4I9MI7JlXXHGJ7LoKXr7QYceMkrA8VIvN5VQvIIk52U3Va7aHHoabLe 2PTeI9sDoN20w== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4SwHCK2Mjjz6tw8; Wed, 20 Dec 2023 16:14:05 +0100 (CET) From: Philip Kaludercic <philipk@HIDDEN> In-Reply-To: <87y1dpon3v.fsf@HIDDEN> (Basil L. Contovounesios's message of "Tue, 19 Dec 2023 23:15:32 +0100") References: <87msu5q2vx.fsf@HIDDEN> <87y1dpon3v.fsf@HIDDEN> Autocrypt: addr=philipk@HIDDEN; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM Date: Wed, 20 Dec 2023 15:14:03 +0000 Message-ID: <87jzp8dhz8.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) "Basil L. Contovounesios" <contovob@HIDDEN> writes: > tags 67916 + patch > quit > > Basil L. Contovounesios [2023-12-19 22:49 +0100] wrote: >> WDYT? Couple of sample patches to follow. > > I attach a patch each for emacs.git and elpa.git. > > Their main intention was emitting a lexical-binding cookie in -pkg.el > files, but even if we decide against that, the patches contain some > other cleanups which are hopefully welcome. > > Question for Philip: > > package-vc--generate-description-file currently passes: > :kind 'vc > unquoted to define-package, which results in the -pkg.el contents: > (define-package ... :kind vc ... :keywords '(...) ...) > Note the difference in quoting between :kind and :keywords. Is this > intentional? Or can/should :kind pass through macroexp-quote as well? This is not intentional, if anything a lucky oversight. > Questions for Stefan: > > - Which version of Emacs can/does elpa-admin.el assume? All I can say is that the ELPA build server, the main user of elpa-admin.el, has Emacs 28.2 installed. > - When the FIXME in elpaa--write-pkg-file says to use > package-generate-description-file, does that mean reuse its guts like > I did in package-vc.el with package--write-description-file? Or was > the idea rather to have elpaa--write-pkg-file create synthetic > package-desc structs for passing to the public API of > package-generate-description-file directly? > > Thanks, > -- > Basil > > From e602e79c00f2c4515c31b3f4ae744e63b7192174 Mon Sep 17 00:00:00 2001 > From: "Basil L. Contovounesios" <contovob@HIDDEN> > Date: Mon, 18 Dec 2023 13:27:39 +0100 > Subject: [PATCH] Declare lexical-binding in -pkg.el files > > Running package-install emits a 'has no lexical-binding directive' > warning for generated -pkg.el files. > > * lisp/emacs-lisp/package.el: > (package--with-response-buffer-1): Remove redundant requires and > function declarations. > (package): Add to tools :group as per Keywords header. Bump > :version accordingly. > (package-vc-p): Remove redundant inline-letevals. > (package--unquote): New convenience function. > (package-desc-from-define, package-desc-suffix): Use it. > (package-desc): Add individual :type and :documentation options to > slots. Document dir and vc kinds. > (package--alist-to-plist-args): Replace nconc+mapcar with mapcan. > (package--write-description-file): New function extracted from > package-generate-description-file. Specify lexical-binding to avoid > package-install warnings (bug#67916). Stricter calls to prin1 and > replace-regexp-in-string with overriding arguments. Use > macroexp-quote. > (package-generate-description-file): Refactor in terms of > package--write-description-file. > > * lisp/emacs-lisp/package-vc.el: Add development and vc Keywords. > Remove redundant requires. > (package-vc): Add to vc :group and bump :version accordingly. > (package-vc--main-file): Simplify. > (package-vc--generate-description-file): Simplify and refactor in > terms of package--write-description-file. > (package-vc--unpack): Use package-vc-p. > --- > lisp/emacs-lisp/package-vc.el | 78 +++++---------- > lisp/emacs-lisp/package.el | 182 ++++++++++++++++------------------ > 2 files changed, 110 insertions(+), 150 deletions(-) > > diff --git a/lisp/emacs-lisp/package-vc.el b/lisp/emacs-lisp/package-vc.el > index bef498f997c..14f3dc859bf 100644 > --- a/lisp/emacs-lisp/package-vc.el > +++ b/lisp/emacs-lisp/package-vc.el > @@ -3,7 +3,7 @@ > ;; Copyright (C) 2022-2023 Free Software Foundation, Inc. > > ;; Author: Philip Kaludercic <philipk@HIDDEN> > -;; Keywords: tools > +;; Keywords: development, tools, vc > > ;; This file is part of GNU Emacs. > > @@ -44,20 +44,19 @@ > > ;;; Code: > > -(eval-when-compile (require 'rx)) > (eval-when-compile (require 'map)) > (eval-when-compile (require 'cl-lib)) > (require 'package) > (require 'lisp-mnt) > (require 'vc) > -(require 'seq) > > (defgroup package-vc nil > "Manage packages from VC checkouts." > :group 'package > + :group 'vc > :link '(custom-manual "(emacs) Fetching Package Sources") > :prefix "package-vc-" > - :version "29.1") > + :version "30.1") > > (defconst package-vc--elpa-packages-version 1 > "Version number of the package specification format understood by package-vc.") > @@ -308,59 +307,32 @@ package-vc--main-file > ;; try and find the closest match. > (let ((distance most-positive-fixnum) (best nil)) > (dolist (alt (directory-files directory t "\\.el\\'" t)) > - (let ((sd (string-distance file alt))) > - (when (and (not (string-match-p (rx (or (: "-autoloads.el") > - (: "-pkg.el")) > - eos) > - alt)) > - (< sd distance)) > + (unless (or (string-suffix-p "-autoloads.el" alt) > + (string-suffix-p "-pkg.el" alt)) > + (let ((sd (string-distance file alt))) > (when (< sd distance) > - (setq distance (string-distance file alt) > - best alt))))) > + (setq distance sd best alt))))) > best)))) > > (defun package-vc--generate-description-file (pkg-desc pkg-file) > "Generate a package description file for PKG-DESC and write it to PKG-FILE." > - (let ((name (package-desc-name pkg-desc))) > - ;; Infer the subject if missing. > - (unless (package-desc-summary pkg-desc) > - (setf (package-desc-summary pkg-desc) > - (let ((main-file (package-vc--main-file pkg-desc))) > - (or (package-desc-summary pkg-desc) > - (and-let* ((pkg (cadr (assq name package-archive-contents)))) > - (package-desc-summary pkg)) > - (and main-file (file-exists-p main-file) > - (lm-summary main-file)) > - package--default-summary)))) > - (let ((print-level nil) > - (print-quoted t) > - (print-length nil)) > - (write-region > - (concat > - ";;; Generated package description from " > - (replace-regexp-in-string > - "-pkg\\.el\\'" ".el" > - (file-name-nondirectory pkg-file)) > - " -*- no-byte-compile: t -*-\n" > - (prin1-to-string > - (nconc > - (list 'define-package > - (symbol-name name) > - (package-vc--version pkg-desc) > - (package-desc-summary pkg-desc) > - (let ((requires (package-desc-reqs pkg-desc))) > - (list 'quote > - ;; Turn version lists into string form. > - (mapcar > - (lambda (elt) > - (list (car elt) > - (package-version-join (cadr elt)))) > - requires)))) > - (list :kind 'vc) > - (package--alist-to-plist-args > - (package-desc-extras pkg-desc)))) > - "\n") > - nil pkg-file nil 'silent)))) > + ;; Infer the subject if missing. > + (unless (package-desc-summary pkg-desc) > + (setf (package-desc-summary pkg-desc) > + (or (and-let* ((pkg (cadr (assq (package-desc-name pkg-desc) > + package-archive-contents)))) > + (package-desc-summary pkg)) > + (and-let* ((main-file (package-vc--main-file pkg-desc)) > + ((file-exists-p main-file))) > + (lm-summary main-file)) > + package--default-summary))) > + (let ((name (symbol-name (package-desc-name pkg-desc))) > + (ver (package-vc--version pkg-desc)) > + (doc (package-desc-summary pkg-desc)) > + (reqs (package-desc-reqs pkg-desc)) > + (extras (package-desc-extras pkg-desc)) > + (props '(:kind vc))) > + (package--write-description-file pkg-file name ver doc reqs extras props))) > > (defcustom package-vc-allow-build-commands nil > "Whether to run extra build commands when installing VC packages. > @@ -674,7 +646,7 @@ package-vc--unpack > how to fetch and build the package. See `package-vc--archive-spec-alists' > for details. The optional argument REV specifies a specific revision to > checkout. This overrides the `:branch' attribute in PKG-SPEC." > - (unless (eq (package-desc-kind pkg-desc) 'vc) > + (unless (package-vc-p pkg-desc) > (let ((copy (copy-package-desc pkg-desc))) > (setf (package-desc-kind copy) 'vc > pkg-desc copy))) > diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el > index bed6e74c921..d1ff6e67a8a 100644 > --- a/lisp/emacs-lisp/package.el > +++ b/lisp/emacs-lisp/package.el > @@ -144,20 +144,17 @@ > ;;; Code: > > (require 'cl-lib) > -(eval-when-compile (require 'subr-x)) > (eval-when-compile (require 'epg)) ;For setf accessors. > -(eval-when-compile (require 'inline)) ;For `define-inline' > -(require 'seq) > > (require 'tabulated-list) > -(require 'macroexp) > (require 'url-handlers) > (require 'browse-url) > > (defgroup package nil > "Manager for Emacs Lisp packages." > :group 'applications > - :version "24.1") > + :group 'tools > + :version "30.1") I am not sure if bumping :version is necessary (here and above). > > ;;; Customization options > @@ -325,9 +322,6 @@ package-directory-list > :risky t > :version "24.1") > > -(declare-function epg-find-configuration "epg-config" > - (protocol &optional no-cache program-alist)) > - > (defcustom package-gnupghome-dir (expand-file-name "gnupg" package-user-dir) > "Directory containing GnuPG keyring or nil. > This variable specifies the GnuPG home directory used by package. > @@ -457,14 +451,18 @@ package--default-summary > > (define-inline package-vc-p (pkg-desc) > "Return non-nil if PKG-DESC is a VC package." > - (inline-letevals (pkg-desc) > - (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc)))) > + (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc))) > + > +(define-inline package--unquote (arg) > + "Return ARG without its surrounding `quote', if any." > + (inline-letevals (arg) > + (inline-quote (if (eq (car-safe ,arg) 'quote) (cadr ,arg) ,arg)))) Honestly, the usage of define-inline was probably a premature optimisation on my part, I don't think we really need it here either. You removed (require 'inline) anyway, or is it now preloaded? > (cl-defstruct (package-desc > ;; Rename the default constructor from `make-package-desc'. > (:constructor package-desc-create) > ;; Has the same interface as the old `define-package', > - ;; which is still used in the "foo-pkg.el" files. Extra > + ;; which is still used in the "foo-pkg.el" files. Extra > ;; options can be supported by adding additional keys. > (:constructor > package-desc-from-define > @@ -472,15 +470,14 @@ package-vc-p > &rest rest-plist > &aux > (name (intern name-string)) > - (version (if (eq (car-safe version-string) 'vc) > - (version-to-list (cdr version-string)) > - (version-to-list version-string))) > + (version (version-to-list > + (if (eq (car-safe version-string) 'vc) > + (cdr version-string) > + version-string))) > (reqs (mapcar (lambda (elt) > (list (car elt) > (version-to-list (cadr elt)))) > - (if (eq 'quote (car requirements)) > - (nth 1 requirements) > - requirements))) > + (package--unquote requirements))) > (kind (plist-get rest-plist :kind)) > (archive (plist-get rest-plist :archive)) > (extras (let (alist) > @@ -489,47 +486,42 @@ package-vc-p > (let ((value (cadr rest-plist))) > (when value > (push (cons (car rest-plist) > - (if (eq (car-safe value) 'quote) > - (cadr value) > - value)) > + (package--unquote value)) > alist)))) > (setq rest-plist (cddr rest-plist))) > alist))))) > - "Structure containing information about an individual package. > -Slots: > - > -`name' Name of the package, as a symbol. > - > -`version' Version of the package, as a version list. > - > -`summary' Short description of the package, typically taken from > - the first line of the file. > - > -`reqs' Requirements of the package. A list of (PACKAGE > - VERSION-LIST) naming the dependent package and the minimum > - required version. > - > -`kind' The distribution format of the package. Currently, it is > - either `single' or `tar'. > - > -`archive' The name of the archive (as a string) whence this > - package came. > - > -`dir' The directory where the package is installed (if installed), > - `builtin' if it is built-in, or nil otherwise. > - > -`extras' Optional alist of additional keyword-value pairs. > - > -`signed' Flag to indicate that the package is signed by provider." > - name > - version > - (summary package--default-summary) > - reqs > - kind > - archive > - dir > - extras > - signed) > + "Structure containing information about an individual package." > + (name > + nil :type symbol :documentation > + "Name of the package.") > + (version > + () :type list :documentation > + "Version of the package, as a version list.") > + (summary > + package--default-summary :type string :documentation > + "Short description of the package, typically taken from the first > +line of the file.") > + (reqs > + () :type list :documentation > + "Requirements of the package. A list of (PACKAGE VERSION-LIST) > +naming the dependent package and the minimum required version.") > + (kind > + nil :type symbol :documentation > + "The distribution format of the package. Currently, it is one of > +`single', `tar', `dir', or `vc'.") > + (archive > + nil :type string :documentation > + "The name of the archive whence this package came.") > + (dir > + nil :type (or string symbol) :documentation > + "The directory where the package is installed (if installed), > +`builtin' if it is built-in, or nil otherwise." ) > + (extras > + () :type list :documentation > + "Optional alist of additional keyword-value pairs.") > + (signed > + nil :type boolean :documentation > + "Flag to indicate that the package is signed by provider.")) > > (defun package--from-builtin (bi-desc) > "Create a `package-desc' object from BI-DESC. > @@ -597,12 +589,9 @@ package-desc-suffix > (defun package-desc--keywords (pkg-desc) > "Return keywords of package-desc object PKG-DESC. > These keywords come from the foo-pkg.el file, and in general > -corresponds to the keywords in the \"Keywords\" header of the > +correspond to the keywords in the \"Keywords\" header of the > package." > - (let ((keywords (cdr (assoc :keywords (package-desc-extras pkg-desc))))) > - (if (eq (car-safe keywords) 'quote) > - (nth 1 keywords) > - keywords))) > + (package--unquote (cdr (assq :keywords (package-desc-extras pkg-desc))))) > > (defun package-desc-priority (pkg-desc) > "Return the priority of the archive of package-desc object PKG-DESC." > @@ -978,8 +967,7 @@ package-untar-buffer > > (defun package--alist-to-plist-args (alist) > (mapcar #'macroexp-quote > - (apply #'nconc > - (mapcar (lambda (pair) (list (car pair) (cdr pair))) alist)))) > + (mapcan (lambda (pair) (list (car pair) (cdr pair))) alist))) > > (defun package-unpack (pkg-desc) > "Install the contents of the current buffer as a package." > @@ -1032,37 +1020,43 @@ package-unpack > (package--reload-previously-loaded new-desc))) > pkg-dir)) > > +;; Potentially also used in elpa.git. > +(defun package--write-description-file ( file name version doc reqs extras > + &optional extra-props verbose) > + "Write a `define-package' declaration to FILE. > +Absolute FILE names the -pkg.el description file. > +NAME, VERSION, and DOC are the leading, and EXTRA-PROPS the > +trailing, arguments of `define-package'. > +REQS and EXTRAS are the eponymous `package-desc' slots. > +Non-nil VERBOSE means display \"Wrote file\" message." > + (let* ((src (replace-regexp-in-string (rx "-pkg.el" eos) ".el" > + (file-name-nondirectory file) t t)) > + (def `(define-package ,name ,version ,doc > + ,(macroexp-quote > + ;; Turn requirement version lists into string form. > + (mapcar (lambda (elt) > + (list (car elt) > + (package-version-join (cadr elt)))) > + reqs)) > + ,@extra-props > + ,@(package--alist-to-plist-args extras))) > + (print-cfg '((length . nil) > + (level . nil) > + (quoted . t))) > + (str (concat ";;; Generated package description from " src > + " -*- no-byte-compile: t; lexical-binding: t -*-\n" > + (prin1-to-string def nil print-cfg) > + "\n"))) > + (write-region str nil file nil (unless verbose 'silent)))) I like this, but we should really make sure that there are no hidden edge-cases that might cause problems. > + > (defun package-generate-description-file (pkg-desc pkg-file) > "Create the foo-pkg.el file PKG-FILE for single-file package PKG-DESC." > - (let* ((name (package-desc-name pkg-desc))) > - (let ((print-level nil) > - (print-quoted t) > - (print-length nil)) > - (write-region > - (concat > - ";;; Generated package description from " > - (replace-regexp-in-string "-pkg\\.el\\'" ".el" > - (file-name-nondirectory pkg-file)) > - " -*- no-byte-compile: t -*-\n" > - (prin1-to-string > - (nconc > - (list 'define-package > - (symbol-name name) > - (package-version-join (package-desc-version pkg-desc)) > - (package-desc-summary pkg-desc) > - (let ((requires (package-desc-reqs pkg-desc))) > - (list 'quote > - ;; Turn version lists into string form. > - (mapcar > - (lambda (elt) > - (list (car elt) > - (package-version-join (cadr elt)))) > - requires)))) > - (package--alist-to-plist-args > - (package-desc-extras pkg-desc)))) > - "\n") > - nil pkg-file nil 'silent)))) > - > + (let ((name (symbol-name (package-desc-name pkg-desc))) > + (ver (package-version-join (package-desc-version pkg-desc))) > + (doc (package-desc-summary pkg-desc)) > + (reqs (package-desc-reqs pkg-desc)) > + (extras (package-desc-extras pkg-desc))) > + (package--write-description-file pkg-file name ver doc reqs extras))) > > ;;;; Autoload > (declare-function autoload-rubric "autoload" (file &optional type feature)) > @@ -1311,11 +1305,6 @@ package--archive-file-exists-p > (url-http-file-exists-p (concat location file))) > (file-exists-p (expand-file-name file location))))) > > -(declare-function epg-make-context "epg" > - (&optional protocol armor textmode include-certs > - cipher-algorithm > - digest-algorithm > - compress-algorithm)) > (declare-function epg-verify-string "epg" ( context signature > &optional signed-text)) > (declare-function epg-context-result-for "epg" (context name)) > @@ -1397,7 +1386,6 @@ package--with-response-buffer-1 > url > (lambda (status) > (let ((b (current-buffer))) > - (require 'url-handlers) > (package--unless-error body > (when-let* ((er (plist-get status :error))) > (error "Error retrieving: %s %S" url er))
X-Loop: help-debbugs@HIDDEN Subject: bug#67916: 30.0.50; No lexical-binding directive warning in -pkg.el files Resent-From: "Basil L. Contovounesios" <contovob@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 20 Dec 2023 18:09:01 +0000 Resent-Message-ID: <handler.67916.B67916.170309573420221 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 67916 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Philip Kaludercic <philipk@HIDDEN> Cc: 67916 <at> debbugs.gnu.org, Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>, Stefan Monnier <monnier@HIDDEN> Received: via spool by 67916-submit <at> debbugs.gnu.org id=B67916.170309573420221 (code B ref 67916); Wed, 20 Dec 2023 18:09:01 +0000 Received: (at 67916) by debbugs.gnu.org; 20 Dec 2023 18:08:54 +0000 Received: from localhost ([127.0.0.1]:41745 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rG101-0005G5-BX for submit <at> debbugs.gnu.org; Wed, 20 Dec 2023 13:08:53 -0500 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:57453) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <contovob@HIDDEN>) id 1rG0zw-0005Fm-L8 for 67916 <at> debbugs.gnu.org; Wed, 20 Dec 2023 13:08:52 -0500 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-40d38f03712so6003645e9.2 for <67916 <at> debbugs.gnu.org>; Wed, 20 Dec 2023 10:08:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd.ie; s=google21; t=1703095719; x=1703700519; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=FkivYvWxW4ASXWpcLF76eFAJr/cXOhsjNGwVJFutY+A=; b=ChBDJ8JGoALji1uosGZQE2hZFvQZqKw0R7SVxZcuhH0TQ3JFFoQvurrmzcpW/M1cqY S1q2PmNV5Oq9S9P6rhH/HjhwGEHNkwSpPv2NrPg+bWfaxjYwC6dSlm7VKp/aIUYNrqLq lG+IZkjWvZiVM3l2O+rjqNEPx3dCJHF4i1ETBfadDg8XZW5DAoCxkaXyBmRhtfaQRLXd l9Zk4w57FG7JPID1ZJTLYIyh3iuTFvK+Qoab0wMKMLQgsdcJEzx5SGBcZdM7BIkhLrLi Wmq8z/2HQec+Am/RDAL++q1vS8mvViuXsrBajhoMkrzrXjYy35Bc0arfXaMl4iY3AW6A 19hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703095719; x=1703700519; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FkivYvWxW4ASXWpcLF76eFAJr/cXOhsjNGwVJFutY+A=; b=l9Qxs6CXTLEpAF7UX5OrYRqbKE7N77AHu2Sjv9UpX6lt2t9JcJ6/uPlVSoWQ6H4a4H ZTa2yUA+dnDwKfE6sWJrycIY1v0vHyj0Zu3iIpFKzvy1TAew8n7b0z3CzVgjGb7XwuGL Yg+ENXG5+QNT3+IkOKzpkGqiyRX7MC4zLLAi2oN15/7herXW53v6lSbOUjOCHXwkfJl8 PhrP+pxADcD5dRqfX5lF6GDdtUfjV3HuiHUug6UQ6SJChZRTE0tR64rL6volovRHE2oX Gqdxy925vYw4r4hSM5m5lD2AhAN8HeuXuzUjHEV8fMjLF8KHCyxW1D8sdxin7vKBj/3f 9UeQ== X-Gm-Message-State: AOJu0Yx+wjrSXka5rMswcQoqdMHhGN0vJnArqUZWQMPpLalE9aLXCmyS Iot2zQDO58+2/Qw/DKefxvK45A== X-Google-Smtp-Source: AGHT+IFiqJPMRgBLseSbsFndVTP8o86UsEyU7LmjXvIPLQU7LBHKr4oM4KMTincWJIs0Ir8Iv6Y6gg== X-Received: by 2002:a05:600c:520b:b0:40d:3880:9a82 with SMTP id fb11-20020a05600c520b00b0040d38809a82mr45817wmb.181.1703095719040; Wed, 20 Dec 2023 10:08:39 -0800 (PST) Received: from localhost ([2001:620:618:5c0:2:80b3:0:91e]) by smtp.gmail.com with ESMTPSA id v8-20020a05600c444800b0040c2c5f5844sm408134wmn.21.2023.12.20.10.08.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Dec 2023 10:08:38 -0800 (PST) From: "Basil L. Contovounesios" <contovob@HIDDEN> In-Reply-To: <87jzp8dhz8.fsf@HIDDEN> (Philip Kaludercic's message of "Wed, 20 Dec 2023 15:14:03 +0000") References: <87msu5q2vx.fsf@HIDDEN> <87y1dpon3v.fsf@HIDDEN> <87jzp8dhz8.fsf@HIDDEN> Date: Wed, 20 Dec 2023 19:08:37 +0100 Message-ID: <8734vwkaqi.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Philip Kaludercic [2023-12-20 15:14 +0000] wrote: > "Basil L. Contovounesios" <contovob@HIDDEN> writes: > >> package-vc--generate-description-file currently passes: >> :kind 'vc >> unquoted to define-package, which results in the -pkg.el contents: >> (define-package ... :kind vc ... :keywords '(...) ...) >> Note the difference in quoting between :kind and :keywords. Is this >> intentional? Or can/should :kind pass through macroexp-quote as well? > > This is not intentional, if anything a lucky oversight. Lucky in the sense that it's preferable this way, or just an accident? ;) >> Questions for Stefan: >> >> - Which version of Emacs can/does elpa-admin.el assume? > > All I can say is that the ELPA build server, the main user of > elpa-admin.el, has Emacs 28.2 installed. I'm wondering because elpa-admin.el seems to contain some compatibility code for Emacs 26 (elpaa--select-revision, elpaa--write-pkg-file) and Emacs versions <28 (elpaa--get-section, elpaa--html-build-doc). >> (defgroup package nil >> "Manager for Emacs Lisp packages." >> :group 'applications >> - :version "24.1") >> + :group 'tools >> + :version "30.1") > > I am not sure if bumping :version is necessary (here and above). I think it's unnecessary in the sense that I don't know of any place where this information is displayed, but otherwise I thought it was good form to do this since any change in :groups is user-visible. >> (define-inline package-vc-p (pkg-desc) >> "Return non-nil if PKG-DESC is a VC package." >> - (inline-letevals (pkg-desc) >> - (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc)))) >> + (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc))) >> + >> +(define-inline package--unquote (arg) >> + "Return ARG without its surrounding `quote', if any." >> + (inline-letevals (arg) >> + (inline-quote (if (eq (car-safe ,arg) 'quote) (cadr ,arg) ,arg)))) > > Honestly, the usage of define-inline was probably a premature > optimisation on my part, I don't think we really need it here either. You mean, you prefer package--unquote being a plain function? [ To be honest, I'm slightly inclined to add this to macroexp.el instead, since it's a somewhat common operation. ] > You removed (require 'inline) anyway, or is it now preloaded? define-inline is autoloaded, and there are no other in-tree occurrences of (require 'inline). >> +;; Potentially also used in elpa.git. >> +(defun package--write-description-file ( file name version doc reqs extras >> + &optional extra-props verbose) >> + "Write a `define-package' declaration to FILE. >> +Absolute FILE names the -pkg.el description file. >> +NAME, VERSION, and DOC are the leading, and EXTRA-PROPS the >> +trailing, arguments of `define-package'. >> +REQS and EXTRAS are the eponymous `package-desc' slots. >> +Non-nil VERBOSE means display \"Wrote file\" message." >> + (let* ((src (replace-regexp-in-string (rx "-pkg.el" eos) ".el" >> + (file-name-nondirectory file) t t)) >> + (def `(define-package ,name ,version ,doc >> + ,(macroexp-quote >> + ;; Turn requirement version lists into string form. >> + (mapcar (lambda (elt) >> + (list (car elt) >> + (package-version-join (cadr elt)))) >> + reqs)) >> + ,@extra-props >> + ,@(package--alist-to-plist-args extras))) >> + (print-cfg '((length . nil) >> + (level . nil) >> + (quoted . t))) >> + (str (concat ";;; Generated package description from " src >> + " -*- no-byte-compile: t; lexical-binding: t -*-\n" >> + (prin1-to-string def nil print-cfg) >> + "\n"))) >> + (write-region str nil file nil (unless verbose 'silent)))) > > I like this, but we should really make sure that there are no hidden > edge-cases that might cause problems. How do we find them if they're hidden? ;) Did you have something specific in mind? Thanks, -- Basil
X-Loop: help-debbugs@HIDDEN Subject: bug#67916: 30.0.50; No lexical-binding directive warning in -pkg.el files Resent-From: Philip Kaludercic <philipk@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 20 Dec 2023 18:56:02 +0000 Resent-Message-ID: <handler.67916.B67916.170309850922494 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 67916 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: "Basil L. Contovounesios" <contovob@HIDDEN> Cc: 67916 <at> debbugs.gnu.org, Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN>, Stefan Monnier <monnier@HIDDEN> Received: via spool by 67916-submit <at> debbugs.gnu.org id=B67916.170309850922494 (code B ref 67916); Wed, 20 Dec 2023 18:56:02 +0000 Received: (at 67916) by debbugs.gnu.org; 20 Dec 2023 18:55:09 +0000 Received: from localhost ([127.0.0.1]:41800 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rG1ij-0005qh-Ea for submit <at> debbugs.gnu.org; Wed, 20 Dec 2023 13:55:08 -0500 Received: from mout01.posteo.de ([185.67.36.65]:35815) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <philipk@HIDDEN>) id 1rG1if-0005pp-3N for 67916 <at> debbugs.gnu.org; Wed, 20 Dec 2023 13:55:05 -0500 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 4E39A240027 for <67916 <at> debbugs.gnu.org>; Wed, 20 Dec 2023 19:54:51 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1703098491; bh=1RVk2ULYEryvNCIFv9jqfpFs2B5MPzXlKdr2ozZ00Rs=; h=From:To:Cc:Subject:Autocrypt:Date:Message-ID:MIME-Version:From; b=L/pEU6ZJsbYolDDFMhbptQNKQ6gvJCW59l2+uuOwEp82xLNgwNQPHPycTLdPHNLQY orKyZcFGXSXf4aLs1XVIe0dS3qd9TOm79pM3cOnK99lsW0/det2quftdoUhfLk/ah8 PjtzbEWfAruo0cyZDg5XW9kRcqjtSoFw1okheNzrOTjBmFKYiIaX8TmV5+2G0C3YEX 2bvX710yn69GdUlszfmH3to/DfKN72QVkJKq5315VqRUDQmu3TFumbH/ThQ5YRbja0 TMnt4MaVkN79SOBFJTkOCd/lwTeeVVLd2MRseByGfxbFrDbGLjMDHNIad+jVy0siOe bYLeP0n+i/FvQ== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4SwN615Qxrz6twG; Wed, 20 Dec 2023 19:54:49 +0100 (CET) From: Philip Kaludercic <philipk@HIDDEN> In-Reply-To: <8734vwkaqi.fsf@HIDDEN> (Basil L. Contovounesios's message of "Wed, 20 Dec 2023 19:08:37 +0100") References: <87msu5q2vx.fsf@HIDDEN> <87y1dpon3v.fsf@HIDDEN> <87jzp8dhz8.fsf@HIDDEN> <8734vwkaqi.fsf@HIDDEN> Autocrypt: addr=philipk@HIDDEN; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM Date: Wed, 20 Dec 2023 18:54:49 +0000 Message-ID: <87sf3wbt6u.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) "Basil L. Contovounesios" <contovob@HIDDEN> writes: > Philip Kaludercic [2023-12-20 15:14 +0000] wrote: > >> "Basil L. Contovounesios" <contovob@HIDDEN> writes: >> >>> package-vc--generate-description-file currently passes: >>> :kind 'vc >>> unquoted to define-package, which results in the -pkg.el contents: >>> (define-package ... :kind vc ... :keywords '(...) ...) >>> Note the difference in quoting between :kind and :keywords. Is this >>> intentional? Or can/should :kind pass through macroexp-quote as well? >> >> This is not intentional, if anything a lucky oversight. > > Lucky in the sense that it's preferable this way, or just an accident? ;) The latter. >>> Questions for Stefan: >>> >>> - Which version of Emacs can/does elpa-admin.el assume? >> >> All I can say is that the ELPA build server, the main user of >> elpa-admin.el, has Emacs 28.2 installed. > > I'm wondering because elpa-admin.el seems to contain some compatibility > code for Emacs 26 (elpaa--select-revision, elpaa--write-pkg-file) and > Emacs versions <28 (elpaa--get-section, elpaa--html-build-doc). My guess is that it was just not removed, but I'll just let Stefan explain that. >>> (defgroup package nil >>> "Manager for Emacs Lisp packages." >>> :group 'applications >>> - :version "24.1") >>> + :group 'tools >>> + :version "30.1") >> >> I am not sure if bumping :version is necessary (here and above). > > I think it's unnecessary in the sense that I don't know of any place > where this information is displayed, but otherwise I thought it was good > form to do this since any change in :groups is user-visible. My understanding was that this information is supposed to indicate when the group was added, while each member of a group that has since been changed would have a newer :version tag. >>> (define-inline package-vc-p (pkg-desc) >>> "Return non-nil if PKG-DESC is a VC package." >>> - (inline-letevals (pkg-desc) >>> - (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc)))) >>> + (inline-quote (eq (package-desc-kind ,pkg-desc) 'vc))) >>> + >>> +(define-inline package--unquote (arg) >>> + "Return ARG without its surrounding `quote', if any." >>> + (inline-letevals (arg) >>> + (inline-quote (if (eq (car-safe ,arg) 'quote) (cadr ,arg) ,arg)))) >> >> Honestly, the usage of define-inline was probably a premature >> optimisation on my part, I don't think we really need it here either. > > You mean, you prefer package--unquote being a plain function? Yes. > [ To be honest, I'm slightly inclined to add this to macroexp.el > instead, since it's a somewhat common operation. ] My only concern is that this would slightly complicate the initiative of adding package.el to GNU ELPA, if that is to proceed at all. >> You removed (require 'inline) anyway, or is it now preloaded? > > define-inline is autoloaded, and there are no other in-tree occurrences > of (require 'inline). Nevermind then. >>> +;; Potentially also used in elpa.git. >>> +(defun package--write-description-file ( file name version doc reqs extras >>> + &optional extra-props verbose) >>> + "Write a `define-package' declaration to FILE. >>> +Absolute FILE names the -pkg.el description file. >>> +NAME, VERSION, and DOC are the leading, and EXTRA-PROPS the >>> +trailing, arguments of `define-package'. >>> +REQS and EXTRAS are the eponymous `package-desc' slots. >>> +Non-nil VERBOSE means display \"Wrote file\" message." >>> + (let* ((src (replace-regexp-in-string (rx "-pkg.el" eos) ".el" >>> + (file-name-nondirectory file) t t)) >>> + (def `(define-package ,name ,version ,doc >>> + ,(macroexp-quote >>> + ;; Turn requirement version lists into string form. >>> + (mapcar (lambda (elt) >>> + (list (car elt) >>> + (package-version-join (cadr elt)))) >>> + reqs)) >>> + ,@extra-props >>> + ,@(package--alist-to-plist-args extras))) >>> + (print-cfg '((length . nil) >>> + (level . nil) >>> + (quoted . t))) >>> + (str (concat ";;; Generated package description from " src >>> + " -*- no-byte-compile: t; lexical-binding: t -*-\n" >>> + (prin1-to-string def nil print-cfg) >>> + "\n"))) >>> + (write-region str nil file nil (unless verbose 'silent)))) >> >> I like this, but we should really make sure that there are no hidden >> edge-cases that might cause problems. > > How do we find them if they're hidden? ;) > Did you have something specific in mind? IIRC there were some bugs related to the generation of -pkg.el files, but I can't find them right now. I'll ping you if I find anything. > Thanks,
X-Loop: help-debbugs@HIDDEN Subject: bug#67916: 30.0.50; No lexical-binding directive warning in -pkg.el files Resent-From: Stefan Monnier <monnier@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-gnu-emacs@HIDDEN Resent-Date: Wed, 20 Dec 2023 20:45:02 +0000 Resent-Message-ID: <handler.67916.B67916.17031050596587 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 67916 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: "Basil L. Contovounesios" <contovob@HIDDEN> Cc: 67916 <at> debbugs.gnu.org, Philip Kaludercic <philipk@HIDDEN>, Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= <mattias.engdegard@HIDDEN> Received: via spool by 67916-submit <at> debbugs.gnu.org id=B67916.17031050596587 (code B ref 67916); Wed, 20 Dec 2023 20:45:02 +0000 Received: (at 67916) by debbugs.gnu.org; 20 Dec 2023 20:44:19 +0000 Received: from localhost ([127.0.0.1]:41899 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1rG3QR-0001iA-E6 for submit <at> debbugs.gnu.org; Wed, 20 Dec 2023 15:44:19 -0500 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:17993) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <monnier@HIDDEN>) id 1rG3QP-0001hw-Ho for 67916 <at> debbugs.gnu.org; Wed, 20 Dec 2023 15:44:18 -0500 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 4F471100068; Wed, 20 Dec 2023 15:44:08 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1703105047; bh=YQtgtOb/8JCvmVlAJ+ym5eRNnw3MFibDTBXh7u/w7B0=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=MVa5UteRxbakR1LUEtVtgcyuzCF620D/A6aZhUSX3JA1zVJ/2Oru1b8ma1gBz8crt Lw6UXF4q2XOktGGgj1cc3G2XFCKpqmyCRDmvtgA2dhp0kfSXl+XaFoEO/AitK5VUK9 YH/q4LButtF7yr6MtUgPCbSlYUSZONeGNx3RF16Wd7PG8qWOUn91vdv8A9ztcVE1F8 pQzB7lUjJBD4zdegFkTWPO9e+N/dDxzlHpCkUXdltR5+v/DElpqeHQaH1m+8pGxygs XL+K5RUBlYWA2ZNrlHp28IYhbP48WvPnJEx8lHEDe2cIcc6qDB4cenLljpF00O7ggx 3VY2qg+2pCp1w== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 655E3100033; Wed, 20 Dec 2023 15:44:07 -0500 (EST) Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 53F5E120774; Wed, 20 Dec 2023 15:44:07 -0500 (EST) From: Stefan Monnier <monnier@HIDDEN> In-Reply-To: <8734vwkaqi.fsf@HIDDEN> (Basil L. Contovounesios's message of "Wed, 20 Dec 2023 19:08:37 +0100") Message-ID: <jwv1qbgd2ws.fsf-monnier+emacs@HIDDEN> References: <87msu5q2vx.fsf@HIDDEN> <87y1dpon3v.fsf@HIDDEN> <87jzp8dhz8.fsf@HIDDEN> <8734vwkaqi.fsf@HIDDEN> Date: Wed, 20 Dec 2023 15:43:28 -0500 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.101 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain T_SCC_BODY_TEXT_LINE -0.01 - X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > I'm wondering because elpa-admin.el seems to contain some compatibility > code for Emacs 26 (elpaa--select-revision, elpaa--write-pkg-file) and > Emacs versions <28 (elpaa--get-section, elpaa--html-build-doc). AFAIK `elpa-admin.el` is mostly used with "Emacs from Debian stable" (in `elpa.gnu.org`) and with the bleeding edge of Emacs, so backward compatibility is not very important beyond Emacs-28 now. The one you see is what was added at the time and simply hasn't been removed (yet). > You mean, you prefer package--unquote being a plain function? > [ To be honest, I'm slightly inclined to add this to macroexp.el > instead, since it's a somewhat common operation. ] Usually in the context of macro expansion you can use `eval` for that. Here we don't, for (arguably bogus) "security" reasons. Stefan
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.