From 565f9e026b82441c82da0b5e664aea696ebe694c Mon Sep 17 00:00:00 2001 From: Eugene Apollonsky Date: Fri, 6 Dec 2019 15:05:48 +0200 Subject: [PATCH 1/2] Split long lines in diagnostics --- lsp-ui-sideline.el | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lsp-ui-sideline.el b/lsp-ui-sideline.el index 5e026290..eae8483d 100644 --- a/lsp-ui-sideline.el +++ b/lsp-ui-sideline.el @@ -93,6 +93,11 @@ when user changes current point." :type 'integer :group 'lsp-ui-sideline) +(defcustom lsp-ui-sideline-diagnostic-max-line-length 100 + "Maximum line length of diagnostics in sideline." + :type 'integer + :group 'lsp-ui-sideline) + (defcustom lsp-ui-sideline-actions-kind-regex "quickfix.*\\|refactor.*" "Regex for the code actions kinds to show in the sideline." :type 'string @@ -318,12 +323,25 @@ CURRENT is non-nil when the point is on the symbol." (when (overlay-get ov 'current) (lsp-ui-sideline--toggle-current ov nil)))))) +(defun lsp-ui-sideline--split-long-lines (lines) + "Fill LINES so that they are not longer than `lsp-ui-sideline-diagnostic-max-line-length' characters." + (mapcan (lambda (line) + (if (< (length line) lsp-ui-sideline-diagnostic-max-line-length) + (list line) + (with-temp-buffer + (let ((fill-column lsp-ui-sideline-diagnostic-max-line-length)) + (insert line) + (fill-region (point-min) (point-max)) + (split-string (buffer-string) "\n"))))) + lines)) + (defun lsp-ui-sideline--diagnostics (bol eol) "Show diagnostics on the current line." (when (bound-and-true-p flycheck-mode) (dolist (e (flycheck-overlay-errors-in bol (1+ eol))) (let* ((lines (--> (flycheck-error-format-message-and-id e) - (split-string it "\n"))) + (split-string it "\n") + (lsp-ui-sideline--split-long-lines it))) (display-lines (butlast lines (- (length lines) lsp-ui-sideline-diagnostic-max-lines))) (offset 0)) (dolist (line display-lines) From 0792b4c6e289c6f04b7ea32738d5664b9f0b356d Mon Sep 17 00:00:00 2001 From: Eugene Apollonsky Date: Fri, 6 Dec 2019 15:06:25 +0200 Subject: [PATCH 2/2] Fix blank lines in diagnostics multiline messages --- lsp-ui-sideline.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lsp-ui-sideline.el b/lsp-ui-sideline.el index eae8483d..5b38ac27 100644 --- a/lsp-ui-sideline.el +++ b/lsp-ui-sideline.el @@ -186,7 +186,7 @@ BOL & EOL are beginning and ending of the user point line. if UP is non-nil, it loops on the previous lines. if OFFSET is non-nil, it starts search OFFSET lines from user point line." (let ((win-width (lsp-ui-sideline--window-width)) - (index (if (null offset) 1 (1+ offset))) + (index (if (null offset) 1 offset)) pos) (while (and (null pos) (<= (abs index) 30)) (setq index (if up (1- index) (1+ index))) @@ -343,7 +343,7 @@ CURRENT is non-nil when the point is on the symbol." (split-string it "\n") (lsp-ui-sideline--split-long-lines it))) (display-lines (butlast lines (- (length lines) lsp-ui-sideline-diagnostic-max-lines))) - (offset 0)) + (offset 1)) (dolist (line display-lines) (let* ((message (string-trim (replace-regexp-in-string "[\t ]+" " " line))) (len (length message))