package forester
A tool for tending mathematical forests
Install
Dune Dependency
Authors
Maintainers
Sources
5.0.tar.gz
md5=24f4aed96a8b8af33aba13fba66f1b37
sha512=d36b896aca11858bb4a00fc704c16cc27a1f197bdb3e479d6132fd70f70d67d7158096285cb0b6fb00db14417f0f822cc27fe65d82f0971e42378fd8271ce573
doc/src/forester.language_server/Document_link.ml.html
Source file Document_link.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
(* * SPDX-FileCopyrightText: 2024 The Forester Project Contributors AND The RedPRL Development Team * * SPDX-License-Identifier: GPL-3.0-or-later OR Apache-2.0 WITH LLVM-exception * *) open Forester_prelude open Forester_core open Forester_frontend open Forester_compiler open struct module L = Lsp.Types let (let*) = Option.bind end open State.Syntax (* TODO: handle external links as well? *) let compute (params : L.DocumentLinkParams.t) = let Lsp_state.{forest; _} = Lsp_state.get () in let render = Plain_text_client.string_of_content ~forest in let config = forest.config in let Lsp_state.{forest; _} = Lsp_state.get () in let links = let uri = URI_scheme.lsp_uri_to_uri ~base: config.url params.textDocument.uri in (* match Imports.resolve_uri_to_code forest uri with *) match Option.bind forest.={uri} Tree.to_code with | None -> [] | Some tree -> let@ node = List.filter_map @~ tree.nodes in match Range.(node.value) with | Code.Group (Squares, [{value = Text addr; _}]) | Code.Group (Parens, [{value = Text addr; _}]) | Code.Group (Braces, [{value = Text addr; _}]) -> (* TODO: Need to analyse syn *) let range = Lsp_shims.Loc.lsp_range_of_range node.loc in let uri = URI_scheme.named_uri ~base: config.url addr in let* target = Option.map Lsp.Uri.of_path @@ URI.Tbl.find_opt forest.resolver uri in let* {frontmatter; _} = State.get_article uri forest in let* tooltip = Option.map (fun c -> render c) frontmatter.title in let link = L.DocumentLink.create ~range ~target ~tooltip () in Some link | _ -> None in Some links
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>