Incorrect highlighting for C++ special identifiers
Closed this issue · 5 comments
Describe the bug
C++ identifiers with special meaning (final, override, import and module). are incorrectly highlighted out-of-context. These keywords should be considered as regular identifiers when used out of their special meaning context (c.f. C++20 standard, section 5.10, paragraph 2).
To Reproduce
- Run
vim --clean - Edit
a.cc - Type 'int final, override, import, module;'
- Incorrect highlighting for these variables name
Expected behavior
Highlighting for these variables names should be the same as the one for int x;
Environment (please complete the following information):
Vim version 8.2.3323
That is a CPP syntax issue. So I'll leave that for https://github.com/vim-jp/vim-cpp
This is probably difficult to do properly as C++ syntax is complex and Vim does not use a C++ parser, but uses heuristics based on regexp for syntax highlighting. We can maybe improve heuristics, but we can't expect to get syntax highlighting it 100% right with heuristics. In practice, it's already doing a fairly good job for C++. Calling variables override,final or module seems quite rare and is asking for trouble. I understand that C++ allowed that for to avoid breaking existing software. Backward compatibility is important for C++. For Vim, the cost / benefit of fixing this ticket seems low IMO.
The only way to syntax highlight C++ (and other languages) 100% correctly, is to have a real C++ parser using e.g. Tree-sitter. Maybe something for Vim-10? :-)
yes, related: #8658
Note, Vim cannot do semantic highlighting (yet), just regex based highlighting.
apparently it works quite nicely for Neovim (for languages that have treesitter parsers).