package coq-lsp
Language Server Protocol native server for Coq
Install
dune-project
Dependency
Authors
Maintainers
Sources
coq-lsp-0.2.4.8.20.tbz
sha256=9e3736371fe2c2dd5af50e2a360f070f8c329516c60f01ba3dc7378b80b77172
sha512=d5302f5dc4d7700910b7a7a2d1558770e15bfc0c7bcf9de2ccfd321b4e3cd591848d8e11f03e87362a8d81df72ec4af57dda2c3c5737b34726dcee35de2e56c8
doc/src/coq-lsp.coq/module.ml.html
Source file module.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
(*************************************************************************) (* 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 module API *) (*************************************************************************) type t = { dp : Names.DirPath.t ; source : string ; vo : string ; uri : Lang.LUri.File.t } let uri { uri; _ } = uri let source { source; _ } = source let make dp = match Loadpath.locate_absolute_library dp with | Ok vo -> (* Fleche.Io.Log.trace "rq_definition" "File Found"; *) let source = Filename.remove_extension vo ^ ".v" in let source = Str.replace_first (Str.regexp "_build/default/") "" source in let uri = Lang.LUri.of_string ("file://" ^ source) in let uri = Lang.LUri.File.of_uri uri |> Result.get_ok in Ok { dp; source; vo; uri } | Error err -> (* Fleche.Io.Log.trace "rq_definition" "File Not Found :("; *) (* Debug? *) Error err let offset_to_range source (bp, ep) = let text = Compat.Ocaml_414.In_channel.(with_open_text source input_all) in let rec count (lines, char) cur goal = if cur >= goal then (lines, char) else match text.[cur] with | '\n' -> count (lines + 1, 0) (cur + 1) goal | _ -> count (lines, char + 1) (cur + 1) goal in (* XXX UTF-8 / 16 adjust *) let bline, bchar = count (0, 0) 0 bp in let eline, echar = count (bline, bchar) bp ep in let start = Lang.Point.{ line = bline; character = bchar; offset = bp } in let end_ = Lang.Point.{ line = eline; character = echar; offset = ep } in Lang.Range.{ start; end_ } let find { vo; source; _ } name = let glob = Filename.remove_extension vo ^ ".glob" in match Glob.open_file glob with | Error err -> (* Fleche.Io.Log.trace "rq_definition:open_file" "Error: %s" err; *) Error err | Ok g -> ( match Glob.get_info g name with | Some { offset; _ } -> Ok (Some (offset_to_range source offset)) | None -> (* Fleche.Io.Log.trace "rq_definition:get_info" "Not found"; *) Ok None)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>