GNU bug report logs - #50508
27.2; find-function ignore find-function-source-path

Previous Next

Package: emacs;

Reported by: Thierry Volpiatto <thievol <at> posteo.net>

Date: Fri, 10 Sep 2021 12:23:02 UTC

Severity: normal

Found in version 27.2

Fixed in version 28.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 50508 in the body.
You can then email your comments to 50508 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#50508; Package emacs. (Fri, 10 Sep 2021 12:23:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Thierry Volpiatto <thievol <at> posteo.net>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 10 Sep 2021 12:23:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Thierry Volpiatto <thievol <at> posteo.net>
To: bug-gnu-emacs <at> gnu.org
Subject: 27.2; find-function ignore find-function-source-path
Date: Fri, 10 Sep 2021 12:13:49 +0000
Hello,

according its docstring, find-function should honor
find-function-source-path but it doesn't, here from emacs -Q:

    (let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
      (find-function 'find-function))
Jump to the definition of find-function in /usr/local/share/.../find-func.el.gz

However find-library-name is using it:

    (let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
      (find-library-name "find-func"))
;; => "/home/thierry/tmp/emacs/lisp/emacs-lisp/find-func.el"

So either it is a bug or I misunderstand something.

Thanks. 
 


In GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10)
 of 2021-03-25 built on IPadS340
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Linux Mint 19.3

Recent messages:
[mu4e] Indexing... processed 0, updated 0
[mu4e] Indexing completed; processed 0, updated 0, cleaned-up 0
Imenu indexing buffers...done
Mark set [2 times]
Saving file /home/thierry/.emacs.d/save-scratch.el...
Wrote /home/thierry/.emacs.d/save-scratch.el
Mark set [2 times]
"/home/thierry/tmp/emacs/lisp/emacs-lisp/find-func.el"
Auto-saving...
Mark set [2 times]

Configured using:
 'configure CFLAGS=-O8 --without-dbus --without-gconf
 --without-gsettings --with-mailutils --with-cairo'

Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM GLIB NOTIFY INOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: fr_FR.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Ilisp

Minor modes in effect:
  global-undo-tree-mode: t
  undo-tree-mode: t
  global-ligature-mode: t
  ligature-mode: t
  psession-mode: t
  psession-savehist-mode: t
  global-git-gutter-mode: t
  display-time-mode: t
  winner-mode: t
  show-paren-mode: t
  helm-epa-mode: t
  helm-descbinds-mode: t
  helm-adaptive-mode: t
  helm-mode: t
  shell-dirtrack-mode: t
  helm-popup-tip-mode: t
  async-bytecomp-package-mode: t
  dired-async-mode: t
  minibuffer-depth-indicate-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/thierry/.emacs.d/elpa/async-20210823.528/async-bytecomp hides /usr/local/share/emacs/site-lisp/emacs-async/async-bytecomp
/home/thierry/.emacs.d/elpa/async-20210823.528/async hides /usr/local/share/emacs/site-lisp/emacs-async/async
/home/thierry/.emacs.d/elpa/async-20210823.528/async-pkg hides /usr/local/share/emacs/site-lisp/emacs-async/async-pkg
/home/thierry/.emacs.d/elpa/async-20210823.528/smtpmail-async hides /usr/local/share/emacs/site-lisp/emacs-async/smtpmail-async
/home/thierry/.emacs.d/elpa/async-20210823.528/dired-async hides /usr/local/share/emacs/site-lisp/emacs-async/dired-async
/home/thierry/.emacs.d/elpa/async-20210823.528/async-autoloads hides /usr/local/share/emacs/site-lisp/emacs-async/async-autoloads
/home/thierry/.emacs.d/elpa/seq-2.22/seq hides /usr/local/share/emacs/27.2/lisp/emacs-lisp/seq

Features:
(shadow mail-extr epa-mail face-remap emacsbug helm-command eieio-opt
speedbar sb-image ezimage dframe help-fns radix-tree add-log which-func
image-file w3m-symbol w3m-filter w3m-form w3m-cookie w3m-tabmenu
w3m-session w3m-search helm-w3m w3m-bookmark w3m doc-view jka-compr
image-mode exif timezone w3m-hist w3m-fb bookmark-w3m w3m-ems
w3m-favicon w3m-image tab-line w3m-proc w3m-util addressbook-bookmark
mu4e-config org-mu4e mu4e-contrib mu4e-patch mu4e mu4e-org mu4e-view
gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group
gnus-undo gnus-start gnus-cloud nnimap nnmail mail-source utf7 netrc
nnoo gnus-spec gnus-int gnus-range gnus-win mu4e-main mu4e-headers
mu4e-lists mu4e-compose mu4e-draft mu4e-actions smtpmail sendmail
mu4e-search mu4e-bookmarks mu4e-mark mu4e-message shr svg dom flow-fill
hl-line mu4e-contacts mu4e-update mu4e-folders mu4e-server mu4e-context
mu4e-vars mu4e-helpers ido mu4e-meta helm-ring helm-x-files
helm-for-files helm-bookmark bookmark pp tramp-archive tramp-gvfs dbus
em-unix em-term term disp-table ehelp em-script em-prompt em-ls em-hist
em-pred em-glob em-dirs esh-var em-cmpl em-basic em-banner em-alias
esh-mode eshell esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg
esh-module esh-groups esh-util esh-toggle helm-ls-git vc vc-dispatcher
make-mode sh-script smie executable conf-mode vc-git diff-mode
bug-reference naquadah-theme view solar cal-dst holidays hol-loaddefs
tv-utils undo-tree diff rx ligature rainbow-mode color psession frameset
log-view pcvs-util pcmpl-git cl-indent ffap autocrypt-message message
rmc puny rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader autocrypt-gnus gnus nnheader
gnus-util rmail rmail-loaddefs rfc2047 rfc2045 text-property-search
mail-utils mm-util mail-prsvr autocrypt-mu4e autocrypt ietf-drums
config-w3m git-gutter mule-util appt diary-lib diary-loaddefs gud
pcomplete-extension pcmpl-unix pcmpl-gnu iterator wdired dired-extension
org-config ob-gnuplot org-crypt net-utils time pcase all-the-icons
all-the-icons-faces data-material data-weathericons data-octicons
data-fileicons data-faicons data-alltheicons winner w3m-wget wget
thingatpt wget-sysdep autotest-mode autoconf-mode paren woman man ediff
ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init
ediff-util init-helm helm-fd epa derived epg epg-config helm-epa
helm-misc helm-imenu imenu helm-elisp-package helm-find helm-org org ob
ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src
ob-comint org-pcomplete org-list org-faces org-entities noutline outline
org-version ob-emacs-lisp ob-core ob-eval org-table ol org-keys
org-compat advice org-macs org-loaddefs cal-menu calendar cal-loaddefs
helm-external helm-net xml url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap
isearch-light helm-descbinds cus-edit wid-edit helm-ipython helm-elisp
helm-eval edebug backtrace find-func helm-info python tramp-sh
helm-adaptive helm-mode helm-files filenotify tramp tramp-loaddefs
trampver tramp-integration files-x tramp-compat shell pcomplete
parse-time iso8601 time-date ls-lisp helm-buffers helm-occur helm-tags
helm-locate helm-grep wgrep-helm wgrep grep compile comint ansi-color
ring helm-regexp format-spec helm-utils helm-help helm-types
helm-extensions-autoloads helm-config helm-autoloads helm async-bytecomp
helm-global-bindings helm-easymenu helm-source helm-multi-match helm-lib
dired-async dired-aux dired dired-loaddefs async popup diminish cl-extra
help-mode mb-depth server edmacro kmacro avoid cus-start cus-load
use-package use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core info w3m-load
package easymenu browse-url url-handlers url-parse auth-source cl-seq
eieio eieio-core cl-macs eieio-loaddefs password-cache json subr-x map
url-vars seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode
lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch
timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote threads inotify lcms2
dynamic-setting font-render-setting cairo move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 606804 343184)
 (symbols 48 38186 3)
 (strings 32 158341 27907)
 (string-bytes 1 5050526)
 (vectors 16 81276)
 (vector-slots 8 1203338 169776)
 (floats 8 1751 947)
 (intervals 56 13168 2111)
 (buffers 1000 134))
