From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Tony Zorman via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#66567: [PATCH] use-package: Add ignored-files support to :vc keyword Date: Wed, 01 Nov 2023 15:36:58 +0100 Message-ID: <87r0l9fsl1.fsf@hyperspace> References: <877cnn4z2v.fsf@hyperspace> <87ttq5u9fj.fsf@posteo.net> <87ttq5bx2y.fsf@hyperspace> <87r0l91vww.fsf@posteo.net> Reply-To: Tony Zorman Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="12937"; mail-complaints-to="usenet@ciao.gmane.io" Cc: stefankangas@gmail.com, 66567@debbugs.gnu.org To: Philip Kaludercic Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Nov 01 15:37:43 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qyCLn-00038a-A7 for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 01 Nov 2023 15:37:43 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qyCLZ-0006Hn-Fs; Wed, 01 Nov 2023 10:37:29 -0400 Original-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 ) id 1qyCLY-0006HQ-Bk for bug-gnu-emacs@gnu.org; Wed, 01 Nov 2023 10:37:28 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qyCLY-0002pJ-43 for bug-gnu-emacs@gnu.org; Wed, 01 Nov 2023 10:37:28 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qyCM6-0002NP-DV for bug-gnu-emacs@gnu.org; Wed, 01 Nov 2023 10:38:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Tony Zorman Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 01 Nov 2023 14:38:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66567 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 66567-submit@debbugs.gnu.org id=B66567.16988494699111 (code B ref 66567); Wed, 01 Nov 2023 14:38:02 +0000 Original-Received: (at 66567) by debbugs.gnu.org; 1 Nov 2023 14:37:49 +0000 Original-Received: from localhost ([127.0.0.1]:52161 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qyCLs-0002Mt-HK for submit@debbugs.gnu.org; Wed, 01 Nov 2023 10:37:49 -0400 Original-Received: from mout-p-102.mailbox.org ([2001:67c:2050:0:465::102]:49840) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qyCLp-0002Mb-4d for 66567@debbugs.gnu.org; Wed, 01 Nov 2023 10:37:46 -0400 Original-Received: from smtp1.mailbox.org (smtp1.mailbox.org [10.196.197.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4SL8j82H3hz9t3g; Wed, 1 Nov 2023 15:37:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1698849420; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ttURzOEF2/TloRKsUrlTespENJDl7tmwCxNRy24hZR4=; b=v7MQwZwETXK2FR78Ud0RT1SN/MsU5ZT7utIrCpMtQzRgQ48oiWqyqJRQLGF1b4qdmlyhhX V0bNjxYyFuzHjUBlAMdC+OsfJx8tlIHOtNEmuOckWJ6SfMKDLIT7SJv1ROJk4H26SWcVU5 uOfXV2RC/42LPV5C7kJkdVvO7XVzbkp29u0ZWUiCD9kUrqQYf5omT9dy720xyHR68GaX52 kHNPefwlzCPbCkS4AAh+/zNmueITqHOmCh3xYx/0EspWvqWqFpfFJDO22gw6EO7vKOsC76 uNqEk+TMT+vl/XR1Y8Xm14heW8x9EhqlMO505dgU5MewOct8ESiWu83Q2s8Udg== In-Reply-To: <87r0l91vww.fsf@posteo.net> X-MBO-RS-META: 758ntbztpbg5hsbu9yc8zx4az65gcbbs X-MBO-RS-ID: 0aed99f9099214ddc11 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:273605 Archived-At: --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Wed, Nov 01 2023 12:48, Philip Kaludercic wrote: > Tony Zorman writes: > >> On Wed, Nov 01 2023 09:09, Philip Kaludercic wrote: >>>> diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/u= se-package-core.el >>>> index 34c45b7aec..5d0d554baf 100644 >>>> --- a/lisp/use-package/use-package-core.el >>>> +++ b/lisp/use-package/use-package-core.el >>>> @@ -1654,7 +1654,8 @@ use-package-normalize--vc-arg >>>> (t (ensure-string v)))) >>>> (:vc-backend (ensure-symbol v)) >>>> (_ (ensure-string v))))) >>>> - (pcase-let ((valid-kws '(:url :branch :lisp-dir :main-file :vc-ba= ckend :rev)) >>>> + (pcase-let ((valid-kws '( :url :branch :lisp-dir :main-file :vc-b= ackend :rev >>>> + :shell-command :make)) >>> >>> Why is use-package checking for valid keywords in the first place? >> >> Better error messages, mostly. Especially people switching from >> quelpa/straight/vc-use-package might be surprised that :vc is not a >> drop-in replacement for those packages. I feel like alerting them to >> this fact sooner rather than later makes for a better experience. > > IIUC this would raise an error when an unknown keyword is encountered, > right? Yes, a declaration like (use-package foo :vc (:url "url" :blargh "123")) would result in the following message =E2=9B=94 Error (use-package): Failed to parse package foo: use-package= : Keyword :vc received unknown argument: :blargh. Supported keywords are: (= :url :branch :lisp-dir :main-file :vc-backend :rev :shell-command :make :ig= nored-files) Things get a bit muddier if ':blargh' would be passed down to package-vc-install. Now that you mention it, I noticed a tiny mistake (resulting in a worse error message!) in the second of the original patches. I've attached a corrected version. >>>> I will cheekily bump this, and also Cc. Philip as the most likely >>>> reviewer. >>> >>> I don't use use-package nor am I familiar with the code base, so I >>> wouldn't value my input that much. >> >> Oh, fair enough. In either case, I couldn't think of anyone else=E2=80= =94sorry >> for the noise :) > > I think that Stefan Kangas would probably be the best to ask, since he > was the one responsible for merging use-package into the core. Thanks! I have Cc'd Stefan, hoping to not come across as too pushy :) Tony --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=0002-use-package-Add-ignored-files-support-to-vc-keyword.patch >From f8590d37b29a96a7984d8acae2d6c2b557e0dc59 Mon Sep 17 00:00:00 2001 From: Tony Zorman Date: Sun, 15 Oct 2023 16:51:00 +0200 Subject: [PATCH] use-package: Add :ignored-files support to :vc keyword * lisp/use-package/use-package-core.el (use-package-split-when): New utility function to split a list whenever a specified predicate returns t. (use-package-vc-valid-keywords): A new defconst to gather all allowed keywords. (use-package-normalize--vc-arg): Properly normalize the :ignored-files keyword, in that the following are all valid ways of entering files: :ignored-files "a" :ignored-files ("a") :ignored-files "a" "b" "c" :ignored-files ("a" "b" "c") (use-package-normalize/:vc): Adjust normalization, now that we do not necessarily receive a valid plist as an input. * test/lisp/use-package/use-package-tests.el (use-package-test-normalize/:vc): Add tests for :ignored-files keyword. --- lisp/use-package/use-package-core.el | 60 ++++++++++++++++------ test/lisp/use-package/use-package-tests.el | 10 +++- 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/lisp/use-package/use-package-core.el b/lisp/use-package/use-package-core.el index 5d0d554baf..974059a850 100644 --- a/lisp/use-package/use-package-core.el +++ b/lisp/use-package/use-package-core.el @@ -521,6 +521,24 @@ use-package-split-list-at-keys (let ((xs (use-package-split-list (apply-partially #'eq key) lst))) (cons (car xs) (use-package-split-list-at-keys key (cddr xs)))))) +(defun use-package-split-when (pred xs) + "Repeatedly split a list according to PRED. +Split XS every time PRED returns t. Keep the delimiters, and +arrange the result in an alist. For example: + + (use-package-split-when #\\='keywordp \\='(:a 1 :b 2 3 4 :c 5)) + ;; => \\='((:a 1) (:b 2 3 4) (:c 5)) + + (use-package-split-when (lambda (x) (> x 2)) \\='(10 1 3 2 4 -1 8 9)) + ;; => \\='((10 1) (3 2) (4 -1) (8) (9))" + (unless (seq-empty-p xs) + (pcase-let* ((`(,first . ,rest) (if (funcall pred (car xs)) + (cons (car xs) (cdr xs)) + (use-package-split-list pred xs))) + (`(,val . ,recur) (use-package-split-list pred rest))) + (cons (cons first val) + (use-package-split-when pred recur))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Keywords @@ -1634,6 +1652,12 @@ use-package-handler/:vc (push `(use-package-vc-install ',arg ,local-path) body)) ; runtime body)) +(defconst use-package-vc-valid-keywords + '( :url :branch :lisp-dir :main-file :vc-backend :rev + :shell-command :make :ignored-files) + "Valid keywords for the `:vc' keyword, see the Info +node `(emacs)Fetching Package Sources'.") + (defun use-package-normalize--vc-arg (arg) "Normalize possible arguments to the `:vc' keyword. ARG is a cons-cell of approximately the form that @@ -1653,24 +1677,26 @@ use-package-normalize--vc-arg ((eq v :newest) nil) (t (ensure-string v)))) (:vc-backend (ensure-symbol v)) + (:ignored-files (if (listp v) v (list v))) (_ (ensure-string v))))) - (pcase-let ((valid-kws '( :url :branch :lisp-dir :main-file :vc-backend :rev - :shell-command :make)) - (`(,name . ,opts) arg)) + (pcase-let* ((`(,name . ,opts) arg)) (if (stringp opts) ; (NAME . VERSION-STRING) ? (list name opts) - ;; Error handling - (cl-loop for (k _) on opts by #'cddr - if (not (member k valid-kws)) - do (use-package-error - (format "Keyword :vc received unknown argument: %s. Supported keywords are: %s" - k valid-kws))) - ;; Actual normalization - (list name - (cl-loop for (k v) on opts by #'cddr - if (not (eq k :rev)) - nconc (list k (normalize k v))) - (normalize :rev (plist-get opts :rev))))))) + (let ((opts (use-package-split-when + (lambda (el) (and (keywordp el) (not (equal :newest el)))) + opts))) + ;; Error handling + (cl-loop for (k . _) in opts + if (not (member k use-package-vc-valid-keywords)) + do (use-package-error + (format "Keyword :vc received unknown argument: %s. Supported keywords are: %s" + k use-package-vc-valid-keywords))) + ;; Actual normalization + (list name + (cl-loop for (k . v) in opts + if (not (eq k :rev)) + nconc (list k (normalize k (if (length= v 1) (car v) v)))) + (normalize :rev (car (alist-get :rev opts))))))))) (defun use-package-normalize/:vc (name _keyword args) "Normalize possible arguments to the `:vc' keyword. @@ -1686,9 +1712,9 @@ use-package-normalize/:vc ((or 'nil 't) (list name)) ; guess name ((pred symbolp) (list arg)) ; use this name ((pred stringp) (list name arg)) ; version string + guess name - ((pred plistp) ; plist + guess name + (`(,(pred keywordp) . ,(pred listp)) ; list + guess name (use-package-normalize--vc-arg (cons name arg))) - (`(,(pred symbolp) . ,(or (pred plistp) ; plist/version string + name + (`(,(pred symbolp) . ,(or (pred listp) ; list/version string + name (pred stringp))) (use-package-normalize--vc-arg arg)) (_ (use-package-error "Unrecognised argument to :vc.\ diff --git a/test/lisp/use-package/use-package-tests.el b/test/lisp/use-package/use-package-tests.el index 9181a8171a..5636ba8a4f 100644 --- a/test/lisp/use-package/use-package-tests.el +++ b/test/lisp/use-package/use-package-tests.el @@ -2014,7 +2014,15 @@ use-package-test-normalize/:vc (should (equal '(foo) (use-package-normalize/:vc 'foo :vc nil))) (should (equal '(bar) - (use-package-normalize/:vc 'foo :vc '(bar))))) + (use-package-normalize/:vc 'foo :vc '(bar)))) + (should (equal + '(foo (:ignored-files ("a" "b" "c")) :last-release) + (use-package-normalize/:vc 'foo :vc '((:ignored-files "a" "b" "c"))))) + (should (equal + (use-package-normalize/:vc 'foo :vc '((:ignored-files "a"))) + (use-package-normalize/:vc 'foo :vc '((:ignored-files ("a")))))) + (should (equal (use-package-normalize/:vc 'foo :vc '((:ignored-files "a" "b" "c"))) + (use-package-normalize/:vc 'foo :vc '((:ignored-files ("a" "b" "c"))))))) ;; Local Variables: ;; no-byte-compile: t -- 2.42.0 --=-=-= Content-Type: text/plain -- Tony Zorman | https://tony-zorman.com/ --=-=-=--