vim/vim

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

  1. Run vim --clean
  2. Edit a.cc
  3. Type 'int final, override, import, module;'
  4. 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).