diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/progmodes/flymake.el | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/lisp/progmodes/flymake.el b/lisp/progmodes/flymake.el index 5d5f9bb75d8..fc5e3b80ef2 100644 --- a/lisp/progmodes/flymake.el +++ b/lisp/progmodes/flymake.el | |||
| @@ -228,6 +228,29 @@ TYPE is a key to `flymake-diagnostic-types-alist' and TEXT is a | |||
| 228 | description of the problem detected in this region." | 228 | description of the problem detected in this region." |
| 229 | (flymake--diag-make :buffer buffer :beg beg :end end :type type :text text)) | 229 | (flymake--diag-make :buffer buffer :beg beg :end end :type type :text text)) |
| 230 | 230 | ||
| 231 | ;;;###autoload | ||
| 232 | (defun flymake-diagnostics (&optional beg end) | ||
| 233 | "Get Flymake diagnostics in region comprised between BEG and END. | ||
| 234 | |||
| 235 | If neither BEG or END is supplied, use the whole buffer, | ||
| 236 | otherwise if BEG is non-nil and END is nil, consider only | ||
| 237 | diagnostics at BEG." | ||
| 238 | (mapcar (lambda (ov) (overlay-get ov 'flymake-diagnostic)) | ||
| 239 | (flymake--overlays :beg beg :end end))) | ||
| 240 | |||
| 241 | (defmacro flymake--diag-accessor (public internal thing) | ||
| 242 | "Make PUBLIC an alias for INTERNAL, add doc using THING." | ||
| 243 | `(defsubst ,public (diag) | ||
| 244 | ,(format "Get Flymake diagnostic DIAG's %s." (symbol-name thing)) | ||
| 245 | (,internal diag))) | ||
| 246 | |||
| 247 | (flymake--diag-accessor flymake-diagnostic-buffer flymake--diag-buffer buffer) | ||
| 248 | (flymake--diag-accessor flymake-diagnostic-text flymake--diag-text text) | ||
| 249 | (flymake--diag-accessor flymake-diagnostic-type flymake--diag-type type) | ||
| 250 | (flymake--diag-accessor flymake-diagnostic-beg flymake--diag-beg beg) | ||
| 251 | (flymake--diag-accessor flymake-diagnostic-end flymake--diag-end end) | ||
| 252 | (flymake--diag-accessor flymake-diagnostic-backend flymake--diag-backend backend) | ||
| 253 | |||
| 231 | (cl-defun flymake--overlays (&key beg end filter compare key) | 254 | (cl-defun flymake--overlays (&key beg end filter compare key) |
| 232 | "Get flymake-related overlays. | 255 | "Get flymake-related overlays. |
| 233 | If BEG is non-nil and END is nil, consider only `overlays-at' | 256 | If BEG is non-nil and END is nil, consider only `overlays-at' |
| @@ -238,7 +261,7 @@ verify FILTER, a function, and sort them by COMPARE (using KEY)." | |||
| 238 | (widen) | 261 | (widen) |
| 239 | (let ((ovs (cl-remove-if-not | 262 | (let ((ovs (cl-remove-if-not |
| 240 | (lambda (ov) | 263 | (lambda (ov) |
| 241 | (and (overlay-get ov 'flymake) | 264 | (and (overlay-get ov 'flymake-diagnostic) |
| 242 | (or (not filter) | 265 | (or (not filter) |
| 243 | (funcall filter ov)))) | 266 | (funcall filter ov)))) |
| 244 | (if (and beg (null end)) | 267 | (if (and beg (null end)) |
| @@ -498,18 +521,15 @@ associated `flymake-category' return DEFAULT." | |||
| 498 | (default-maybe 'help-echo | 521 | (default-maybe 'help-echo |
| 499 | (lambda (_window _ov pos) | 522 | (lambda (_window _ov pos) |
| 500 | (mapconcat | 523 | (mapconcat |
| 501 | (lambda (ov) | 524 | #'flymake--diag-text |
| 502 | (overlay-get ov 'flymake-text)) | 525 | (flymake-diagnostics pos) |
| 503 | (flymake--overlays :beg pos) | ||
| 504 | "\n"))) | 526 | "\n"))) |
| 505 | (default-maybe 'severity (warning-numeric-level :error)) | 527 | (default-maybe 'severity (warning-numeric-level :error)) |
| 506 | (default-maybe 'priority (+ 100 (overlay-get ov 'severity)))) | 528 | (default-maybe 'priority (+ 100 (overlay-get ov 'severity)))) |
| 507 | ;; Some properties can't be overridden. | 529 | ;; Some properties can't be overridden. |
| 508 | ;; | 530 | ;; |
| 509 | (overlay-put ov 'evaporate t) | 531 | (overlay-put ov 'evaporate t) |
| 510 | (overlay-put ov 'flymake t) | 532 | (overlay-put ov 'flymake-diagnostic diagnostic))) |
| 511 | (overlay-put ov 'flymake-text (flymake--diag-text diagnostic)) | ||
| 512 | (overlay-put ov 'flymake--diagnostic diagnostic))) | ||
| 513 | 533 | ||
| 514 | ;; Nothing in Flymake uses this at all any more, so this is just for | 534 | ;; Nothing in Flymake uses this at all any more, so this is just for |
| 515 | ;; third-party compatibility. | 535 | ;; third-party compatibility. |
| @@ -600,7 +620,7 @@ not expected." | |||
| 600 | (lambda (ov) | 620 | (lambda (ov) |
| 601 | (eq backend | 621 | (eq backend |
| 602 | (flymake--diag-backend | 622 | (flymake--diag-backend |
| 603 | (overlay-get ov 'flymake--diagnostic)))))) | 623 | (overlay-get ov 'flymake-diagnostic)))))) |
| 604 | (mapc (lambda (diag) | 624 | (mapc (lambda (diag) |
| 605 | (flymake--highlight-line diag) | 625 | (flymake--highlight-line diag) |
| 606 | (setf (flymake--diag-backend diag) backend)) | 626 | (setf (flymake--diag-backend diag) backend)) |
| @@ -899,7 +919,7 @@ applied." | |||
| 899 | (lambda (ov) | 919 | (lambda (ov) |
| 900 | (let ((diag (overlay-get | 920 | (let ((diag (overlay-get |
| 901 | ov | 921 | ov |
| 902 | 'flymake--diagnostic))) | 922 | 'flymake-diagnostic))) |
| 903 | (and diag | 923 | (and diag |
| 904 | (or (not filter) | 924 | (or (not filter) |
| 905 | (memq (flymake--diag-type diag) | 925 | (memq (flymake--diag-type diag) |
| @@ -1089,13 +1109,13 @@ applied." | |||
| 1089 | (interactive (list (point) t)) | 1109 | (interactive (list (point) t)) |
| 1090 | (let* ((id (or (tabulated-list-get-id pos) | 1110 | (let* ((id (or (tabulated-list-get-id pos) |
| 1091 | (user-error "Nothing at point"))) | 1111 | (user-error "Nothing at point"))) |
| 1092 | (overlay (plist-get id :overlay))) | 1112 | (diag (plist-get id :diagnostic))) |
| 1093 | (with-current-buffer (overlay-buffer overlay) | 1113 | (with-current-buffer (flymake--diag-buffer diag) |
| 1094 | (with-selected-window | 1114 | (with-selected-window |
| 1095 | (display-buffer (current-buffer) other-window) | 1115 | (display-buffer (current-buffer) other-window) |
| 1096 | (goto-char (overlay-start overlay)) | 1116 | (goto-char (flymake--diag-beg diag)) |
| 1097 | (pulse-momentary-highlight-region (overlay-start overlay) | 1117 | (pulse-momentary-highlight-region (flymake--diag-beg diag) |
| 1098 | (overlay-end overlay) | 1118 | (flymake--diag-end diag) |
| 1099 | 'highlight)) | 1119 | 'highlight)) |
| 1100 | (current-buffer)))) | 1120 | (current-buffer)))) |
| 1101 | 1121 | ||
| @@ -1108,18 +1128,16 @@ POS can be a buffer position or a button" | |||
| 1108 | 1128 | ||
| 1109 | (defun flymake--diagnostics-buffer-entries () | 1129 | (defun flymake--diagnostics-buffer-entries () |
| 1110 | (with-current-buffer flymake--diagnostics-buffer-source | 1130 | (with-current-buffer flymake--diagnostics-buffer-source |
| 1111 | (cl-loop for ov in (flymake--overlays) | 1131 | (cl-loop for diag in (flymake-diagnostics) |
| 1112 | for diag = (overlay-get ov | ||
| 1113 | 'flymake--diagnostic) | ||
| 1114 | for (line . col) = | 1132 | for (line . col) = |
| 1115 | (save-excursion | 1133 | (save-excursion |
| 1116 | (goto-char (overlay-start ov)) | 1134 | (goto-char (flymake--diag-beg diag)) |
| 1117 | (cons (line-number-at-pos) | 1135 | (cons (line-number-at-pos) |
| 1118 | (- (point) | 1136 | (- (point) |
| 1119 | (line-beginning-position)))) | 1137 | (line-beginning-position)))) |
| 1120 | for type = (flymake--diag-type diag) | 1138 | for type = (flymake--diag-type diag) |
| 1121 | collect | 1139 | collect |
| 1122 | (list (list :overlay ov | 1140 | (list (list :diagnostic diag |
| 1123 | :line line | 1141 | :line line |
| 1124 | :severity (flymake--lookup-type-property | 1142 | :severity (flymake--lookup-type-property |
| 1125 | type | 1143 | type |