summaryrefslogtreecommitdiff
path: root/ide-code-action.c
diff options
context:
space:
mode:
Diffstat (limited to 'ide-code-action.c')
-rw-r--r--ide-code-action.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/ide-code-action.c b/ide-code-action.c
index 3f67121..6171d68 100644
--- a/ide-code-action.c
+++ b/ide-code-action.c
@@ -8,6 +8,10 @@ typedef struct {
struct CodeAction {
LSPServerRequestID last_request;
+ // which buffer code action is open for
+ LSPDocumentID which_buffer;
+ // cursor position when code action was opened
+ BufferPos cursor_pos;
LSPResponse response;
Action *actions;
};
@@ -38,6 +42,8 @@ void code_action_open(Ted *ted) {
LSP *lsp = buffer_lsp(buffer);
if (!lsp) return;
autocomplete_close(ted);
+ c->which_buffer = buffer_lsp_document_id(buffer);
+ c->cursor_pos = buffer_cursor_pos(buffer);
BufferPos range_start = {0}, range_end = {0};
LSPRange range = {0};
if (buffer_selection_pos(buffer, &range_start)) {
@@ -155,6 +161,22 @@ void code_action_frame(Ted *ted) {
code_action_close(ted);
return;
}
+ LSP *lsp = buffer_lsp(buffer);
+ if (!lsp || lsp_get_id(lsp) != c->last_request.lsp) {
+ // LSP or active buffer changed
+ code_action_close(ted);
+ return;
+ }
+ if (buffer_lsp_document_id(buffer) != c->which_buffer) {
+ // buffer changed
+ code_action_close(ted);
+ return;
+ }
+ if (!buffer_pos_eq(buffer_cursor_pos(buffer), c->cursor_pos)) {
+ // cursor moved
+ code_action_close(ted);
+ return;
+ }
const Settings *settings = ted_active_settings(ted);
vec2 cursor_pos = buffer_pos_to_pixels(buffer, buffer_cursor_pos(buffer));
float x = cursor_pos.x, y = cursor_pos.y;