Subject: bug#57996: 28.2; imenu doesn't differentiate overloaded c++ functions

From: Alan Mackenzie <[email-masked]>
Date: Wed, 5 Oct 2022 10:31:11 +0000

Hello, Chris and Philip.

On Sun, Oct 02, 2022 at 13:13:16 +0000, Philip Kaludercic wrote:
> "Chris Hecker" <[email-masked]> writes:

> > With this dumb c++ file:
> > ----
> > int Function( int n ) {
> >   return n;
> > }
> > int Function( float v ) {
> >   return (int)(v + 0.5);
> > }
> > ----

> > Hitting imenu only gives a single Function entry.  It should probably
> > give two, maybe with a line number after them like "Function(123)" or
> > whatever.  Currently there's no way to get to the second Function from
> > imenu.

imenu is old and rather simplistic.  It parses a buffer, then stores the
results in an association list.  It then uses the function assoc on that
list to get "the" match.  What we could do with is a function which gets
_all_ the matches from an alist, and I've asked on emacs-devel about
this.

> Note that this is not the case when using Eglot and a LSP server like
> clangd.

Much more modern!

> I've CC'ed Alan to see if he knows how this could be done by c++-mode
> itself.

I'm pretty sure it couldn't be.  I think it would involve enhancing
imenu.  The scanning interface to imenu allows just function names to be 
collected.  It doesn't allow anything extra (such as a line number) to
be included into the alist.

I've looked at problems with imenu in C++ Mode before, but got bogged
down without coming up with a workable solution.  There the problem was
identically named methods in different classes, or something like that.

So, maybe we can enhance imenu.  But not for Emacs 29.

-- 
Alan Mackenzie (Nuremberg, Germany).