unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dmitry@gutov.dev>
To: "João Távora" <joaotavora@gmail.com>
Cc: "Spencer Baugh" <sbaugh@janestreet.com>,
	emacs-devel@gnu.org, "Eshel Yaron" <me@eshelyaron.com>,
	"John Yates" <john@yates-sheets.org>, Ergus <spacibba@aol.com>,
	"Felicián Németh" <felician.nemeth@gmail.com>,
	"Filipp Gunbin" <fgunbin@fastmail.fm>
Subject: Re: Adding support for xref jumping to headers/interfaces
Date: Mon, 27 Nov 2023 18:04:02 +0200	[thread overview]
Message-ID: <869c25b8-4c99-fb35-cd8c-b1a8a6256e04@gutov.dev> (raw)
In-Reply-To: <CALDnm50Zc5=eQbbw+p_XsefOK1acM+WpEmx0bwAvppEL2tFWDw@mail.gmail.com>

On 27/11/2023 17:45, João Távora wrote:
> On Mon, Nov 27, 2023 at 3:17 PM Dmitry Gutov <dmitry@gutov.dev> wrote:
> 
>>> In my view, again, we should not limit ourselves to a triad
>>> of kinds clumsily inherited from LSP.  We should limit that LSP
>>> concept to Eglot.  It is not flexible enough, because it can't
>>> be.  But Xref is for much more than LSP.
>>
>> What it seems you are saying is that we never should try to extend the
>> set of definition-finding commands above what's already in xref.el.
> 
> Not necessarily.  I'm saying we shouldn't make that a priority
> or the rest of this useful feature contingent on that.  If we
> someday come to the blissful epiphany that every language ever to
> be and to have been has the fundamental concept of a watermelon in it,
> then we can think about xref-find-watermelon.

In 20-30 years or so?

>> Because it seems clear that we're unlikely to find a more
>> widely-supported set of additional kinds that the aforementioned triad,
>> in any medium-term future.
> 
> They're not particularly well supported, they won't age well.  LSP
> uses that trio for two reasons: it doesn't have major modes or a
> programming language, and it's driven in part by commercial vendors of
> specific large language implementations.  But Editors like VSCode still
> have "plugins" akin to our major modes.

I don't know about aging well: most of the aforementioned ones have had 
meaning for the whole 15 years of my career (that's not too long, but 
still), and typeDefinitions is apparently something more helpful in 
newer popular languages which rely on type inference (so there's rarely 
a type annotation nearby to 'M-.' on).

> I wouldn't be surprised if these plugins don't have total freedom over
> what part of LSP they expose to the user.
> 
> Opening VSCode on a C++ file for example, I see "find definitions" and
> "find references" have dedicated bindings, but "declaration" and
> "typeDefinition" do NOT. And "implementation" isn't even there as it
> doesn't make much sense in C++.

Ultimately, we could also show-hide definitions depending on which kinds 
the current backend(s) expose. I.e. a set of commands might be 
dynamically generated via dispatch (like project-switch-project does), 
or they indeed can be traditional commands. The latter has advantages: 
the users can examine and rebind them using the traditional methods.

Indeed, some commands will be "unsupported" in some languages. I don't 
see much issue with it: if the language mode (major or minor) has a 
better command to use instead, they can [remap ...] it. And they will 
have a common prefix to add their own additional commands too.

>>> I think this is a mistake and a regression from xref-find-extra.
>>> The command should be called xref-find-all, xref-find, or simply
>>> xref, since definition is a category that doesn't span a lot of
>>> useful cross-referenceable constructs in many languages. In C++,
>>> for one, a declaration is absolutely _not_ a definition.
>>
>> It's a "definition" in at least one Xref-related sense: it should be
>> dispatched through xref-show-definitions-function.
> 
> So it's a "definition" because the xref.el author called an
> implementation detail a "definition"?  What does the user possibly
> care about that?

Why don't you read up on the difference between 
xref-show-definitions-function and xref-show-xrefs-function. Those are 
not implementation details but something that affects user experience. 
And users can customize one or the other, which correspondingly affects 
dispatches which go through one or the other.

>> Further, I'm not sure that when a user looks up all definition-related
>> things for a symbol, they wouldn't want to see the "declaration". In
>> fact, if we classify 'defgeneric' as declarations and 'defmethod' as
>> implementations, I'm pretty sure I would want to see the former in the list.
> 
> Of course, if the world is painted in the three LSP primary colors,
> every other color will have to be truncated to that.  But it doesn't
> mean the world gets any prettier.

