From f7d7072903b418c1bd784324b18a032a6e8e839c Mon Sep 17 00:00:00 2001 From: Quang Trung Ta Date: Mon, 4 Aug 2025 19:24:27 +0800 Subject: [PATCH 1/2] lsp-ui-sideline: display all code actions of the current diagnostics --- lsp-ui-sideline.el | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/lsp-ui-sideline.el b/lsp-ui-sideline.el index da35e959..7da9d81e 100644 --- a/lsp-ui-sideline.el +++ b/lsp-ui-sideline.el @@ -619,13 +619,26 @@ from the language server." (lsp--registered-capability "textDocument/codeAction"))) (lsp-request-async "textDocument/codeAction" - (-let (((start . end) (if (eq lsp-ui-sideline-update-mode 'line) - (cons 0 (- eol bol)) - (--> (- (point) bol) (cons it it))))) + (-let* ((diags (lsp-ui-sideline--line-diags (1- line-widen))) + ((start . end) (cond ((eq lsp-ui-sideline-update-mode 'line) + (cons 0 (- eol bol))) + (diags + (let* ((start (- (point) bol)) + (end start)) + (seq-doseq (diag diags) + (when-let* ((diag-range (gethash "range" diag)) + (diag-start (gethash "start" diag-range)) + (c1 (gethash "character" diag-start)) + (diag-end (gethash "end" diag-range)) + (c2 (gethash "character" diag-end))) + (setq start (min c1 start)) + (setq end (max c2 end)))) + (cons start end))) + (t (--> (- (point) bol) (cons it it)))))) (list :textDocument doc-id :range (list :start (list :line (1- line-widen) :character start) :end (list :line (1- line-widen) :character end)) - :context (list :diagnostics (lsp-ui-sideline--line-diags (1- line-widen))))) + :context (list :diagnostics diags))) (lambda (actions) (when (eq (current-buffer) buffer) (lsp-ui-sideline--code-actions actions bol eol))) From 88a3484f557edfa00d91e0dc6bec2f7c4b869ed2 Mon Sep 17 00:00:00 2001 From: Quang Trung Ta Date: Mon, 4 Aug 2025 23:08:12 +0800 Subject: [PATCH 2/2] use LSP APIs to get diagnostics locations to account for LSP_USE_PLISTS --- lsp-ui-sideline.el | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lsp-ui-sideline.el b/lsp-ui-sideline.el index 7da9d81e..f3cc601c 100644 --- a/lsp-ui-sideline.el +++ b/lsp-ui-sideline.el @@ -619,26 +619,26 @@ from the language server." (lsp--registered-capability "textDocument/codeAction"))) (lsp-request-async "textDocument/codeAction" - (-let* ((diags (lsp-ui-sideline--line-diags (1- line-widen))) + (-let* ((diagnostics (lsp-ui-sideline--line-diags (1- line-widen))) ((start . end) (cond ((eq lsp-ui-sideline-update-mode 'line) (cons 0 (- eol bol))) - (diags + (diagnostics (let* ((start (- (point) bol)) (end start)) - (seq-doseq (diag diags) - (when-let* ((diag-range (gethash "range" diag)) - (diag-start (gethash "start" diag-range)) - (c1 (gethash "character" diag-start)) - (diag-end (gethash "end" diag-range)) - (c2 (gethash "character" diag-end))) - (setq start (min c1 start)) - (setq end (max c2 end)))) + (mapc + (-lambda + ((&Diagnostic + :range (&Range :start (&Position :character c1) + :end (&Position :character c2)))) + (setq start (min c1 start)) + (setq end (max c2 end))) + diagnostics) (cons start end))) (t (--> (- (point) bol) (cons it it)))))) (list :textDocument doc-id :range (list :start (list :line (1- line-widen) :character start) :end (list :line (1- line-widen) :character end)) - :context (list :diagnostics diags))) + :context (list :diagnostics diagnostics))) (lambda (actions) (when (eq (current-buffer) buffer) (lsp-ui-sideline--code-actions actions bol eol)))