package coq-lsp
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
Language Server Protocol native server for Coq
Install
dune-project
Dependency
Authors
Maintainers
Sources
coq-lsp-0.2.5+8.20.tbz
sha256=764f5cbaf3da308a21ea2953a275e74b6e5a841c82bdd8b71fa474b1395738a1
sha512=16189385a27ce7576820d03d4410d4f9bc52150b43d714813c3611d6b5519b5d256c1ac348913bbf77c6f313d54927ead935a188783e04b21032f5e06c793778
doc/src/coq-lsp.coq/parsing.ml.html
Source file parsing.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(*************************************************************************) (* Copyright 2015-2019 MINES ParisTech -- Dual License LGPL 2.1+ / GPL3+ *) (* Copyright 2019-2024 Inria -- Dual License LGPL 2.1+ / GPL3+ *) (* Copyright 2024-2025 Emilio J. Gallego Arias -- LGPL 2.1+ / GPL3+ *) (* Copyright 2025 CNRS -- LGPL 2.1+ / GPL3+ *) (* Written by: Emilio J. Gallego Arias & coq-lsp contributors *) (*************************************************************************) (* Rocq Language Server Protocol: Rocq parsing API *) (*************************************************************************) module Lexer = struct let after = CLexer.after end module Stream = struct let of_string = Gramlib.Stream.of_string end module Parsable = Pcoq.Parsable let parse ~st ps = (* Coq is missing this, so we add it here. Note that this MUST run inside coq_protect *) Control.check_for_interrupt (); let mode = State.mode ~st in Pcoq.Entry.parse Pvernac.(main_entry mode) ps |> Option.map Ast.of_coq let parse ~token ~st ps = (* This runs already inside Coq.protect *) State.in_state ~token ~st ~f:(parse ~st) ps let parse ~token ~st ps = NewProfile.profile "Coq.parse" (fun () -> parse ~token ~st ps) () (* Read the input stream until a dot or a "end of proof" token is encountered *) let parse_to_terminator : unit Pcoq.Entry.t = (* type 'a parser_fun = { parser_fun : te LStream.t -> 'a } *) let rec dot kwstate st = match Gramlib.LStream.next kwstate st with | Tok.KEYWORD ("." | "..." | "Qed" | "Defined" | "Admitted") | Tok.BULLET _ -> () | Tok.EOI -> () | _ -> dot kwstate st in Pcoq.Entry.of_parser "Coqtoplevel.dot" { parser_fun = dot } (* If an error occurred while parsing, we try to read the input until a dot token is encountered. We assume that when a lexer error occurs, at least one char was eaten *) let rec discard_to_dot ps = try Pcoq.Entry.parse parse_to_terminator ps with | CLexer.Error.E _ -> discard_to_dot ps | e when CErrors.noncritical e -> ()
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>