https://gist.github.com/swarn/fb37d9eefe1bc616c2a7e476c0bc03...
In the comments there's also a link to a plugin that does a different kind "Where every variable is a different color":
The former is truly semantic, but needs an external compiler (via LSP).
For requirement 2 and 3 I think VSCode can do that. Some themes tint every possible class of token, so casting will look different from multiplication. Afaik, it definitely differentiates functions, locals, globals and members, while they are all identifiers.