On Mon, Feb 22, 2021 at 7:21 AM Eli Zaretskii <
eliz@gnu.org> wrote:
> From: chad <yandros@gmail.com>
> Date: Sun, 21 Feb 2021 21:02:43 -0800
> Cc: Robert Pluim <rpluim@gmail.com>, Lars Ingebrigtsen <larsi@gnus.org>, Richard Stallman <rms@gnu.org>,
> EMACS development team <emacs-devel@gnu.org>
>
> I suspect that I ran into an instance of this recently, where the helpful package (an extension that offers
> expanded help functions, basically) had trouble in it's helpful-callable function with facemenu-face-menu. I
> tracked the problem down to a bad interaction in helpful with this code in facemenu.el:
>
> (defvar facemenu-face-menu
> [...])
> (defalias 'facemenu-face-menu facemenu-face-menu)
>
> The problem that I get is:
>
> Debugger entered--Lisp error: (wrong-type-argument sequencep t)
> mapconcat(identity (t) " ")
> s-join(" " (t))
> helpful--signature(facemenu-face-menu)
> helpful-update()
> helpful-callable(facemenu-face-menu)
> funcall-interactively(helpful-callable facemenu-face-menu)
> call-interactively(helpful-callable nil nil)
> command-execute(helpful-callable)
>
> I'm not familiar with the (defalias 'foo foo) idiom, so maybe it should be expected to work, and it's just a bug
> in helpful. (I reported it to the package maintainers already, with a note that I'd mention it here.) There are a
> few other instances of in emacs that I found with a quick search, and they also cause similar trouble for
> helpful.
>
> Is this an example of an accidental functional value, as I originally expected, or am I barking up the wrong
> tree and instead just looking at a parsing bug? (My lisp is largely self taught and started with Scheme, so
> these parts of elisp are murky to me.)
I think it's a bug in helpful: facemenu-face-menu is a keymap, so
maybe helpful isn't ready for that.
Good point; I didn't (but should have) say: the issue, I think, is that the use of defalias makes helpful-callable think that facemenu-face-menu is a "viable callable", when it isn't. This doesn't mean that it's not a bug in helpful, of course; I'm just trying to understand if the bug is that helpful should be able to tell that facemenu-face-menu isn't "callable". Here's the start of helpful-callable, fwiw:
(defun helpful-callable (symbol)
"Show help for function, macro or special form named SYMBOL.
See also `helpful-macro', `helpful-function' and `helpful-command'."
(interactive
(list (helpful--read-symbol
"Callable: "
(helpful--callable-at-point)
#'fboundp)))
helpful--read-symbol seems to be a simple porcelain around completing-read with, in this case, #'fboundp as the predicate. That said, I'm not sure if this is just a bug in helpful being confused by the idiom with defalias, via the function-value usage you mentioned upthread.
Thanks,
~Chad