Subject: bug#76604: closed (Re: bug#76604: eglot causes eldoc error: (invalid-function incf))

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 28 Feb 2025 01:34:04 +0000

Your bug report

#76604: eglot causes eldoc error: (invalid-function incf)

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
76604: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=76604
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#76604: eglot causes eldoc error: (invalid-function incf)
From: Stefan Kangas <[email-masked]>
To: Daniel Gomez <[email-masked]>
Cc: [email-masked]
Date: Thu, 27 Feb 2025 17:33:24 -0800
List-Id: <debbugs-submit.debbugs.gnu.org>

Version: 31.1

Daniel Gomez <[email-masked]> writes:

> Dear emacs maintainers,
>
> Trying eglot for the first time on a python file.
> Everything works but I get on the minibuffer an eldoc error: (invalid-function
> incf).
>
> For context: I use straight for package management, but have no declarations
> regarding eglot nor eldoc on my init.el.
> Emacs 30.1, but I tried under 29.4 with the same issue.
>
> If I set debug-on-error, I get the following, which isn't really informative:
>
> Debugger entered--Lisp error: (invalid-function incf)
>   incf(0)
>   #f(compiled-function (method origin) #<bytecode -0xaadc1b6e8ed7d7>)(:patient
>   eglot-signature-eldoc-function)
>   eldoc--make-callback(:patient eglot-signature-eldoc-function)
>   #f(compiled-function (f) #<bytecode
>    -0x6cf6f9fa4609ff8>)(eglot-signature-eldoc-function)
>   run-hook-wrapped(#f(compiled-function (f) #<bytecode -0x6cf6f9fa4609ff8>)
>  eglot-signature-eldoc-function)
>   eldoc-documentation-compose()
>   eldoc--invoke-strategy(nil)
>   eldoc-print-current-symbol-info()
>   #f(compiled-function () #<bytecode -0x1617e223c153308b>)()
>   apply(#f(compiled-function () #<bytecode -0x1617e223c153308b>) nil)
>   timer-event-handler([t 0 0 500000 nil #f(compiled-function () #<bytecode
>  -0x1617e223c153308b>) nil idle 0 nil])
>
>
> It seems incf is being used in eldoc.el, an Emacs core package. That should not
> happen since as far as I understand cl is deprecated.
>
> ;;; eldoc.el --- Show function arglist or variable docstring in echo area  -*-
>    lexical-binding:t; -*-
>
> ;; Copyright (C) 1996-2025 Free Software Foundation, Inc.
>
> ;; Author: Noah Friedman <[email-masked]>
> ;; Keywords: extensions
> ;; Created: 1995-10-06
> ;; Version: 1.15.0
> ;; Package-Requires: ((emacs "26.3"))
>
> ;; This is a GNU ELPA :core package.  Avoid functionality that is not
> ;; compatible with the version of Emacs recorded above.

Thanks for the bug report!

I was surprised that any users were affected by this, but João explained
the reason why on GitHub:

    "Straight grabs the bleeding edge from master, makes a package
    out of that, so effectively jumps over the safety of the release
    mechanism. Package.el doesn't do that (by default)."

I guess we should be grateful for the pre-alpha testing that users of
"straight" are doing for us.  I just hope for their sake that this
aspect of straight is clearly documented.

Anyways, this should now be fixed on master, so I'm closing this bug.
Please test the fix and report back if it didn't work.

Subject: eglot causes eldoc error: (invalid-function incf)
From: Daniel Gomez <[email-masked]>
To: [email-masked]
Cc: [email-masked]
Date: Wed, 26 Feb 2025 21:40:09 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Dear emacs maintainers,

Trying eglot for the first time on a python file.
Everything works but I get on the minibuffer an eldoc error: 
(invalid-function incf).

For context: I use straight for package management, but have no 
declarations regarding eglot nor eldoc on my init.el.
Emacs 30.1, but I tried under 29.4 with the same issue.

If I set debug-on-error, I get the following, which isn't really 
informative:

Debugger entered--Lisp error: (invalid-function incf)
   incf(0)
   #f(compiled-function (method origin) #<bytecode 
-0xaadc1b6e8ed7d7>)(:patient eglot-signature-eldoc-function)
   eldoc--make-callback(:patient eglot-signature-eldoc-function)
   #f(compiled-function (f) #<bytecode 
-0x6cf6f9fa4609ff8>)(eglot-signature-eldoc-function)
   run-hook-wrapped(#f(compiled-function (f) #<bytecode 
-0x6cf6f9fa4609ff8>) eglot-signature-eldoc-function)
   eldoc-documentation-compose()
   eldoc--invoke-strategy(nil)
   eldoc-print-current-symbol-info()
   #f(compiled-function () #<bytecode -0x1617e223c153308b>)()
   apply(#f(compiled-function () #<bytecode -0x1617e223c153308b>) nil)
   timer-event-handler([t 0 0 500000 nil #f(compiled-function () 
#<bytecode -0x1617e223c153308b>) nil idle 0 nil])

It seems incf is being used in eldoc.el, an Emacs core package. That 
should not happen since as far as I understand cl is deprecated.

;;; eldoc.el --- Show function arglist or variable docstring in echo 
area  -*- lexical-binding:t; -*-

;; Copyright (C) 1996-2025 Free Software Foundation, Inc.

;; Author: Noah Friedman <[email-masked]>
;; Keywords: extensions
;; Created: 1995-10-06
;; Version: 1.15.0
;; Package-Requires: ((emacs "26.3"))

;; This is a GNU ELPA :core package.  Avoid functionality that is not
;; compatible with the version of Emacs recorded above.

Thank you.

Regards,
Daniel

ps: issue on github: 
https://github.com/joaotavora/eglot/discussions/1487#discussioncomment-12330803