diff options
Diffstat (limited to 'site/posts/NeoVimOcamlInterfacesAndLSP.org')
-rw-r--r-- | site/posts/NeoVimOcamlInterfacesAndLSP.org | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/site/posts/NeoVimOcamlInterfacesAndLSP.org b/site/posts/NeoVimOcamlInterfacesAndLSP.org new file mode 100644 index 0000000..a8fcc3f --- /dev/null +++ b/site/posts/NeoVimOcamlInterfacesAndLSP.org @@ -0,0 +1,52 @@ +#+TITLE: 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. + +#+CAPTION: Syntax highlighting being absolutely wrong +#+NAME: fig:wrong-highlingting +[[../img/wrong-highlighting.png]] + +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 +[[https://github.com/tree-sitter/tree-sitter-ocaml/issues/72][~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 the ~ml~ files, and + ~ocaml_interface~ (but ~ocamlinterface~ also works) for the ~mli~ files +- By default, neovim uses the filetype ~ocaml~ for ~mli~ files, so the incorrect + parser is being used for syntax highlighting. This explains the root issue +- Bonus: ~ocamllsp~ does not recognize the ~ocamlinterface~ filetype by + default (but somehow use the ~ocaml.interface~ id for ~mli~ files…[fn::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. + +#+begin_src lua +lspconfig.ocamllsp.setup({ + cmd = { 'ocamllsp', '--fallback-read-dot-merlin' }, + -- Necessary to get tree sitter to work with .mli files + filetypes = vim.list_extend( + require('lspconfig.server_configurations.ocamllsp') + .default_config + .filetypes, + { 'ocamlinterface' } + ), +}) + +vim.cmd([[au! BufNewFile,BufRead *.mli setfiletype ocamlinterface]]) +#+end_src + +And now, I am blessed with a consistent syntax highlighting for my ~mli~ files. + +#+CAPTION: Syntax highlighting being absolutely wrong +#+NAME: fig:wrong-highlingting +[[../img/good-highlighting.png]] |