From: Dmitry Gutov <dmitry@gutov.dev>
To: "João Távora" <joaotavora@gmail.com>
Cc: Spencer Baugh <sbaugh@janestreet.com>, emacs-devel@gnu.org
Subject: Re: Adding support for xref jumping to headers/interfaces
Date: Mon, 13 Nov 2023 03:37:35 +0200 [thread overview]
Message-ID: <98f83b3f-268d-c463-0505-d14fe0d5e868@gutov.dev> (raw)
In-Reply-To: <CALDnm514D1X62tEcfEwyuQ+_=CWmpOG7Vz9cfykBttFyfEt4SA@mail.gmail.com>
On 12/11/2023 20:59, João Távora wrote:
>> Dropping an implementation into master is one way to test out a
>> hypothesis, but it has inherent problems: the feedback comes late
>> anyway, and quite often we'd end up having to maintain half-bakes
>> features or unfortunate capabilities this way simply because they had
>> been added and time had passed.
>
> Maybe. Well Eglot has a fair enough audience, though not sure for
> this specific feature. And I don't see any better alternatives if
> collecting feedback is what we want. IOW, we shouldn't fall prey
> to "analysis-paralysis".
Hopefully not analysis paralysis. What we can do first, though, is
iterate through a bunch of prototypes.
I was hoping to reach some sort of consensus before pushing the next
one, but it's not really necessary for experimenting. So I'll just push
the one I've been thinking of lately and see what everyone thinks.
>> Why contort? From where I'm standing,
>> declarations/implementations/typeDefinitions apply to almost any
>> object-oriented language (C++/Java/Ruby/Python/JS), and even some
>> functional ones.
>
> What are "declarations" in JS, Java or Ruby and Python?
It's a pretty common term.
In Java, I'd be surprised if some interpreted it as something other than
method definitions inside of an interface. And indeed:
https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2702
In JS, Mozilla's codebase actually had interface definitions, so a
specialized backend could point to those. Some frontend frameworks had a
thing similar to that.
No idea about Python's practices, but for Ruby there also are classes
and mixins that have "abstract" methods. There are no syntactic
annotations for that in the base language (you just throw a certain
exception in the implementation), but the type-definition projects like
Sorbet will likely change that.
The other two (implementations and typeDefinitions) make sense for the
all of the above languages. Although "implementations" are of course
only meningful to have when "declarations" exist.
> Perhaps
> nothing perhaps entirely different things. Also, there are a lot of
> sub-kinds of declaration in C++. Is a forward declaration of a
> type in C++ also a "declaration" here?
If the type is the entered identifier, why not?
I would first ask, are those definitions? Are they in the list returned
by xref-find-definitions for the same input? If not, they might be
useful to have in xref-find-declarations.
> What about a C++20 concept,
> is it a type definition? No right?
I have no idea, but if it maps to the concept, and the users will find
the binding in the common map using "M-' C-h", why not?
The only big downside is when xref-find-type-definitions already returns
some different things, conceptually incompatible with the potential
addition.
Or to look at it from another side, if xref-find-type-definitions is on
"M-' t" in java-mode, would c++-mode prefer to have some other command
on that bindings? If yes, would we want it to be arbitrarily incompatible?
> Or maybe, depends on who you ask
> some say it's a type for types. Not to mention I think in Elisp we
> have at least 3 completely different kinds of "declaration": forward
> declarations, (declare ...) forms and defgeneric. It's odd to mix
> them.
They can be returned together in xref-find-declarations (I would
actually use that), and Elisp could have separate commands for more
fine-grained navigation. Though the latter doesn't seem too much in
demand, given they haven't materialized thus far.
> Anyway, this is LSP's taxonomy so it's LSP's problem (or rather,
> the problem of the poor servers that have to invent ways to shove
> things in these categories. But not our problem by and large if we
> don't let it spread any further than Eglot. IMO Eglot is where
> LSP ends and Emacs starts.
The practice of shoving things into categories didn't appear from
nowhere. Having common bindings and menu entries and easy transition
between language modes is nice.
>> What's the alternative? To have many similar commands
>>
>> ruby-find-implementation
>> c++-find-implementations
>> python-find-implementations
>> js-find-implementations
>
> Depends. If you are using Eglot/LSP as a backend, you don't need to.
> Eglot already gives you the LSP trio.
ruby-mode doesn't choose an Xref backend. It just uses the configured
one. Same for other modes in the above list.
> If you are using a non Eglot backend, then yes. If you are using
> specific backend based on Eglot but with more servers, then yes too,
> but only for the extra types you support.
And for the rest? Unoccupied bindings? "undefined is not a function"?
There be dragons?
Suppose a language doesn't support "declarations" in particular? Will it
find a much better use for the corresponding binding in the prefix map?
>> that all do the same thing inside: call the Xref backend's "find
>> implementations" mechanism? It will be especially great to use if some
>> major mode authors bind that command to one key, and others to another.
>
> I don't think it'll happen that often, and xref can define a good prefix
> map to use. It's unlikely we or major modes would find keybinding space
> outside such a map anyway.
I'm saying it would be bad if java-mode binds
java-find-interface-declarations to "M-' i" and c++-mode binds
c++-find-forward-declarations to "M-' f", while they are more similar
than different and could be both put on "M-' d".
>>> And Spencer even wanted to put cl-defgeneric in that bag, which I
>>> can fully understand, as cl-defgeneric can also be viewed as a
>>> declaration. But its a completely different concept from those
>>> two.
>>
>> If Elisp doesn't have any other kind of declarations, what is the worry?
>> Let's put the ones it has.
>
> But it does, at least for some understandings of "declaration". And it
> could get even more. A declaration is of course a reference to a thing
> that characterizes a part, but not the main part or totality of the thing.
> Besides the other two I mentioned already, any source code locus
> setting a property on a symbol could be viewed as that. Are we prepared
> to handle this? We could be. If we are, do we really want to put this all
> in a one-size-fits-all "declarations" bag?
We are able to offer both the common "declarations" bag and separate
lookup commands for finer searches. I would likely use the former.
next prev parent reply other threads:[~2023-11-13 1:37 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
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 [this message]
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=98f83b3f-268d-c463-0505-d14fe0d5e868@gutov.dev \
--to=dmitry@gutov.dev \
--cc=emacs-devel@gnu.org \
--cc=joaotavora@gmail.com \
--cc=sbaugh@janestreet.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).