Skip to content

Bug: Warnings "Invalid face reference: lsp-flycheck-info-unnecessary" when using lsp-ui-sideline #761

Open
@jonmoore

Description

@jonmoore

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.

lsp-ui/lsp-ui-sideline.el

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

(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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions