Use textDocument/codeLens data in the actions menu when applicable #2 (#26848)

Re-applies what's been reverted in
https://github.com/zed-industries/zed/pull/26832 with an action-related
fix in
64b5d37d32

Before, actions were resolved only if `data` is present and either of
the possible fields is empty:

e842b4eade/crates/project/src/lsp_store.rs (L1632-L1633)

But Zed resolves completions and inlays once, unconditionally, and the
reverted PR applied the same strategy to actions.
That did not work despite the spec not forbidding `data`-less actions to
be resolved.

Soon, it starts to work due to
https://github.com/rust-lang/rust-analyzer/pull/19369 but it seems safer
to restore the original filtering code.

Code lens have no issues with `data`-less resolves:

220d913cbc/crates/rust-analyzer/src/handlers/request.rs (L1618-L1620)

so the same approach as completions and inlays is kept: resolve once.


Release Notes:

- N/A
This commit is contained in:
Kirill Bulatov 2025-03-15 22:09:32 +02:00 committed by GitHub
parent ef91e7afae
commit 8a31dcaeb0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 618 additions and 17 deletions

View file

@ -346,7 +346,12 @@ message Envelope {
GitDiff git_diff = 319;
GitDiffResponse git_diff_response = 320;
GitInit git_init = 321; // current max
GitInit git_init = 321;
CodeLens code_lens = 322;
GetCodeLens get_code_lens = 323;
GetCodeLensResponse get_code_lens_response = 324;
RefreshCodeLens refresh_code_lens = 325; // current max
}
reserved 87 to 88;
@ -1263,6 +1268,25 @@ message RefreshInlayHints {
uint64 project_id = 1;
}
message CodeLens {
bytes lsp_lens = 1;
}
message GetCodeLens {
uint64 project_id = 1;
uint64 buffer_id = 2;
repeated VectorClockEntry version = 3;
}
message GetCodeLensResponse {
repeated CodeAction lens_actions = 1;
repeated VectorClockEntry version = 2;
}
message RefreshCodeLens {
uint64 project_id = 1;
}
message MarkupContent {
bool is_markdown = 1;
string value = 2;
@ -1298,9 +1322,11 @@ message CodeAction {
Anchor end = 3;
bytes lsp_action = 4;
Kind kind = 5;
bool resolved = 6;
enum Kind {
Action = 0;
Command = 1;
CodeLens = 2;
}
}
@ -2346,6 +2372,7 @@ message MultiLspQuery {
GetHover get_hover = 5;
GetCodeActions get_code_actions = 6;
GetSignatureHelp get_signature_help = 7;
GetCodeLens get_code_lens = 8;
}
}
@ -2365,6 +2392,7 @@ message LspResponse {
GetHoverResponse get_hover_response = 1;
GetCodeActionsResponse get_code_actions_response = 2;
GetSignatureHelpResponse get_signature_help_response = 3;
GetCodeLensResponse get_code_lens_response = 4;
}
}

View file

@ -340,6 +340,9 @@ messages!(
(ResolveCompletionDocumentationResponse, Background),
(ResolveInlayHint, Background),
(ResolveInlayHintResponse, Background),
(RefreshCodeLens, Background),
(GetCodeLens, Background),
(GetCodeLensResponse, Background),
(RespondToChannelInvite, Foreground),
(RespondToContactRequest, Foreground),
(RoomUpdated, Foreground),
@ -513,6 +516,7 @@ request_messages!(
(GetUsers, UsersResponse),
(IncomingCall, Ack),
(InlayHints, InlayHintsResponse),
(GetCodeLens, GetCodeLensResponse),
(InviteChannelMember, Ack),
(JoinChannel, JoinRoomResponse),
(JoinChannelBuffer, JoinChannelBufferResponse),
@ -534,6 +538,7 @@ request_messages!(
(PrepareRename, PrepareRenameResponse),
(CountLanguageModelTokens, CountLanguageModelTokensResponse),
(RefreshInlayHints, Ack),
(RefreshCodeLens, Ack),
(RejoinChannelBuffers, RejoinChannelBuffersResponse),
(RejoinRoom, RejoinRoomResponse),
(ReloadBuffers, ReloadBuffersResponse),
@ -632,6 +637,7 @@ entity_messages!(
ApplyCodeActionKind,
FormatBuffers,
GetCodeActions,
GetCodeLens,
GetCompletions,
GetDefinition,
GetDeclaration,
@ -659,6 +665,7 @@ entity_messages!(
PerformRename,
PrepareRename,
RefreshInlayHints,
RefreshCodeLens,
ReloadBuffers,
RemoveProjectCollaborator,
RenameProjectEntry,