9
9
--- opam install ocaml-lsp-server
10
10
--- ```
11
11
12
- local util = require ' lspconfig.util'
13
-
14
12
local language_id_of = {
15
13
menhir = ' ocaml.menhir' ,
16
14
ocaml = ' ocaml' ,
@@ -20,17 +18,31 @@ local language_id_of = {
20
18
dune = ' dune' ,
21
19
}
22
20
23
- local get_language_id = function (_ , ftype )
24
- return language_id_of [ftype ]
21
+ local language_id_of_ext = {
22
+ mll = language_id_of .ocamllex ,
23
+ mly = language_id_of .menhir ,
24
+ mli = language_id_of .ocamlinterface ,
25
+ }
26
+
27
+ local get_language_id = function (bufnr , ftype )
28
+ if ftype == ' ocaml' then
29
+ local path = vim .api .nvim_buf_get_name (bufnr )
30
+ local ext = vim .fn .fnamemodify (path , ' :e' )
31
+ return language_id_of_ext [ext ] or language_id_of .ocaml
32
+ else
33
+ return language_id_of [ftype ]
34
+ end
25
35
end
26
36
37
+ local root_markers1 = { ' dune-project' , ' dune-workspace' }
38
+ local root_markers2 = { ' *.opam' , ' opam' , ' esy.json' , ' package.json' }
39
+ local root_markers3 = { ' .git' }
40
+
27
41
--- @type vim.lsp.Config
28
42
return {
29
43
cmd = { ' ocamllsp' },
30
44
filetypes = { ' ocaml' , ' menhir' , ' ocamlinterface' , ' ocamllex' , ' reason' , ' dune' },
31
- root_dir = function (bufnr , on_dir )
32
- local fname = vim .api .nvim_buf_get_name (bufnr )
33
- on_dir (util .root_pattern (' *.opam' , ' esy.json' , ' package.json' , ' .git' , ' dune-project' , ' dune-workspace' )(fname ))
34
- end ,
45
+ root_markers = vim .fn .has (' nvim-0.11.3' ) == 1 and { root_markers1 , root_markers2 , root_markers3 }
46
+ or vim .list_extend (vim .list_extend (root_markers1 , root_markers2 ), root_markers3 ),
35
47
get_language_id = get_language_id ,
36
48
}
0 commit comments