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.
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-ocaml
defines two grammars:ocaml
for theml
files, andocaml_interface
(butocamlinterface
also works) for themli
files- By default, neovim uses the filetype
ocaml
formli
files, so the incorrect parser is being used for syntax highlighting. This explains the root issue - Bonus:
ocamllsp
does not recognize theocamlinterface
filetype by default (but somehow use theocaml.interface
id formli
files…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.