Skip to content

Commit 9724c0f

Browse files
voodoosdavesnx
authored andcommitted
More natural fallback on .merlin files when no dune-project is found. (#1563)
* More natural fallback on .merlin files when no dune-project is found. Implements the behaviour described in issue #1522, fixes #1522 * Add changelog entry for #1563 * Update CI after 5.4 release * fmt
1 parent 2f93f4c commit 9724c0f

File tree

7 files changed

+31
-15
lines changed

7 files changed

+31
-15
lines changed

.github/workflows/build-and-test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949

5050
# Remove this pin once a compatible version of Merlin has been released
5151
- name: Pin dev Merlin
52-
run: opam --cli=2.1 pin --with-version=5.5-503 https://github.com/ocaml/merlin.git#main
52+
run: opam --cli=2.1 pin --with-version=5.6-504 https://github.com/voodoos/merlin.git#main
5353

5454
- name: Build and install dependencies
5555
run: opam install .
@@ -90,7 +90,7 @@ jobs:
9090
9191
# Remove this pin once a compatible version of Merlin has been released
9292
- name: Pin dev Merlin
93-
run: opam --cli=2.1 pin --with-version=5.5-503 https://github.com/ocaml/merlin.git#main
93+
run: opam --cli=2.1 pin --with-version=5.6-504 https://github.com/voodoos/merlin.git#main
9494

9595
- name: Install dependencies
9696
run: |

CHANGES.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@
88
## Fixes
99

1010
- Improve precision of collected metrics timestamps. (#1565)
11+
- Fallback on `.merlin` configuration if no `dune-project` file is found and if
12+
`dot-merlin-reader` is installed. (#1563, fixes #1522)
13+
14+
# 1.24.0
15+
16+
## Features
17+
18+
- Support for OCaml 5.4 (#1559)
19+
20+
# 1.23.1
21+
22+
## Fixes
23+
1124
- Fix hover on method calls not showing the type. (#1553, fixes #1552)
1225
- Fix error on opening `.mll` files (#1557)
1326

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. The `dot-merlin-reader` \
17+
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
@@ -119,7 +119,7 @@ module Dot_protocol_io =
119119
let write t x = write t [ x ]
120120
end)
121121

122-
let should_read_dot_merlin = ref false
122+
let prefer_dot_merlin = ref false
123123

124124
type db =
125125
{ running : (string, entry) Table.t
@@ -299,13 +299,13 @@ let config (t : t) : Mconfig.t Fiber.t =
299299
t.entry <- Some entry
300300
in
301301
let* () = Fiber.return () in
302-
if !should_read_dot_merlin
302+
if !prefer_dot_merlin
303303
then Fiber.return (Mconfig.get_external_config t.path t.initial)
304304
else (
305305
match find_project_context t.directory with
306306
| None ->
307307
let+ () = destroy t in
308-
t.initial
308+
Mconfig.get_external_config t.path t.initial
309309
| Some (ctx, config_path) ->
310310
let* entry = get_process t.db ~dir:ctx.process_dir in
311311
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
@@ -963,10 +963,10 @@ let run_in_directory =
963963
fun () -> if Sys.win32 then for_windows else run_in_directory
964964
;;
965965

966-
let run channel ~read_dot_merlin () =
966+
let run channel ~prefer_dot_merlin () =
967967
Merlin_utils.Lib_config.set_program_name "ocamllsp";
968968
Merlin_utils.Lib_config.System.set_run_in_directory (run_in_directory ());
969-
Merlin_config.should_read_dot_merlin := read_dot_merlin;
969+
Merlin_config.prefer_dot_merlin := prefer_dot_merlin;
970970
Unix.putenv "__MERLIN_MASTER_PID" (string_of_int (Unix.getpid ()));
971971
Lev_fiber.run ~sigpipe:`Ignore (fun () ->
972972
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)