First off, both the native
:help gd and the native
:help gD are "go to declaration", not "go to definition". The difference may or may not be meaningful to you but that is a first level of removal from the original commands.
Then you have the fact that both commands are constrained to the current buffer:
gd is local to the current "block" (whatever that means) and
gD covers the whole buffer. Jumping to another file is a second level of removal.
Then you have a third level of removal: opening the filename or URL under the cursor has nothing to do with the original "go to declaration" and is covered "natively" by separate commands:
:help gf for files and
:help gx for URLs.
The last level of removal is reached by lumping together unrelated functionalities into a single command, which goes against Vim's whole design.
Now, users and plugin developers are 100% free to override whatever command they want and deviate however they want from the core model but, IMO, that is going a little bit too far.
Anecdotally, I interacted a few times with CoC users who were super confused about
gd. Some copied the example config from the
README.md without even reading it and wondered why
gd suddenly changed. Some only knew about CoC's
gd and had no idea a built-in
gd existed, which led to very frustrating discussions where the two parties talked about different things. Etc. There is a cost to that, that plugin authors often brush off because they are not the ones providing support for their own plugins.