-
Notifications
You must be signed in to change notification settings - Fork 137
Description
While editing Python files when using lsp-mode together with pyright, lsp-ui, lsp-ui-sideline and flycheck, warning messages like "Invalid face reference: lsp-flycheck-info-unnecessary" occur repeatedly in the "*Messages*" buffer.
This can be seen by e.g. creating a buffer with an unused import, saving it, and moving the cursor on and off the import line when the sideline is in use.
It occurs because lsp-flycheck-info-unnecessary is not a face (the corresponding face is lsp-flycheck-info-unnecessary-face) but is treated as such by lsp-ui-sideline--diagnostics.
Both are generated by lsp--diagnostics-flycheck-level, which generates a "level" from an original flycheck level (e.g. 'error, 'warning) and a list of tags.
Some of the levels returned from lsp-diagnostics--flycheck-calculate-level are themselves faces but those constructed with tags are not.
However lsp-ui-sideline--diagnostics may set a face variable directly from such a level and pass it to add-face-text-property.
Lines 469 to 474 in 0dd3990
| (level (flycheck-error-level e)) | |
| (face (if (eq level 'info) 'success level)) | |
| (margin (lsp-ui-sideline--margin-width)) | |
| (msg (progn (add-face-text-property 0 len 'lsp-ui-sideline-global nil msg) | |
| (add-face-text-property 0 len face nil msg) | |
| msg)) |
When that occurs this triggers an "Invalid face" warnings. This can be fixed by replacing
Line 470 in 0dd3990
| (face (if (eq level 'info) 'success level)) |
by
(face (let ((local-face
(flycheck-error-level-error-list-face
(if (eq level 'info) 'success level))))
(if (facep local-face)
local-face
(error "Could not determine face for %s" level))))
Related from lsp-mode