From: Eli Zaretskii <eliz@gnu.org>
To: Winston <wbe@psr.com>
Cc: 28403@debbugs.gnu.org, dgutov@yandex.ru
Subject: bug#28403: 25.2; find-tag works, but xref-find-definitions
Date: Sun, 10 Sep 2017 22:09:28 +0300 [thread overview]
Message-ID: <83tw0atlp3.fsf@gnu.org> (raw)
In-Reply-To: <201709101827.v8AIRMse018692@psr.com> (message from Winston on Sun, 10 Sep 2017 14:27 EDT)
> Date: Sun, 10 Sep 2017 14:27 EDT
> From: Winston <wbe@psr.com>
> Cc: dgutov@yandex.ru, 28403@debbugs.gnu.org
>
> Eli kindly replied:
> > Could you please post a complete example of the code in question,
> > including the definition of the _ARGS1 macro, and any other macros and
> > typedefs that would make the example stand-alone? I think I
> > understand what has happened, but I'd like to be sure before we decide
> > what to do about it.
>
> Sure (well, it's a semi-complete example). [...]
Thanks, this confirms my suspicion: as Dmitry says, etags produces
TAGS for the _ARG# macros, and doesn't see the function names. So the
fact that find-tag finds the functions is just sheer luck: it falls
back to more or less simple text search, so it can find anything you
have in the TAGS tables.
To have xref-find-definitions work in this case, you need to help
etags a bit, see below.
> > [The new xref function] is already better in several areas:
>
> I noticed that, and I liked seeing the list of matches when there's >1,
> rather than having to do {arg} find-tag, possibly repeatedly, when the
> one find-tag finds first isn't the one I wanted. However, if the basic
> find wasn't going to work, or was going to have a lot of false positives,
> then I'd stick with find-tag, which has generally worked well (almost no
> wrong matches, but it helps that my code tries to have all function
> names in all files be unique, even when they're static, so there's
> rarely >1 match).
Again, it seems to work well in your case because you take special
precautions to avoid producing symbols that would generate false
positives. But that is a fragile solution, IMO.
> > It is even possible that, given the details I requested above, I will
> > be able to help you get your use case working with xref, so please
> > don't give up on xref, not just yet.
>
> I haven't. :)
Good, because here's how I suggest you invoke etags to solve the
problems with the _ARGS# macros:
etags --regex="/[ \t]*\([^ \t]+\)[ \t]+_ARGS/\1/" ...
(replace "..." with all the other arguments you normally give when you
invoke etags). This will tell etags to tag the symbols immediately
preceding the _ARGS# macro invocations _in_addition_ to what it
already does. Then you can use xref-find-definitions in its default
configuration, and it will find your functions.
(The --regexp switch to etags is described in the Emacs manual.)
next prev parent reply other threads:[~2017-09-10 19:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-09 22:40 bug#28403: 25.2; find-tag works, but xref-find-definitions doesn't; bug? Winston
2017-09-09 22:58 ` Drew Adams
2017-09-09 23:10 ` Dmitry Gutov
2017-09-10 2:50 ` bug#28403: 25.2; find-tag works, but xref-find-definitions Winston
2017-09-10 9:01 ` Dmitry Gutov
2017-09-10 14:29 ` Eli Zaretskii
2017-09-10 21:43 ` Dmitry Gutov
2017-09-11 2:38 ` Eli Zaretskii
2017-09-11 8:58 ` Dmitry Gutov
2017-09-11 14:43 ` Eli Zaretskii
2017-09-12 23:40 ` Dmitry Gutov
2017-09-13 15:32 ` Eli Zaretskii
2017-09-14 12:13 ` Dmitry Gutov
2017-09-14 17:13 ` Eli Zaretskii
2017-09-19 0:44 ` Dmitry Gutov
2017-09-19 3:58 ` Eli Zaretskii
2017-09-10 14:52 ` Winston
2017-09-10 18:27 ` Winston
2017-09-10 19:09 ` Eli Zaretskii [this message]
2017-09-10 19:06 ` Winston
2017-09-10 19:10 ` Winston
2017-09-10 20:12 ` Winston
2017-09-11 2:31 ` Eli Zaretskii
2017-09-10 21:19 ` Winston
2017-09-10 21:35 ` Dmitry Gutov
2017-09-11 2:34 ` Eli Zaretskii
2017-09-11 3:19 ` Winston
2017-09-11 4:05 ` Winston
2017-09-11 16:23 ` Eli Zaretskii
2017-09-11 4:11 ` Winston
2017-09-11 5:02 ` Winston
2017-09-11 16:51 ` Eli Zaretskii
2017-09-14 17:37 ` Winston
2017-09-14 22:08 ` Dmitry Gutov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83tw0atlp3.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=28403@debbugs.gnu.org \
--cc=dgutov@yandex.ru \
--cc=wbe@psr.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).