unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
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.)





  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).