<#secure method=pgpmime mode=sign>

-- 
Thierry




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50508; Package emacs. (Sat, 11 Sep 2021 13:32:02 GMT) Full text and rfc822 format available.

Message #8 received at 50508 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Thierry Volpiatto <thievol <at> posteo.net>
Cc: 50508 <at> debbugs.gnu.org
Subject: Re: bug#50508: 27.2; find-function ignore find-function-source-path
Date: Sat, 11 Sep 2021 15:31:48 +0200
Thierry Volpiatto <thievol <at> posteo.net> writes:

> according its docstring, find-function should honor
> find-function-source-path but it doesn't, here from emacs -Q:
>
>     (let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
>       (find-function 'find-function))
> Jump to the definition of find-function in /usr/local/share/.../find-func.el.gz
>
> However find-library-name is using it:
>
>     (let ((find-function-source-path '("/home/thierry/tmp/emacs/lisp/emacs-lisp/")))
>       (find-library-name "find-func"))
> ;; => "/home/thierry/tmp/emacs/lisp/emacs-lisp/find-func.el"
>
> So either it is a bug or I misunderstand something.

I'm not a sure whether it's a bug or not, but the functions certainly
don't work the way they're documented.  There's a lot of functions
involved here, but it looks like this has been broken for many years
(since before Emacs 25.1, at least).

Currently the implementation basically just looks a load-history, so
this is wrong:

---
The library where FUNCTION is defined is searched for in
‘find-function-source-path’, if non-nil, otherwise in ‘load-path’.
---

That is, it doesn't do any searching at all, as far as I can tell.

`find-library-name', on the other hand, does search.

There's several different issues here.

1) If the function is defined, say, with `M-: (defun foo ())'
then `find-function-library' will return nil (which is correct), which
means that `find-function-search-for-symbol' will give up immediately.
But it's hard to say what it should do otherwise -- look in all .el
files in the load path to find it?  This is what it's documented to do:

---
If the file where FUNCTION is defined is not known, then it is
searched for in `find-function-source-path' if non-nil, otherwise
in `load-path'."
---

This functionality was apparently lost in this change

commit 2cd6a032aa501a3964be9d222e65bb44ba9960f7
Author:     Richard M. Stallman <rms <at> gnu.org>
AuthorDate: Mon Jun 29 17:23:25 1998 +0000

or...  well, I'm not sure, but it stopped doing regexp searches through
all .el files at some point, and instead just uses the load history.

I think fixing this isn't...  useful.

2) If the function was defined in a .el file (as this bug report
describes), then Emacs knows the name of the library.  But it doesn't
then use `find-library-name' to locate the library, but just uses
load-history.  Fixing this is pretty easy -- just use
`find-library-name' and use that instead of the value from
`load-history'.

Anybody else have any insights here?

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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50508; Package emacs. (Sat, 11 Sep 2021 16:36:01 GMT) Full text and rfc822 format available.

Message #11 received at 50508 <at> debbugs.gnu.org (full text, mbox):

From: Thierry Volpiatto <thievol <at> posteo.net>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 50508 <at> debbugs.gnu.org
Subject: Re: bug#50508: 27.2; find-function ignore find-function-source-path
Date: Sat, 11 Sep 2021 16:29:58 +0000
[Message part 1 (text/plain, inline)]
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> 2) If the function was defined in a .el file (as this bug report
> describes), then Emacs knows the name of the library.  But it doesn't
> then use `find-library-name' to locate the library, but just uses
> load-history.  Fixing this is pretty easy -- just use
> `find-library-name' and use that instead of the value from
> `load-history'.

Yes, this is working fine, it is what I am using actually.
https://github.com/emacs-helm/helm/blob/master/helm-lib.el#L1230


-- 
Thierry
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50508; Package emacs. (Mon, 13 Sep 2021 07:49:01 GMT) Full text and rfc822 format available.

Message #14 received at 50508 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Thierry Volpiatto <thievol <at> posteo.net>
Cc: 50508 <at> debbugs.gnu.org
Subject: Re: bug#50508: 27.2; find-function ignore find-function-source-path
Date: Mon, 13 Sep 2021 09:48:19 +0200
Thierry Volpiatto <thievol <at> posteo.net> writes:

> Lars Ingebrigtsen <larsi <at> gnus.org> writes:
>
>> 2) If the function was defined in a .el file (as this bug report
>> describes), then Emacs knows the name of the library.  But it doesn't
>> then use `find-library-name' to locate the library, but just uses
>> load-history.  Fixing this is pretty easy -- just use
>> `find-library-name' and use that instead of the value from
>> `load-history'.
>
> Yes, this is working fine, it is what I am using actually.
> https://github.com/emacs-helm/helm/blob/master/helm-lib.el#L1230

I'm just wondering whether it makes sense to fix 2) if we're not fixing
1), and I don't think fixing 1) is a good idea (it'd make the function
massively slower).

Instead I'm wondering whether we should just fix the doc strings here to
not mention `find-function-source-path' in `find-function' (etc), so
that the doc string matches the implementation, and instead mention
`find-library-name' (in the doc string) for your use case.

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




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50508; Package emacs. (Mon, 13 Sep 2021 15:29:02 GMT) Full text and rfc822 format available.

Message #17 received at 50508 <at> debbugs.gnu.org (full text, mbox):

From: Thierry Volpiatto <thievol <at> posteo.net>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 50508 <at> debbugs.gnu.org
Subject: Re: bug#50508: 27.2; find-function ignore find-function-source-path
Date: Mon, 13 Sep 2021 15:24:24 +0000
[Message part 1 (text/plain, inline)]
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Thierry Volpiatto <thievol <at> posteo.net> writes:
>
>> Lars Ingebrigtsen <larsi <at> gnus.org> writes:
>>
>>> 2) If the function was defined in a .el file (as this bug report
>>> describes), then Emacs knows the name of the library.  But it doesn't
>>> then use `find-library-name' to locate the library, but just uses
>>> load-history.  Fixing this is pretty easy -- just use
>>> `find-library-name' and use that instead of the value from
>>> `load-history'.
>>
>> Yes, this is working fine, it is what I am using actually.
>> https://github.com/emacs-helm/helm/blob/master/helm-lib.el#L1230
>
> I'm just wondering whether it makes sense to fix 2) if we're not fixing
> 1), and I don't think fixing 1) is a good idea (it'd make the function
> massively slower).
>
> Instead I'm wondering whether we should just fix the doc strings here to
> not mention `find-function-source-path' in `find-function' (etc), so
> that the doc string matches the implementation, and instead mention
> `find-library-name' (in the doc string) for your use case.

Yes sure, that's ok for me, I was just surprized to not be able to
let-bound `find-function-source-path` and run find-function just after
with the expected effect described in docstring, once you know it, you
can just write a function using `find-library-name` like I did.

Thanks.

-- 
Thierry
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50508; Package emacs. (Tue, 14 Sep 2021 11:46:01 GMT) Full text and rfc822 format available.

Message #20 received at 50508 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Thierry Volpiatto <thievol <at> posteo.net>
Cc: 50508 <at> debbugs.gnu.org
Subject: Re: bug#50508: 27.2; find-function ignore find-function-source-path
Date: Tue, 14 Sep 2021 13:45:18 +0200
Thierry Volpiatto <thievol <at> posteo.net> writes:

> Yes sure, that's ok for me, I was just surprized to not be able to
> let-bound `find-function-source-path` and run find-function just after
> with the expected effect described in docstring, once you know it, you
> can just write a function using `find-library-name` like I did.

Yup.  So I've now updated the documentation here, and I've also renamed
the variable to find-library-source-path (but kept the old name as an
obsolete variable alias).

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




bug marked as fixed in version 28.1, send any further explanations to 50508 <at> debbugs.gnu.org and Thierry Volpiatto <thievol <at> posteo.net> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Tue, 14 Sep 2021 11:46:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#50508; Package emacs. (Tue, 14 Sep 2021 17:26:02 GMT) Full text and rfc822 format available.

Message #25 received at 50508 <at> debbugs.gnu.org (full text, mbox):

From: Thierry Volpiatto <thievol <at> posteo.net>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 50508 <at> debbugs.gnu.org
Subject: Re: bug#50508: 27.2; find-function ignore find-function-source-path
Date: Tue, 14 Sep 2021 17:24:19 +0000
[Message part 1 (text/plain, inline)]
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Thierry Volpiatto <thievol <at> posteo.net> writes:
>
>> Yes sure, that's ok for me, I was just surprized to not be able to
>> let-bound `find-function-source-path` and run find-function just after
>> with the expected effect described in docstring, once you know it, you
>> can just write a function using `find-library-name` like I did.
>
> Yup.  So I've now updated the documentation here, and I've also renamed
> the variable to find-library-source-path (but kept the old name as an
> obsolete variable alias).

Great, thanks.

-- 
Thierry
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 13 Oct 2021 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 188 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.