neovim / neovim

Vim-fork focused on extensibility and usability
https://neovim.io
Other
82.83k stars 5.67k forks source link

Typescript-React syntax highlighting improves only after opening a HTML buffer #24029

Closed nguyenvukhang closed 1 year ago

nguyenvukhang commented 1 year ago

Problem

Syntax highlighting for .tsx files for JSX components improve after opening a .html file and switching buffers back to the .tsx file.

On first open, a .tsx file appears like this:

Screenshot 2023-06-15 at 11 16 51

Then after opening a .html file and navigating back to the original .tsx buffer, it now looks like this:

Screenshot 2023-06-15 at 11 17 39

Steps to reproduce

Create these files:

index.html:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
  <head />
  <body />
</html>

typescript.tsx:

// typescript.tsx
const Something = () => {
  return (
    <div class="container">
      <h1>Title</h1>
      <p>Lorem Ipsum</p>
    </div>
  );
};

Execute this sequence:

  1. nvim --clean typescript.tsx (First image seen here)
  2. :e index.html
  3. :e typescript.tsx (Second image with better syntax highlighting seen here)

Expected behavior

If possible, I would like to see the better syntax highlighting on first-open.

Though an alternative would be to create a workaround and manually load the HTML syntax highlighting in the user's config.

Debug attempts

I tried analyzing the output of :scriptnames and manually sourcing the difference:

:scriptnames upon first opening typescript.tsx ``` 1: /usr/local/share/nvim/runtime/ftplugin.vim 2: /usr/local/share/nvim/runtime/indent.vim 3: /usr/local/share/nvim/runtime/filetype.lua 4: /usr/local/share/nvim/runtime/syntax/syntax.vim 5: /usr/local/share/nvim/runtime/syntax/synload.vim 6: /usr/local/share/nvim/runtime/plugin/gzip.vim 7: /usr/local/share/nvim/runtime/plugin/health.vim 8: /usr/local/share/nvim/runtime/plugin/matchit.vim 9: /usr/local/share/nvim/runtime/pack/dist/opt/matchit/plugin/matchit.vim 10: /usr/local/share/nvim/runtime/plugin/matchparen.vim 11: /usr/local/share/nvim/runtime/plugin/netrwPlugin.vim 12: /usr/local/share/nvim/runtime/plugin/rplugin.vim 13: /usr/local/share/nvim/runtime/plugin/shada.vim 14: /usr/local/share/nvim/runtime/plugin/spellfile.vim 15: /usr/local/share/nvim/runtime/plugin/tarPlugin.vim 16: /usr/local/share/nvim/runtime/plugin/tohtml.vim 17: /usr/local/share/nvim/runtime/plugin/tutor.vim 18: /usr/local/share/nvim/runtime/plugin/zipPlugin.vim 19: /usr/local/share/nvim/runtime/plugin/editorconfig.lua 20: /usr/local/share/nvim/runtime/plugin/man.lua 21: /usr/local/share/nvim/runtime/plugin/nvim.lua 22: /usr/local/share/nvim/runtime/ftplugin/typescriptreact.vim 23: /usr/local/share/nvim/runtime/ftplugin/typescript.vim 24: /usr/local/share/nvim/runtime/syntax/typescriptreact.vim 25: /usr/local/share/nvim/runtime/syntax/shared/typescriptcommon.vim ```
:scriptnames after opening typescript.tsx, then opening index.html ``` 1: /usr/local/share/nvim/runtime/ftplugin.vim 2: /usr/local/share/nvim/runtime/indent.vim 3: /usr/local/share/nvim/runtime/filetype.lua 4: /usr/local/share/nvim/runtime/syntax/syntax.vim 5: /usr/local/share/nvim/runtime/syntax/synload.vim 6: /usr/local/share/nvim/runtime/plugin/gzip.vim 7: /usr/local/share/nvim/runtime/plugin/health.vim 8: /usr/local/share/nvim/runtime/plugin/matchit.vim 9: /usr/local/share/nvim/runtime/pack/dist/opt/matchit/plugin/matchit.vim 10: /usr/local/share/nvim/runtime/plugin/matchparen.vim 11: /usr/local/share/nvim/runtime/plugin/netrwPlugin.vim 12: /usr/local/share/nvim/runtime/plugin/rplugin.vim 13: /usr/local/share/nvim/runtime/plugin/shada.vim 14: /usr/local/share/nvim/runtime/plugin/spellfile.vim 15: /usr/local/share/nvim/runtime/plugin/tarPlugin.vim 16: /usr/local/share/nvim/runtime/plugin/tohtml.vim 17: /usr/local/share/nvim/runtime/plugin/tutor.vim 18: /usr/local/share/nvim/runtime/plugin/zipPlugin.vim 19: /usr/local/share/nvim/runtime/plugin/editorconfig.lua 20: /usr/local/share/nvim/runtime/plugin/man.lua 21: /usr/local/share/nvim/runtime/plugin/nvim.lua 22: /usr/local/share/nvim/runtime/ftplugin/typescriptreact.vim 23: /usr/local/share/nvim/runtime/ftplugin/typescript.vim 24: /usr/local/share/nvim/runtime/syntax/typescriptreact.vim 25: /usr/local/share/nvim/runtime/syntax/shared/typescriptcommon.vim 26: /usr/local/share/nvim/runtime/ftplugin/html.vim 27: /usr/local/share/nvim/runtime/autoload/htmlcomplete.vim 28: /usr/local/share/nvim/runtime/indent/html.vim 29: /usr/local/share/nvim/runtime/indent/javascript.vim 30: /usr/local/share/nvim/runtime/syntax/html.vim 31: /usr/local/share/nvim/runtime/syntax/xml.vim 32: /usr/local/share/nvim/runtime/syntax/dtd.vim 33: /usr/local/share/nvim/runtime/syntax/javascript.vim 34: /usr/local/share/nvim/runtime/syntax/vb.vim 35: /usr/local/share/nvim/runtime/syntax/css.vim ```

I put the difference in a diff.vim in the same directory and sourced it with :so diff.vim after opening typescript.tsx, but the syntax highlighting doesn't change.

" diff.vim
so /usr/local/share/nvim/runtime/ftplugin/html.vim
so /usr/local/share/nvim/runtime/autoload/htmlcomplete.vim
so /usr/local/share/nvim/runtime/indent/html.vim
so /usr/local/share/nvim/runtime/indent/javascript.vim
so /usr/local/share/nvim/runtime/syntax/html.vim
so /usr/local/share/nvim/runtime/syntax/xml.vim
so /usr/local/share/nvim/runtime/syntax/dtd.vim
so /usr/local/share/nvim/runtime/syntax/javascript.vim
so /usr/local/share/nvim/runtime/syntax/vb.vim
so /usr/local/share/nvim/runtime/syntax/css.vim

Can anyone help point me in the right direction for correctly sourcing the extra syntax highlighting logic that opening the .html buffer does? Thanks!

Neovim version (nvim -v)

v0.9.1

Vim (not Nvim) behaves the same?

yes, vim 9.0

Operating system/version

macOS 13.2.1

Terminal name/version

Alacritty 0.12.0

$TERM environment variable

screen-256color

Installation

build from repo

justinmk commented 1 year ago

Improving vim's legacy syntax files is out of scope. Nvim strategy is to continue improving tree-sitter support.

clason commented 1 year ago

Please report this issue at vim/vim; if it is fixed there, the patch will be ported (if possible) to Neovim as well. But the legacy syntax engine and files are primarily maintained there.