Source file Did_change.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
open Forester_prelude
open Forester_core
open Forester_compiler
open struct module L = Lsp.Types end
open State.Syntax
let compute (params : L.DidChangeTextDocumentParams.t) =
let Lsp_state.{forest; _} = Lsp_state.get () in
let lsp_uri = params.textDocument.uri in
let uri = URI_scheme.lsp_uri_to_uri ~base: forest.config.url lsp_uri in
let@ tree = Option.iter @~ forest.={uri} in
match Tree.to_doc tree with
| None -> assert false
| Some doc ->
let new_doc = Lsp.Text_document.apply_content_changes doc params.contentChanges in
forest.={uri} <- Document new_doc;
Lsp_state.modify (fun ({forest; _} as lsp_state) ->
let new_forest = Driver.run_until_done (Action.Parse lsp_uri) forest in
{lsp_state with forest = new_forest}
);
Diagnostics.compute new_doc