unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: master 9291e73 02/12: Add new 'declare' forms for command completion predicates
       [not found] ` <20210214131502.DADCE20DFB@vcs0.savannah.gnu.org>
@ 2021-02-20 19:30   ` Basil L. Contovounesios
  2021-02-21 13:15     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 7+ messages in thread
From: Basil L. Contovounesios @ 2021-02-20 19:30 UTC (permalink / raw)
  To: emacs-devel; +Cc: Lars Ingebrigtsen

[-- Attachment #1: Type: text/plain, Size: 644 bytes --]

larsi@gnus.org (Lars Ingebrigtsen) writes:

> branch: master
> commit 9291e7316f98ab0858b323f72047ffd5a23d9ac9
> Author: Lars Ingebrigtsen <larsi@gnus.org>
> Commit: Lars Ingebrigtsen <larsi@gnus.org>
>
>     Add new 'declare' forms for command completion predicates

[...]

> +(defalias 'byte-run--set-completion
> +  #'(lambda (f _args val)
> +      (list 'function-put (list 'quote f)
> +            ''completion-predicate val)))

This is the only declare form property that doesn't quote its value,
resulting in forms like (declare (completion 'foo)) rather than the more
conventional (declare (completion foo)).  How's the following fix?


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Function-quote-completion-property-of-declare-form.patch --]
[-- Type: text/x-diff, Size: 1054 bytes --]

From 3a93eb1c161c4a50b942aaabff450422b8a63679 Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <contovob@tcd.ie>
Date: Sat, 20 Feb 2021 18:55:12 +0000
Subject: [PATCH] Function-quote completion property of declare form

* lisp/emacs-lisp/byte-run.el (byte-run--set-completion): Quote with
'function' for syntactical consistency with other declare form
properties.  This allows writing (declare (completion foo)) instead
of (declare (completion 'foo)).
---
 lisp/emacs-lisp/byte-run.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
index afe94bb035..6451d7fb62 100644
--- a/lisp/emacs-lisp/byte-run.el
+++ b/lisp/emacs-lisp/byte-run.el
@@ -149,7 +149,7 @@ 'byte-run--set-indent
 (defalias 'byte-run--set-completion
   #'(lambda (f _args val)
       (list 'function-put (list 'quote f)
-            ''completion-predicate val)))
+            ''completion-predicate (list 'function val))))
 
 (defalias 'byte-run--set-modes
   #'(lambda (f _args &rest val)
-- 
2.30.0


[-- Attachment #3: Type: text/plain, Size: 20 bytes --]


Thanks,

-- 
Basil

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: master 9291e73 02/12: Add new 'declare' forms for command completion predicates
  2021-02-20 19:30   ` master 9291e73 02/12: Add new 'declare' forms for command completion predicates Basil L. Contovounesios
@ 2021-02-21 13:15     ` Lars Ingebrigtsen
  2021-02-21 14:11       ` Basil L. Contovounesios
  0 siblings, 1 reply; 7+ messages in thread
From: Lars Ingebrigtsen @ 2021-02-21 13:15 UTC (permalink / raw)
  To: Basil L. Contovounesios; +Cc: emacs-devel

"Basil L. Contovounesios" <contovob@tcd.ie> writes:

> This is the only declare form property that doesn't quote its value,
> resulting in forms like (declare (completion 'foo)) rather than the more
> conventional (declare (completion foo)).  How's the following fix?

But you can say

(declare (completion (lambda (...) ...)))

So it's a list of functions, not a list of symbols...

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: master 9291e73 02/12: Add new 'declare' forms for command completion predicates
  2021-02-21 13:15     ` Lars Ingebrigtsen
@ 2021-02-21 14:11       ` Basil L. Contovounesios
  2021-02-21 15:54         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 7+ messages in thread
From: Basil L. Contovounesios @ 2021-02-21 14:11 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> "Basil L. Contovounesios" <contovob@tcd.ie> writes:
>
>> This is the only declare form property that doesn't quote its value,
>> resulting in forms like (declare (completion 'foo)) rather than the more
>> conventional (declare (completion foo)).  How's the following fix?
>
> But you can say
>
> (declare (completion (lambda (...) ...)))

Which my patch will turn into (function (lambda (...) ...)), which is
still correct and should be equivalent.

> So it's a list of functions, not a list of symbols...

What is a list?  The completion-predicate property takes on a single
value satisfying functionp.

Both lambdas and symbols can be functions; my patch treats both equally,
so I see it as the correct treatment of this declare form property.  If
you don't, then please elaborate on why not.

Thanks,

-- 
Basil



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: master 9291e73 02/12: Add new 'declare' forms for command completion predicates
  2021-02-21 14:11       ` Basil L. Contovounesios
@ 2021-02-21 15:54         ` Lars Ingebrigtsen
  2021-02-21 16:13           ` Basil L. Contovounesios
  0 siblings, 1 reply; 7+ messages in thread
From: Lars Ingebrigtsen @ 2021-02-21 15:54 UTC (permalink / raw)
  To: Basil L. Contovounesios; +Cc: emacs-devel

"Basil L. Contovounesios" <contovob@tcd.ie> writes:

>> But you can say
>>
>> (declare (completion (lambda (...) ...)))
>
> Which my patch will turn into (function (lambda (...) ...)), which is
> still correct and should be equivalent.

Sure, but it's a bit redundant.

>> So it's a list of functions, not a list of symbols...
>
> What is a list?  The completion-predicate property takes on a single
> value satisfying functionp.

Sorry, I meant a single function.

What I expect to see people actually doing here is

  (declare (completion #'foo))

or if it's a lambda, that Emacs will eventually byte-compile it before
sticking it into the plist.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: master 9291e73 02/12: Add new 'declare' forms for command completion predicates
  2021-02-21 15:54         ` Lars Ingebrigtsen
@ 2021-02-21 16:13           ` Basil L. Contovounesios
  2021-02-21 18:30             ` Lars Ingebrigtsen
  0 siblings, 1 reply; 7+ messages in thread
From: Basil L. Contovounesios @ 2021-02-21 16:13 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> What I expect to see people actually doing here is
>
>   (declare (completion #'foo))

Why should explicit #'-quoting be needed for (declare (completion foo))
when it's not needed for any other declare form property, including the
new and related 'modes' property:

  (declare (modes foo))
  (declare (gv-setter foo))
  (declare (gv-expander foo))
  (declare (obsolete foo ...))
  (declare (interactive-only foo))
  (declare (compiler-macro foo))
  (declare (indent foo))

How is (declare (completion ...)) any different to these?

> or if it's a lambda, that Emacs will eventually byte-compile it before
> sticking it into the plist.

Does the proposed patch stop that from happening?

-- 
Basil



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: master 9291e73 02/12: Add new 'declare' forms for command completion predicates
  2021-02-21 16:13           ` Basil L. Contovounesios
@ 2021-02-21 18:30             ` Lars Ingebrigtsen
  2021-02-26 11:34               ` Basil L. Contovounesios
  0 siblings, 1 reply; 7+ messages in thread
From: Lars Ingebrigtsen @ 2021-02-21 18:30 UTC (permalink / raw)
  To: Basil L. Contovounesios; +Cc: emacs-devel

"Basil L. Contovounesios" <contovob@tcd.ie> writes:

> Why should explicit #'-quoting be needed for (declare (completion foo))
> when it's not needed for any other declare form property, including the
> new and related 'modes' property:
>
>   (declare (modes foo))
>   (declare (gv-setter foo))
>   (declare (gv-expander foo))
>   (declare (obsolete foo ...))
>   (declare (interactive-only foo))
>   (declare (compiler-macro foo))
>   (declare (indent foo))
>
> How is (declare (completion ...)) any different to these?

Most of those refer to symbols (or numbers), so #'-ing is irrelevant.
But gv-setter (for one) does refer to a function, so there's precedence
for using symbols instead of functions here indeed.

Anybody else have an opinion?

>> or if it's a lambda, that Emacs will eventually byte-compile it before
>> sticking it into the plist.
>
> Does the proposed patch stop that from happening?

Not at all.  I just wanted to mention it.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: master 9291e73 02/12: Add new 'declare' forms for command completion predicates
  2021-02-21 18:30             ` Lars Ingebrigtsen
@ 2021-02-26 11:34               ` Basil L. Contovounesios
  0 siblings, 0 replies; 7+ messages in thread
From: Basil L. Contovounesios @ 2021-02-26 11:34 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: emacs-devel

Lars Ingebrigtsen <larsi@gnus.org> writes:

> "Basil L. Contovounesios" <contovob@tcd.ie> writes:
>
>> Why should explicit #'-quoting be needed for (declare (completion foo))
>> when it's not needed for any other declare form property, including the
>> new and related 'modes' property:
>>
>>   (declare (modes foo))
>>   (declare (gv-setter foo))
>>   (declare (gv-expander foo))
>>   (declare (obsolete foo ...))
>>   (declare (interactive-only foo))
>>   (declare (compiler-macro foo))
>>   (declare (indent foo))
>>
>> How is (declare (completion ...)) any different to these?
>
> Most of those refer to symbols (or numbers), so #'-ing is irrelevant.
> But gv-setter (for one) does refer to a function, so there's precedence
> for using symbols instead of functions here indeed.
>
> Anybody else have an opinion?

It seems there were no objections, so I applied the patch.

Function-quote completion property of declare form
752278834b 2021-02-26 11:26:22 +0000
https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=752278834b3d317a65135cdaa392b0468ce7372c

Thanks,

-- 
Basil



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-02-26 11:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20210214131500.30678.63538@vcs0.savannah.gnu.org>
     [not found] ` <20210214131502.DADCE20DFB@vcs0.savannah.gnu.org>
2021-02-20 19:30   ` master 9291e73 02/12: Add new 'declare' forms for command completion predicates Basil L. Contovounesios
2021-02-21 13:15     ` Lars Ingebrigtsen
2021-02-21 14:11       ` Basil L. Contovounesios
2021-02-21 15:54         ` Lars Ingebrigtsen
2021-02-21 16:13           ` Basil L. Contovounesios
2021-02-21 18:30             ` Lars Ingebrigtsen
2021-02-26 11:34               ` Basil L. Contovounesios

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).