package forester

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

Source file Lsp_shims.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
(*
 * 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 struct module L = Lsp.Types end

module Loc = struct
  let lsp_pos_of_pos (pos : Asai.Range.position) =
    L.Position.create
      ~line: (pos.line_num - 1)
      ~character: (pos.offset - pos.start_of_line)

  let lsp_range_of_range (r : Asai.Range.t option) =
    match r with
    | Some r ->
      let (start, stop) =
        match Asai.Range.view r with
        | `Range (start, stop) -> start, stop
        | `End_of_file pos -> pos, pos
      in
      L.Range.create
        ~start: (lsp_pos_of_pos start)
        ~end_: (lsp_pos_of_pos stop)
    | None ->
      (* When we have a message without a location,
         we set it's location to the start of the file,
         as we don't have any better choices. *)
      let start_of_file = L.Position.create ~line: 0 ~character: 0 in
      L.Range.create ~start: start_of_file ~end_: start_of_file
end

module Diagnostic = struct
  let lsp_severity_of_severity : Asai.Diagnostic.severity -> L.DiagnosticSeverity.t = function
    | Hint -> Hint
    | Info -> Information
    | Warning -> Warning
    | Error -> Error
    | Bug -> Error
end
OCaml

Innovation. Community. Security.