LSP syntax highlighting can be heavy weight the whole source is sent every few keystroke, and if many tokens get an annotation. It is common to use fast and simple JS frontend highlighting for simple things like literals, keyword and comments. For example, with Textmate via a
VSCode extension. LSP is left to deal with the identifiers where a name resolver or a type system is needed.
Semantic highlighting is part of LSP and supported by all "bigger" LSPs.