package lsp
LSP protocol implementation in OCaml
Install
Dune Dependency
Authors
-
AAndrey Popp <8mayday@gmail.com>
-
RRusty Key <iam@stfoo.ru>
-
LLouis Roché <louis@louisroche.net>
-
OOleksiy Golovko <alexei.golovko@gmail.com>
-
RRudi Grinberg <me@rgrinberg.com>
-
SSacha Ayoun <sachaayoun@gmail.com>
-
Ccannorin <cannorin@gmail.com>
-
UUlugbek Abdullaev <ulugbekna@gmail.com>
-
Thibaut Mattio
-
MMax Lantas <mnxndev@outlook.com>
Maintainers
Sources
jsonrpc-1.10.2.tbz
sha256=8bf1516829f8dcace133f21f633a275a1d9fdcc59339e0359c67b7b02e9ee6c6
sha512=1f8099b3b085ef0e58317802b180d7321e25a1393034c6cb9fe7b9158baee9868113751111a82352b236e1b3b1078188d2ed40b6316d230f3c81c5b69b5ad872
doc/src/lsp.stdune/console.ml.html
Source file console.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
# 1 "submodules/dune/otherlibs/stdune/console.ml" module Backend = struct module type S = sig val print_user_message : User_message.t -> unit val set_status_line : User_message.Style.t Pp.t option -> unit val print_if_no_status_line : User_message.Style.t Pp.t -> unit val reset : unit -> unit end type t = (module S) module Dumb_no_flush : S = struct let print_user_message msg = Option.iter msg.User_message.loc ~f:(fun loc -> Loc.render Format.err_formatter (Loc.pp loc)); User_message.prerr { msg with loc = None } let set_status_line _ = () let print_if_no_status_line msg = (* [Pp.cut] seems to be enough to force the terminating newline to appear. *) Ansi_color.prerr (Pp.seq (Pp.map_tags msg ~f:User_message.Print_config.default) Pp.cut) let reset () = prerr_string "\x1bc" end module Dumb : S = struct include Dumb_no_flush let print_if_no_status_line msg = print_if_no_status_line msg; flush stderr let print_user_message msg = print_user_message msg; flush stderr let reset () = reset (); flush stderr end module Progress : S = struct let status_line = ref Pp.nop let status_line_len = ref 0 let hide_status_line () = if !status_line_len > 0 then Printf.eprintf "\r%*s\r" !status_line_len "" let show_status_line () = if !status_line_len > 0 then Ansi_color.prerr !status_line let set_status_line = function | None -> hide_status_line (); status_line := Pp.nop; status_line_len := 0; flush stderr | Some line -> let line = Pp.map_tags line ~f:User_message.Print_config.default in let line_len = String.length (Format.asprintf "%a" Pp.to_fmt line) in hide_status_line (); status_line := line; status_line_len := line_len; show_status_line (); flush stderr let print_if_no_status_line _msg = () let print_user_message msg = hide_status_line (); Dumb_no_flush.print_user_message msg; show_status_line (); flush stderr let reset () = Dumb.reset () end let dumb = (module Dumb : S) let progress = (module Progress : S) let main = ref dumb let set t = main := t let compose (module A : S) (module B : S) : (module S) = (module struct let print_user_message msg = A.print_user_message msg; B.print_user_message msg let set_status_line x = A.set_status_line x; B.set_status_line x let print_if_no_status_line msg = A.print_if_no_status_line msg; B.print_if_no_status_line msg let reset () = A.reset (); B.reset () end : S) end let print_user_message msg = let (module M : Backend.S) = !Backend.main in M.print_user_message msg let print paragraphs = print_user_message (User_message.make paragraphs) let printf fmt = Printf.ksprintf (fun msg -> print [ Pp.verbatim msg ]) fmt let set_status_line line = let (module M : Backend.S) = !Backend.main in M.set_status_line line let print_if_no_status_line line = let (module M : Backend.S) = !Backend.main in M.print_if_no_status_line line let reset () = let (module M : Backend.S) = !Backend.main in M.reset () module Status_line = struct type t = | Live of (unit -> User_message.Style.t Pp.t) | Constant of User_message.Style.t Pp.t module Id = Id.Make () let toplevel = Id.gen () let stack = ref [] let refresh () = match !stack with | [] -> set_status_line None | (_id, t) :: _ -> let pp = match t with | Live f -> f () | Constant x -> x in (* Always put the status line inside a horizontal box to force the [Format] module to prefer a single line. In particular, it seems that [Format.pp_print_text] split the line before the last word, unless it is succeeded by a space. This seems like a bug in [Format] and putting the whole thing into a [hbox] works around this bug. See https://github.com/ocaml/dune/issues/2779 *) set_status_line (Some (Pp.hbox pp)) let set t = stack := [ (toplevel, t) ]; (match t with | Live _ -> () | Constant pp -> print_if_no_status_line pp); refresh () let clear () = stack := []; refresh () type overlay = Id.t let add_overlay t = let id = Id.gen () in stack := (id, t) :: !stack; refresh (); id let remove_overlay id = stack := List.filter !stack ~f:(fun (id', _) -> not (Id.equal id id')); refresh () let with_overlay t ~f = let id = add_overlay t in Exn.protect ~f ~finally:(fun () -> remove_overlay id) end let () = User_warning.set_reporter print_user_message
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>