>From 0359f04660bd23423d93f8aa9d9bce3a726d79a4 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" 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))))) -(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))) alist)))) - (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))) (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≄30)! + (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, historically :-( @@ -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)))) (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" -- 2.43.0