package forester

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file Inlay_hint.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
(*
 * 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 State.Syntax

open struct
  module L = Lsp.Types
end

let compute (params : L.InlayHintParams.t) : L.InlayHint.t list option =
  let Lsp_state.{forest; _} = Lsp_state.get () in
  let config = forest.config in
  let uri = URI_scheme.lsp_uri_to_uri ~base: config.url params.textDocument.uri in
  let@ {nodes; _} = Option.map @~ Option.bind forest.={uri} Tree.to_code in
  let@ (Range.{loc; _} as node) = List.filter_map @~ Analysis.flatten nodes in
  match Option.map Range.view loc with
  | None | Some (`End_of_file _) -> None
  | Some (`Range (_, pos)) ->
    let@ {value = str; _} = Option.bind @@ Analysis.extract_addr node in
    let uri = URI_scheme.named_uri ~base: config.url str in
    let@ {frontmatter; _} = Option.bind @@ State.get_article uri forest in
    let@ title = Option.map @~ frontmatter.title in
    let content = " " ^ Plain_text_client.string_of_content ~forest title in
    L.InlayHint.create ~position: (Lsp_shims.Loc.lsp_pos_of_pos pos) ~label: (`String content) ()
OCaml

Innovation. Community. Security.