Would it be better if the user has to type 'dec' in C mode but 'defg' in 
emacs-lisp-mode to get to a semantically similar set of results?

>> And you yourself mentioned that "type definitions" might be suitable for
>> that list (which I found surprising at first). So it seems clear that
>> there is no single red line.
> 
> Precisely.  So don't go making those lines.
> 
>> o show me "references" as one of the kinds of thing to search for.
>>
>> Then the list of results would drown in "references", wouldn't it?
> 
> But if I want to see references to the given symbol at point, that's what
> I want!  I press M-? xref-find-references all the time in Eglot.

And that's great -- please continue to press M-? for that purpose.

But if 'references' joins the "definition kinds", then the command to 
"find all definition kinds" will become pointless. And we already have 
command to "find all references".

>> For experimentation.
> 
> Then perhaps we could cut another less contentious branch off
> 279203199a2d10677e42747476b39394a4184a78
> 
> Over that branch we can rename Eglot kinds to strings and "extra"
> to "all".  I'm sure that's less contentious, a good candidate
> for master and not incompatible with evolving into whatever
> results of your experimentation.

See above.

>>> If you are proposing this is brought to master for experimentation,
>>> and if you are wary of this step, then may I suggest we push the older
>>> more conservative version, perhaps with some naming changes?
>>
>> I'm not yet seeing a common basic version for which there would be
>> agreement. You just called a renaming a mistake and disagreed with the
>> principle of what "definition kinds" should be.
>>
>>> This new version isn't something we can roll back easily, while the
>>> more conservative approach could eventually be enhanced with the three
>>> "popular kinds" later on.
>>
>> I'm not proposing any merge to master yet.
> 
> Well I am, but not of that code, at least not yet of that code.
> Merge to master something useful that doesn't compromise us.

We're yet finding that.

