package coq-lsp
Language Server Protocol native server for Coq
Install
Dune Dependency
Authors
Maintainers
Sources
coq-lsp-0.1.3.v8.16.tbz
sha256=d6d589ae18453d9251b4250df50e59cfc87254de0e4734e13c5bca06ab14cee5
sha512=802b4673c7f581976526a3cb4bd824f7574c5b1cc8fcc7759fcd3358cdc3e4cebef3ec908899ad68129190777ccda931dfc1643b45db156ede15acae0382c148
doc/src/coq-lsp.coq/state.ml.html
Source file state.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
type t = Vernacstate.t (* EJGA: This requires patches to Coq, they are in the lsp_debug branch let any_out oc (a : Summary.Frozen.any) = (* let (Summary.Frozen.Any (tag, _value)) = a in *) (* let name = Summary.Dyn.repr tag in *) (* Lsp.Io.log_error "marshall" name; *) Marshal.to_channel oc a [] let _frozen_out oc (s : Summary.Frozen.t) = Summary.Frozen.iter (any_out oc) s let summary_out oc (s : Summary.frozen) = let { Summary.summaries; ml_module } = s in (* frozen_out oc summaries; *) Marshal.to_channel oc summaries []; Marshal.to_channel oc ml_module []; () let summary_in ic : Summary.frozen = let summaries = Marshal.from_channel ic in let ml_module = Marshal.from_channel ic in { Summary.summaries; ml_module } let system_out oc ((l : Lib.frozen), (s : Summary.frozen)) = (* Both parts of system have functional values !! Likely due to Lib.frozen having a Summary.frozen inside? *) Marshal.to_channel oc l [ Closures ]; summary_out oc s; () let system_in ic : Vernacstate.System.t = let l : Lib.frozen = Marshal.from_channel ic in let s : Summary.frozen = summary_in ic in (l, s) let _marshal_out oc st = let { Vernacstate.parsing; system; lemmas; program; opaques; shallow } = st in Marshal.to_channel oc parsing []; system_out oc system; (* lemmas doesn't !! *) Marshal.to_channel oc lemmas []; Marshal.to_channel oc program []; Marshal.to_channel oc opaques []; Marshal.to_channel oc shallow []; () let _marshal_in ic = let parsing = Marshal.from_channel ic in let system = system_in ic in let lemmas = Marshal.from_channel ic in let program = Marshal.from_channel ic in let opaques = Marshal.from_channel ic in let shallow = Marshal.from_channel ic in { Vernacstate.parsing; system; lemmas; program; opaques; shallow } *) let marshal_in ic : t = Marshal.from_channel ic let marshal_out oc st = Marshal.to_channel oc st [] let of_coq x = x let to_coq x = x (* let compare x y = compare x y *) let compare (x : t) (y : t) = let open Vernacstate in let { parsing = p1 ; system = s1 ; lemmas = l1 ; program = g1 ; opaques = o1 ; shallow = h1 } = x in let { parsing = p2 ; system = s2 ; lemmas = l2 ; program = g2 ; opaques = o2 ; shallow = h2 } = y in if p1 == p2 && s1 == s2 && l1 == l2 && g1 == g2 && o1 == o2 && h1 == h2 then 0 else 1 let equal x y = compare x y = 0 let hash x = Hashtbl.hash x let mode ~st = Option.map (fun _ -> Vernacinterp.get_default_proof_mode ()) st.Vernacstate.lemmas let parsing ~st = st.Vernacstate.parsing module Proof = struct type t = Vernacstate.LemmaStack.t let to_coq x = x end let lemmas ~st = st.Vernacstate.lemmas let drop_proofs ~st = let open Vernacstate in { st with lemmas = Option.cata (fun s -> snd @@ Vernacstate.LemmaStack.pop s) None st.lemmas } let in_state ~st ~f a = let f a = Vernacstate.unfreeze_interp_state st; f a in Protect.eval ~f a let admit ~st = let () = Vernacstate.unfreeze_interp_state st in match st.Vernacstate.lemmas with | None -> st | Some lemmas -> let pm = NeList.head st.Vernacstate.program in let proof, lemmas = Vernacstate.(LemmaStack.pop lemmas) in let pm = Declare.Proof.save_admitted ~pm ~proof in let program = NeList.map_head (fun _ -> pm) st.Vernacstate.program in let st = Vernacstate.freeze_interp_state ~marshallable:false in { st with lemmas; program } (* TODO: implement protect once error recovery supports a failing recovery execution *) (* let admit ~st = Protect.eval ~f:(admit ~st) () *)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>