mirror of
https://github.com/c-cube/linol.git
synced 2025-12-06 11:15:46 -05:00
46 lines
1.3 KiB
OCaml
46 lines
1.3 KiB
OCaml
open Stdune
|
|
module Cli = Lsp.Cli
|
|
|
|
let () =
|
|
Printexc.record_backtrace true;
|
|
let version = ref false in
|
|
let read_dot_merlin = ref false in
|
|
let arg = Lsp.Cli.Arg.create () in
|
|
let spec =
|
|
[ "--version", Arg.Set version, "print version"
|
|
; ( "--fallback-read-dot-merlin"
|
|
, Arg.Set read_dot_merlin
|
|
, "read Merlin config from .merlin files. The `dot-merlin-reader` package must be \
|
|
installed" )
|
|
]
|
|
@ Cli.Arg.spec arg
|
|
in
|
|
let usage =
|
|
"ocamllsp [ --stdio | --socket PORT | --port PORT | --pipe PIPE ] [ \
|
|
--clientProcessId pid ]"
|
|
in
|
|
Arg.parse spec (fun _ -> raise @@ Arg.Bad "anonymous arguments aren't allowed") usage;
|
|
let channel =
|
|
match Cli.Arg.channel arg with
|
|
| Ok c -> c
|
|
| Error s ->
|
|
Format.eprintf "%s@.%!" s;
|
|
Arg.usage spec usage;
|
|
exit 1
|
|
in
|
|
let version = !version in
|
|
if version
|
|
then (
|
|
let version = Ocaml_lsp_server.Version.get () in
|
|
print_endline version)
|
|
else
|
|
let module Exn_with_backtrace = Stdune.Exn_with_backtrace in
|
|
match
|
|
Exn_with_backtrace.try_with
|
|
(Ocaml_lsp_server.run channel ~read_dot_merlin:!read_dot_merlin)
|
|
with
|
|
| Ok () -> ()
|
|
| Error exn ->
|
|
Format.eprintf "%a@." Exn_with_backtrace.pp_uncaught exn;
|
|
exit 1
|
|
;;
|