[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#28407: 26.0.50; xref should use imenu
From: |
Visuwesh |
Subject: |
bug#28407: 26.0.50; xref should use imenu |
Date: |
Mon, 16 May 2022 12:29:58 +0530 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) |
[ஞாயிறு மே 15, 2022] Visuwesh wrote:
> [திங்கள் செப்டம்பர் 11, 2017] Dmitry Gutov wrote:
>
>> On 9/10/17 7:23 PM, Tom Tromey wrote:
>>> It would be nice if imenu were a back end for xref.
>>> Then M-. could also use symbols found by imenu.
>>> A further wrinkle on this would be if xref, project, and imenu
>>> worked
>>> together, so that M-. would automatically know to look at imenu results
>>> for other buffers in the same project.
>>
>> Agreed. It could be a nice default for when no tags table is currently
>> visited.
>
> I tried to write a general imenu backend in attached file (extracted
> from my init.el) but I hit quite a few roadblocks,
>
> 1. I activate the imenu backend iff there are no tags table defined
> for the buffer but this means that one cannot use the imenu
> backend to jump to definitions for symbols that TAGS do not know
> of currently. I can think of two ways to solve this problem,
>
> (a) Check if the symbol is in TAGS table.
> (b) Modify the etags backend so that the user can say "I have no
> TAGS table for this file/project/whatever."
>
> (a) is definitely not clean, and (b) sounds feasible but similar
> situation can also exist with other backends (like elisp).
>
> I'm lost on how to solve this problem.
>
> 2. I have not defined all the methods and the completion-table does
> not handle the nested case of the index alist. AFAIU from `(elisp)
> Programmed Completion', completion "ends" when `try-completion'
> returns t but I seem to be mistaken. I have to rewrite
> completion-table to be like `imenu--completion-buffer' but I don't
> know how to pull that off.
>
> 3. `imenu-xref--in-alist' is mostly a 1-1 copy of `imenu--in-alist'
> with the only difference being my function returns all matches of
> the symbol instead of just the first one. This should be easy
> enough to fix by adding an optional argument INCLUDE-ALL to
> `imenu--in-alist'.
>
> I'm testing in python-mode with the following settings,
>
> (setq imenu-name-lookup-function (lambda (symbol item) (string-prefix-p
> symbol item))
> python-imenu-format-parent-item-jump-label-function (lambda (_
> name) name))
I solved (2) by using an affixation function. I did (3) as well, and
I'm attaching my work as a patch against imenu.el.
imenu-xref.patch
Description: Text Data