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
When that occurs this triggers an "Invalid face" warnings. This can be fixed by replacing
Line 470 in 0dd3990
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