Skip to content

Commit cdd98fb

Browse files
committed
More natural fallback on .merlin files when no dune-project is found.
Implements the behaviour described in issue #1522, fixes #1522
1 parent dc01af3 commit cdd98fb

File tree

5 files changed

+16
-13
lines changed

5 files changed

+16
-13
lines changed

ocaml-lsp-server/bin/main.ml

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,23 @@ module Cli = Lsp.Cli
44
let () =
55
Printexc.record_backtrace true;
66
let version = ref false in
7-
let read_dot_merlin = ref false in
7+
let prefer_dot_merlin = ref false in
88
let arg = Lsp.Cli.Arg.create () in
99
let spec =
1010
[ "--version", Arg.Set version, "print version"
1111
; ( "--fallback-read-dot-merlin"
12-
, Arg.Set read_dot_merlin
13-
, "read Merlin config from .merlin files. The `dot-merlin-reader` package must be \
14-
installed" )
12+
, Arg.Set prefer_dot_merlin
13+
, "deprecated, same as --prefer-dot-merlin" )
14+
; ( "--prefer-dot-merlin"
15+
, Arg.Set prefer_dot_merlin
16+
, "always read Merlin config from existing .merlin files. \
17+
The `dot-merlin-reader` package must be installed" )
1518
]
1619
@ Cli.Arg.spec arg
1720
in
1821
let usage =
1922
"ocamllsp [ --stdio | --socket PORT | --port PORT | --pipe PIPE ] [ \
20-
--clientProcessId pid ]"
23+
--clientProcessId pid ] [ --prefer-dot-merlin ]"
2124
in
2225
Arg.parse spec (fun _ -> raise @@ Arg.Bad "anonymous arguments aren't allowed") usage;
2326
let channel =
@@ -37,7 +40,7 @@ let () =
3740
let module Exn_with_backtrace = Stdune.Exn_with_backtrace in
3841
match
3942
Exn_with_backtrace.try_with
40-
(Ocaml_lsp_server.run channel ~read_dot_merlin:!read_dot_merlin)
43+
(Ocaml_lsp_server.run channel ~prefer_dot_merlin:!prefer_dot_merlin)
4144
with
4245
| Ok () -> ()
4346
| Error exn ->

ocaml-lsp-server/src/merlin_config.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ module Dot_protocol_io =
118118
let write t x = write t [ x ]
119119
end)
120120

121-
let should_read_dot_merlin = ref false
121+
let prefer_dot_merlin = ref false
122122

123123
type db =
124124
{ running : (string, entry) Table.t
@@ -298,13 +298,13 @@ let config (t : t) : Mconfig.t Fiber.t =
298298
t.entry <- Some entry
299299
in
300300
let* () = Fiber.return () in
301-
if !should_read_dot_merlin
301+
if !prefer_dot_merlin
302302
then Fiber.return (Mconfig.get_external_config t.path t.initial)
303303
else (
304304
match find_project_context t.directory with
305305
| None ->
306306
let+ () = destroy t in
307-
t.initial
307+
Mconfig.get_external_config t.path t.initial
308308
| Some (ctx, config_path) ->
309309
let* entry = get_process t.db ~dir:ctx.process_dir in
310310
let* () =

ocaml-lsp-server/src/merlin_config.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ open Import
44

55
type t
66

7-
val should_read_dot_merlin : bool ref
7+
val prefer_dot_merlin : bool ref
88
val config : t -> Mconfig.t Fiber.t
99
val destroy : t -> unit Fiber.t
1010

ocaml-lsp-server/src/ocaml_lsp_server.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -997,10 +997,10 @@ let run_in_directory =
997997
fun () -> if Sys.win32 then for_windows else run_in_directory
998998
;;
999999

1000-
let run channel ~read_dot_merlin () =
1000+
let run channel ~prefer_dot_merlin () =
10011001
Merlin_utils.Lib_config.set_program_name "ocamllsp";
10021002
Merlin_utils.Lib_config.System.set_run_in_directory (run_in_directory ());
1003-
Merlin_config.should_read_dot_merlin := read_dot_merlin;
1003+
Merlin_config.prefer_dot_merlin := prefer_dot_merlin;
10041004
Unix.putenv "__MERLIN_MASTER_PID" (string_of_int (Unix.getpid ()));
10051005
Lev_fiber.run ~sigpipe:`Ignore (fun () ->
10061006
let* input, output = stream_of_channel channel in

ocaml-lsp-server/src/ocaml_lsp_server.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
val run : Lsp.Cli.Channel.t -> read_dot_merlin:bool -> unit -> unit
1+
val run : Lsp.Cli.Channel.t -> prefer_dot_merlin:bool -> unit -> unit
22

33
module Diagnostics = Diagnostics
44
module Version = Version

0 commit comments

Comments
 (0)