>>>> What does everyone think?
>>>
>>>> xref-find-all-definitions is an interactive native-compiled Lisp
>>>> function in `xref.el'.
>>>
>>>> at point, prompt for the identifier.  Interactively, show matches
>>>> for all supported kinds.  When invoked with prefix argument,
>>>> prompt for KIND.
>>>
>>> I can't get this to work btw.   If I add a prefx argument, it
>>> prompts me for the identifier, which I don't want.
>>
>> What's what the docstring says, and it's what Felician brought up as a
>> problem. Do you want two separate commands? And one of them would always
>> prompt for the kind to use?
> 
> No, it's not.  It starts prompting me for identifiers which for LSP
> is useless.  Eglot has no way to know which kinds of reference it has
> for arbitrary identifiers not at point.

I said that it matches the docstring, not that it's ideal for Eglot.

> The only useful way for this to work in Eglot would be to prompt
> for KIND and _then_ show the results, which may be empty.
> 
> Anything else doesn't make sense for Eglot, for LSP-specific
> reasons beyond my control which I've already explained.

What about showing the combined set?



  reply	other threads:[~2023-11-27 16:04 UTC|newest]

Thread overview: 204+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-24 19:56 Adding support for xref jumping to headers/interfaces Spencer Baugh
2023-02-24 20:04 ` Eli Zaretskii
2023-02-24 21:29   ` Dmitry Gutov
2023-02-27 23:12     ` Stephen Leake
2023-02-27 23:34       ` Dmitry Gutov
2023-02-28  0:18         ` Yuan Fu
2023-02-28 16:05           ` Filipp Gunbin
2023-03-01  4:33             ` Richard Stallman
2023-03-01 12:50               ` Eli Zaretskii
2023-03-01 17:51                 ` John Yates
2023-03-04 18:54                   ` Stephen Leake
2023-03-04 22:24                     ` Dmitry Gutov
2023-03-05  6:11                       ` Eli Zaretskii
2023-03-05 12:06                         ` Dmitry Gutov
2023-03-07 22:41                           ` Dmitry Gutov
2023-03-08 14:58                             ` Eli Zaretskii
2023-03-08 18:23                               ` Dmitry Gutov
2023-03-08 19:49                                 ` Eli Zaretskii
2023-03-08 20:15                                   ` Dmitry Gutov
2023-03-09  6:13                                     ` Eli Zaretskii
2023-03-09 13:04                                       ` Dmitry Gutov
2023-03-09 15:36                                         ` Eli Zaretskii
2023-03-09 16:53                                           ` Dmitry Gutov
2023-03-09 17:31                                             ` Eli Zaretskii
2023-03-09 17:37                                               ` Dmitry Gutov
2023-05-16 21:10                                                 ` Spencer Baugh
2023-05-17 11:46                                                   ` Eli Zaretskii
2023-06-17  1:53                                                   ` Dmitry Gutov
2023-06-20 15:31                                                     ` João Távora
2023-06-22 19:22                                                       ` Spencer Baugh
2023-06-23  5:52                                                         ` Eli Zaretskii
2023-06-23 14:37                                                           ` Spencer Baugh
2023-06-23 14:53                                                             ` Eli Zaretskii
2023-06-23 15:03                                                         ` João Távora
2023-06-28 13:31                                                           ` Spencer Baugh
2023-11-04 22:43                                                           ` Dmitry Gutov
2023-11-04 22:00                                                       ` Dmitry Gutov
2023-11-04 22:24                                                         ` João Távora
2023-11-04 22:29                                                           ` Dmitry Gutov
2023-11-04 22:36                                                             ` João Távora
2023-11-04 23:20                                                               ` Dmitry Gutov
2023-11-04 23:16                                                   ` Dmitry Gutov
2023-11-04 23:21                                                     ` Dmitry Gutov
2023-11-04 23:24                                                     ` João Távora
2023-11-04 23:27                                                       ` Dmitry Gutov
     [not found]                                                         ` <CALDnm51sWvw4wiipYkJRB8za_8zpWg2-0jpoJDy_5urEa5okzQ@mail.gmail.com>
     [not found]                                                           ` <2752892c-4d27-1249-ca0a-6c24abbf1078@yandex.ru>
     [not found]                                                             ` <CALDnm51P5kfWNofybvxbzVZNnF9DwV5f2ZDGx9ziToBF7cJR6w@mail.gmail.com>
     [not found]                                                               ` <e043f63b-e997-805b-7f9a-64dcc0a9062e@yandex.ru>
     [not found]                                                                 ` <87zfzrybl1.fsf@gmail.com>
     [not found]                                                                   ` <57e53aae-bef9-d267-f7da-d4936fc37153@yandex.ru>
2023-11-07  9:36                                                                     ` João Távora
2023-11-07 22:56                                                                       ` Dmitry Gutov
2023-11-08  0:14                                                                         ` João Távora
2023-11-05  8:16                                                     ` Eshel Yaron
2023-11-07  2:12                                                       ` Dmitry Gutov
2023-11-07 17:09                                                         ` Spencer Baugh
2023-11-07 23:02                                                           ` Dmitry Gutov
2023-11-07 21:30                                                         ` Eshel Yaron
2023-11-07 23:17                                                           ` Dmitry Gutov
2023-11-08  0:21                                                             ` João Távora
2023-11-08  0:33                                                               ` Dmitry Gutov
2023-11-08  1:19                                                                 ` João Távora
2023-11-08 22:58                                                                   ` Dmitry Gutov
2023-11-08 23:22                                                                     ` João Távora
2023-11-08 23:34                                                                       ` Dmitry Gutov
2023-11-09  0:50                                                                         ` João Távora
2023-11-09 16:59                                                                           ` Spencer Baugh
2023-11-09 20:44                                                                             ` João Távora
2023-11-09 21:11                                                                               ` Spencer Baugh
2023-11-10 10:06                                                                                 ` João Távora
2023-11-10 12:02                                                                                   ` Spencer Baugh
2023-11-10 13:59                                                                                     ` João Távora
2023-11-10 17:36                                                                                       ` Spencer Baugh
2023-11-11 10:45                                                                                         ` Dmitry Gutov
2023-11-11 11:17                                                                                         ` João Távora
2023-11-11 12:38                                                                                           ` Spencer Baugh
2023-11-11 20:49                                                                                             ` Dmitry Gutov
2023-11-15 21:32                                                                                               ` Spencer Baugh
2023-11-24  1:37                                                                                                 ` Dmitry Gutov
2023-11-24 21:43                                                                                                   ` Felician Nemeth
2023-11-25  2:20                                                                                                     ` Dmitry Gutov
2023-11-26 16:08                                                                                                       ` Felician Nemeth
2023-11-26 20:15                                                                                                         ` Dmitry Gutov
2023-11-26 20:37                                                                                                           ` João Távora
2023-11-27 14:35                                                                                                             ` Dmitry Gutov
2023-11-27 15:03                                                                                                               ` João Távora
2023-11-27 15:45                                                                                                                 ` Dmitry Gutov
2023-11-27 16:04                                                                                                                   ` João Távora
2023-11-27 16:23                                                                                                                     ` Dmitry Gutov
2023-11-27 16:41                                                                                                                       ` João Távora
2023-11-27 17:05                                                                                                                         ` Dmitry Gutov
2023-11-27 17:09                                                                                                                           ` João Távora
2023-11-26 20:40                                                                                                         ` João Távora
2023-11-27 14:43                                                                                                           ` Dmitry Gutov
2023-11-27 14:49                                                                                                             ` João Távora
2023-11-27 15:01                                                                                                               ` Dmitry Gutov
2023-11-27 15:19                                                                                                                 ` João Távora
2023-11-28  0:18                                                                                                                   ` Dmitry Gutov
2023-11-28  9:51                                                                                                                     ` João Távora
2023-11-28 12:45                                                                                                                       ` Dmitry Gutov
2023-11-28 15:02                                                                                                                         ` João Távora
2023-11-28 16:32                                                                                                                           ` Dmitry Gutov
2023-11-28 17:16                                                                                                                             ` João Távora
2023-11-28 17:25                                                                                                                               ` Dmitry Gutov
2023-11-28 18:38                                                                                                                                 ` João Távora
2023-11-27 15:28                                                                                                                 ` Eli Zaretskii
2023-11-27 16:37                                                                                                                   ` Dmitry Gutov
2023-11-27 16:45                                                                                                                     ` João Távora
2023-11-27 17:40                                                                                                                     ` Eli Zaretskii
2023-11-27 18:26                                                                                                                       ` Dmitry Gutov
2023-11-27 20:50                                                                                                                         ` Eli Zaretskii
2023-11-27 20:53                                                                                                                           ` Dmitry Gutov
2023-11-26 20:30                                                                                                   ` João Távora
2023-11-27 15:17                                                                                                     ` Dmitry Gutov
2023-11-27 15:45                                                                                                       ` João Távora
2023-11-27 16:04                                                                                                         ` Dmitry Gutov [this message]
2023-11-27 16:27                                                                                                           ` João Távora
2023-11-27 17:22                                                                                                             ` Dmitry Gutov
2023-11-27 17:46                                                                                                               ` João Távora
2023-11-27 18:12                                                                                                                 ` Dmitry Gutov
2023-11-27 23:25                                                                                                                   ` João Távora
2023-11-28  0:30                                                                                                                     ` Dmitry Gutov
2023-11-28  0:43                                                                                                                       ` João Távora
2023-11-11  1:01                                                                                     ` Dmitry Gutov
2023-11-11  1:04                                                                                   ` Dmitry Gutov
2023-11-11 11:30                                                                                     ` João Távora
2023-11-11 21:01                                                                                       ` Dmitry Gutov
2023-11-12 18:40                                                                                         ` João Távora
2023-11-13  0:27                                                                                           ` Dmitry Gutov
2023-11-13  1:03                                                                                             ` João Távora
2023-11-13  1:05                                                                                               ` Dmitry Gutov
2023-11-13  1:16                                                                                                 ` João Távora
2023-11-13  1:41                                                                                                   ` electric-pair-mode vs paredit, was: " Dmitry Gutov
2023-11-13  1:53                                                                                                     ` João Távora
2023-11-11  0:58                                                                               ` Dmitry Gutov
2023-11-11 11:44                                                                                 ` João Távora
2023-11-11 21:37                                                                                   ` Dmitry Gutov
2023-11-12 18:59                                                                                     ` João Távora
2023-11-13  1:37                                                                                       ` Dmitry Gutov
2023-11-11  1:08                                                                               ` Dmitry Gutov
2023-11-11 11:22                                                                                 ` João Távora
2023-11-11 20:54                                                                                   ` Dmitry Gutov
2023-11-08 16:11                                                               ` Spencer Baugh
2023-11-08 17:20                                                                 ` João Távora
2023-11-08 17:40                                                                   ` Spencer Baugh
2023-11-08 23:08                                                                     ` João Távora
2023-11-09 16:52                                                                       ` CCing thread participants through gnus+gmane Spencer Baugh
2023-11-10 15:51                                                                         ` Eric Abrahamsen
2023-11-10 16:18                                                                         ` Visuwesh
2023-11-09 17:07                                                                       ` Adding support for xref jumping to headers/interfaces Spencer Baugh
2023-11-11  0:07                                                                         ` Dmitry Gutov
2023-11-11 12:39                                                                           ` Spencer Baugh
2023-11-11 20:45                                                                             ` Dmitry Gutov
2023-11-08 23:06                                                                 ` Dmitry Gutov
2023-11-07 16:51                                                     ` Spencer Baugh
2023-11-07 23:30                                                       ` Dmitry Gutov
2023-11-08 17:25                                                         ` Spencer Baugh
2023-11-09  0:08                                                           ` Dmitry Gutov
2023-11-09  0:26                                                             ` Dmitry Gutov
2023-11-09  1:06                                                               ` João Távora
2023-11-11  0:16                                                                 ` Dmitry Gutov
2023-11-09 17:57                                                             ` Spencer Baugh
2023-11-11  0:42                                                               ` Dmitry Gutov
2023-11-11 13:00                                                                 ` Spencer Baugh
2023-11-12  1:50                                                                   ` Dmitry Gutov
2023-11-12  2:08                                                                     ` João Távora
2023-11-12  2:09                                                                       ` Dmitry Gutov
2023-11-12  2:25                                                                         ` João Távora
2023-11-13  1:02                                                                           ` Dmitry Gutov
2023-11-13  1:24                                                                             ` João Távora
2023-03-01 15:00               ` [External] : " Drew Adams
2023-02-28 21:40           ` John Yates
2023-02-28 21:53             ` Dmitry Gutov
2023-02-28 22:44               ` Konstantin Kharlamov
2023-03-05  9:59 ` Helmut Eller
2023-03-05 12:03   ` Dmitry Gutov
2023-03-05 15:57     ` Helmut Eller
2023-03-05 16:33       ` Dmitry Gutov
2023-03-05 17:19         ` Stephen Leake
2023-03-05 20:10   ` João Távora
2023-03-05 20:32     ` João Távora
2023-03-05 20:40       ` Dmitry Gutov
2023-03-05 21:04         ` João Távora
2023-03-05 21:21           ` Dmitry Gutov
2023-03-05 21:48             ` João Távora
2023-03-05 22:08               ` Dmitry Gutov
2023-03-05 23:00                 ` João Távora
2023-03-05 23:40                 ` John Yates
2023-03-06 12:22                   ` Felician Nemeth
2023-03-06 13:15                     ` João Távora
2023-03-06 13:23                       ` Dmitry Gutov
2023-03-06 13:38                         ` João Távora
2023-03-06 13:46                           ` Dmitry Gutov
2023-03-06 13:52                             ` João Távora
2023-03-06 13:50                           ` Dmitry Gutov
2023-03-07  7:15                             ` Yuan Fu
2023-03-07 19:58                               ` Felician Nemeth
2023-03-07 20:44                                 ` Yuan Fu
2023-03-07 21:03                                 ` Dmitry Gutov
2023-03-06 14:09                   ` Dmitry Gutov
2023-03-06 14:15                     ` John Yates
2023-03-06 14:23                       ` Dmitry Gutov
2023-03-06 14:43                         ` John Yates
2023-03-10  0:57                     ` Ergus
2023-03-10 21:55                       ` Dmitry Gutov
2023-03-10 22:18                         ` João Távora
2023-03-10 22:25                           ` Dmitry Gutov
2023-03-11 11:50                             ` João Távora
2023-03-10 23:45                         ` Ergus

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=869c25b8-4c99-fb35-cd8c-b1a8a6256e04@gutov.dev \
    --to=dmitry@gutov.dev \
    --cc=emacs-devel@gnu.org \
    --cc=felician.nemeth@gmail.com \
    --cc=fgunbin@fastmail.fm \
    --cc=joaotavora@gmail.com \
    --cc=john@yates-sheets.org \
    --cc=me@eshelyaron.com \
    --cc=sbaugh@janestreet.com \
    --cc=spacibba@aol.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).