Neovim, OCaml Interfaces, Tree-Sitter and LSP
Can we all agree that witnessing syntax highlighting being absolutely off is probably the most annoying thing that can happen to anybody?
I mean, just look at this horror.

Syntax highlighting being absolutely wrong.
What you are looking at is the result of trying to enable tree-sitter for
OCaml hacking and calling it a day. In a nutshell, OCaml mli files are
quickly turning into a random mess of nonsensical colors, and I didn’t know
why. I tried to blame
tree-sitter-ocaml ,
but, of course I was wrong.
The issue is subtle, and to be honest, I don’t know if I totally grasp it. But from my rough understanding, it breaks down as follows.
tree-sitter-ocamldefines two grammars:ocamlfor themlfiles, andocaml_interface(butocamlinterfacealso works) for themlifiles- By default, neovim uses the filetype
ocamlformlifiles, so the incorrect parser is being used for syntax highlighting. This explains the root issue - Bonus:
ocamllspdoes not recognize theocamlinterfacefiletype by default (but somehow use theocaml.interfaceid formlifiles…There is probably something to be done here. ).
So, in order to have both tree-sitter and ocamllsp working at the same
time, I had to tweak my configuration a little bit.
lspconfig.ocamllsp.setup({
filetypes = vim.list_extend(
require('lspconfig.server_configurations.ocamllsp')
.default_config
.filetypes,
{ 'ocamlinterface' }
),
})
vim.cmd([[au! BufNewFile,BufRead *.mli setfiletype ocamlinterface]])
And now, I am blessed with a consistent syntax highlighting for my mli files.

Syntax highlighting being absolutely right.