diff --git a/language-server/dm/document.ml b/language-server/dm/document.ml index b19bd1d8..f78f3882 100644 --- a/language-server/dm/document.ml +++ b/language-server/dm/document.ml @@ -92,6 +92,7 @@ type document = { sentences_by_end : sentence LM.t; parsing_errors_by_end : parsing_error LM.t; comments_by_end : comment LM.t; + hover_info : HoverInfo.t; schedule : Scheduler.schedule; outline : outline; parsed_loc : int; @@ -612,6 +613,11 @@ let invalidate top_edit top_id parsed_doc new_sentences = let invalid_ids, doc = invalidate_diff parsed_doc scheduler_state Stateid.Set.empty diff in unchanged_id, invalid_ids, doc +let shift_hover_info document ~from ~amount = + let {hover_info} = document in + let hover_info = HoverInfo.shift hover_info ~from ~amount in + {document with hover_info} + (** Validate document when raw text has changed *) let validate_document ({ parsed_loc; raw_doc; cancel_handle } as document) = (* Cancel any previous parsing event *) @@ -676,6 +682,7 @@ let create_document init_synterp_state text = outline = []; init_synterp_state; cancel_handle = None; + hover_info = HoverInfo.empty (); } let apply_text_edit document edit = diff --git a/language-server/dm/document.mli b/language-server/dm/document.mli index 43cf83f8..a8d7fb76 100644 --- a/language-server/dm/document.mli +++ b/language-server/dm/document.mli @@ -61,6 +61,8 @@ val raw_document : document -> RawDocument.t val outline : document -> outline +val shift_hover_info : document -> from:int -> amount:int -> document + val create_document : Vernacstate.Synterp.t -> string -> document (** [create_document init_synterp_state text] creates a fresh document with content defined by [text] under [init_synterp_state]. *) diff --git a/language-server/dm/documentManager.ml b/language-server/dm/documentManager.ml index ea7a9ae5..77710ab4 100644 --- a/language-server/dm/documentManager.ml +++ b/language-server/dm/documentManager.ml @@ -537,6 +537,7 @@ let apply_text_edits state edits = let edit_length = edit_stop - edit_start in let exec_st = ExecutionManager.shift_diagnostics_locs exec_st ~start:edit_stop ~offset:(String.length new_text - edit_length) in let execution_state = ExecutionManager.shift_overview exec_st ~before:(Document.raw_document state.document) ~after:(Document.raw_document document) ~start:edit_stop ~offset:(String.length new_text - edit_length) in + let document = Document.shift_hover_info document ~from:edit_stop ~amount:(String.length new_text - edit_length) in {state with execution_state; document} in let state = List.fold_left apply_edit_and_shift_diagnostics_locs_and_overview state edits in