package forester

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

Source file Definitions.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
(*
 * 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_compiler

open struct module L = Lsp.Types end
open State.Syntax

let compute (params : L.DefinitionParams.t) =
  let Lsp_state.{forest; _} = Lsp_state.get () in
  let uri = URI_scheme.lsp_uri_to_uri ~base: forest.config.url params.textDocument.uri in
  let@ tree = Option.bind forest.={uri} in
  let@ {nodes; _} = Option.bind @@ Tree.to_code tree in
  let@ {value = str; _} = Option.bind @@ Analysis.addr_at ~position: params.position nodes in
  let uri = URI_scheme.named_uri ~base: forest.config.url str in
  let@ path = Option.map @~ URI.Tbl.find_opt forest.resolver uri in
  let uri = Lsp.Uri.of_path path in
  let range = L.Range.create ~start: {character = 1; line = 0} ~end_: {character = 1; line = 0} in
  `Location [L.Location.{uri; range}]
OCaml

Innovation. Community. Security.