Skip to content

Commit f65b02b

Browse files
committed
fix: adapt to new api after rebase
1 parent 54298bb commit f65b02b

File tree

5 files changed

+46
-29
lines changed

5 files changed

+46
-29
lines changed

language-server/dm/document.ml

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ type parse_state = {
107107
loc: Loc.t option;
108108
synterp_state : Vernacstate.Synterp.t;
109109
stream: (unit, char) Gramlib.Stream.t;
110-
raw: RawDocument.t;
110+
raw: RawDocument.t option;
111111
parsed: pre_sentence list;
112112
errors: parsing_error list;
113113
parsed_comments: comment list;
@@ -522,15 +522,15 @@ let handle_parse_error start msg qf ({stream; errors;} as parse_state) =
522522
let errors = parsing_error :: errors in
523523
let parse_state = {parse_state with errors} in
524524
(* TODO: we could count the \n between start and stop and increase Loc.line_nb *)
525-
create_parsing_event (ParseEvent parse_state)
525+
ParseEvent parse_state
526526

527527
let handle_parse_more ({loc; synterp_state; stream; raw; parsed; parsed_comments} as parse_state) =
528528
let start = Stream.count stream in
529529
log @@ "Start of parse is: " ^ (string_of_int start);
530530
begin
531531
(* FIXME should we save lexer state? *)
532532
match parse_one_sentence ?loc stream ~st:synterp_state with
533-
| None, _ (* EOI *) -> create_parsing_event (Invalidate parse_state)
533+
| None, _ (* EOI *) -> Invalidate parse_state
534534
| Some ast, comments ->
535535
let stop = Stream.count stream in
536536
log @@ "Parsed: " ^ (Pp.string_of_ppcmds @@ Ppvernac.pr_vernac ast);
@@ -539,13 +539,14 @@ let handle_parse_more ({loc; synterp_state; stream; raw; parsed; parsed_comments
539539
| Some lc -> lc.line_nb, lc.bp, lc.ep
540540
| None -> assert false
541541
in
542-
let tokens = match raw with
543-
| None -> []
544-
| Some raw ->
545-
let str = String.sub (RawDocument.text raw) begin_char (end_char - begin_char) in
546-
let sstr = Stream.of_string str in
547-
let lex = CLexer.Lexer.tok_func sstr in
548-
stream_tok 0 [] lex begin_line begin_char in
542+
let tokens = match raw with
543+
| None -> []
544+
| Some raw ->
545+
let str = String.sub (RawDocument.text raw) begin_char (end_char - begin_char) in
546+
let sstr = Stream.of_string str in
547+
let lex = CLexer.Lexer.tok_func sstr in
548+
stream_tok 0 [] lex begin_line begin_char
549+
in
549550
begin
550551
try
551552
let entry = get_entry ast in
@@ -557,7 +558,7 @@ let handle_parse_more ({loc; synterp_state; stream; raw; parsed; parsed_comments
557558
let parsed_comments = List.append comments parsed_comments in
558559
let loc = ast.loc in
559560
let parse_state = {parse_state with parsed_comments; parsed; loc; synterp_state} in
560-
create_parsing_event (ParseEvent parse_state)
561+
ParseEvent parse_state
561562
with exn ->
562563
let e, info = Exninfo.capture exn in
563564
let loc = get_loc_from_info_or_exn e info in
@@ -639,7 +640,7 @@ let validate_document ({ parsed_loc; raw_doc; cancel_handle } as document) =
639640
while Stream.count stream < stop do Stream.junk () stream done;
640641
log @@ Format.sprintf "Parsing more from pos %i" stop;
641642
let started = Unix.gettimeofday () in
642-
let parsed_state = {stop; top_id;synterp_state; stream; raw=raw_doc; parsed=[]; errors=[]; parsed_comments=[]; loc=None; started; previous_document=document} in
643+
let parsed_state = {stop; top_id;synterp_state; stream; raw=(Some raw_doc); parsed=[]; errors=[]; parsed_comments=[]; loc=None; started; previous_document=document} in
643644
let priority = Some PriorityManager.parsing in
644645
let event = Sel.now ?priority (ParseEvent parsed_state) in
645646
let cancel_handle = Some (Sel.Event.get_cancellation_handle event) in
@@ -672,19 +673,29 @@ let handle_invalidate {parsed; errors; parsed_comments; stop; top_id; started; p
672673
let handle_event document = function
673674
| ParseEvent state ->
674675
let event = handle_parse_more state in
676+
let event = create_parsing_event event in
675677
let cancel_handle = Some (Sel.Event.get_cancellation_handle event) in
676678
{document with cancel_handle}, [event], None
677679
| Invalidate state -> {document with cancel_handle=None}, [], handle_invalidate state document
678680

681+
let rec parse_full = function
682+
| ParseEvent state ->
683+
let event = handle_parse_more state in
684+
parse_full event
685+
| Invalidate state ->
686+
state
687+
679688
let parse_text_at_loc loc text document =
680-
let (_, synterp_state, scheduler_state) = state_strictly_before document loc in
689+
let top_id = Option.map (fun sentence -> sentence.id) (find_sentence_strictly_before document loc) in
690+
let (stop, synterp_state, scheduler_state) = state_strictly_before document loc in
681691
let stream = Stream.of_string text in
682-
let new_sentences, _ = parse_more synterp_state stream None in
692+
let parsed_state = {synterp_state; started = Unix.gettimeofday (); top_id; stream; raw=None; loc=None; errors=[]; parsed=[]; parsed_comments=[]; previous_document=document; stop} in
693+
let {parsed} = parse_full (ParseEvent parsed_state) in
683694
let add_sentence (sentences, schedule, scheduler_state) ({ parsing_start; start; stop; ast; synterp_state } : pre_sentence) =
684695
let added_sentence, schedule, schedule_state = pre_sentence_to_sentence parsing_start start stop ast synterp_state scheduler_state schedule in
685696
sentences @ [added_sentence], schedule, schedule_state
686697
in
687-
let sentences, schedule, _ = List.fold_left add_sentence ([],document.schedule, scheduler_state) new_sentences in
698+
let sentences, schedule, _ = List.fold_left add_sentence ([],document.schedule, scheduler_state) parsed in
688699
sentences, schedule
689700

690701
let create_document init_synterp_state text =

language-server/dm/documentManager.ml

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -317,22 +317,27 @@ let observe ~background state id ~should_block_on_error : (state * event Sel.Eve
317317
{state with execution_state}, events
318318

319319
let reset_to_top st = { st with observe_id = Top }
320+
320321
let coq_pilot_observe st position text =
321322
let loc = RawDocument.loc_of_position (Document.raw_document st.document) position in
322323
match Document.find_sentence_before st.document loc with
323324
| None -> log @@ "COQ PILOT ON NON VALID POSITION"; [] (* HANDLE ERROR *)
324325
| Some {id} ->
325326
let sentences, sch = Document.parse_text_at_loc loc text st.document in
326-
let vst_for_next_todo, todo = ExecutionManager.build_tasks_for (Document.schedule st.document) st.execution_state id in
327-
let more_todo = ExecutionManager.build_tasks_for_sentences sch sentences in
328-
let execute_task (execution_state, vst_for_next_todo) task =
329-
let (execution_state,vst_for_next_todo,_events,_interrupted) =
330-
ExecutionManager.execute execution_state (vst_for_next_todo, [], false) task in
331-
execution_state, vst_for_next_todo
327+
let vst_for_next_todo, execution_state, task, _ = ExecutionManager.build_tasks_for st.document (Document.schedule st.document) st.execution_state id false in
328+
let execution_state = ExecutionManager.build_tasks_for_sentences execution_state sch sentences in
329+
let rec execute_task execution_state vst_for_next_todo task =
330+
match task with
331+
| None -> execution_state, vst_for_next_todo
332+
| Some task ->
333+
let (next, execution_state,vst_for_next_todo,_events,_interrupted) =
334+
ExecutionManager.execute execution_state st.document (vst_for_next_todo, [], false) task false in
335+
execute_task execution_state vst_for_next_todo next
332336
in
333-
let execution_state, _ = List.fold_left execute_task (st.execution_state, vst_for_next_todo) (todo @ more_todo) in
337+
let execution_state, _ = execute_task execution_state vst_for_next_todo task in
334338
let all_errors = ExecutionManager.all_errors execution_state in (* TODO: RETURN ONLY THE NEW ERRORS *)
335-
List.map (fun e -> Pp.string_of_ppcmds @@ snd (snd e)) all_errors
339+
let get_pp_error (_, (_, pp, _)) = pp in
340+
List.map (fun e -> Pp.string_of_ppcmds @@ get_pp_error e) all_errors
336341

337342
let get_document_proofs st =
338343
let outline = Document.outline st.document in

language-server/dm/executionManager.ml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -710,9 +710,10 @@ let build_tasks_for document sch st id block =
710710
| Some id, true ->
711711
vs, {st with todo=[]}, None, Some id
712712

713-
let build_tasks_for_sentences sch sentences =
713+
let build_tasks_for_sentences st sch sentences =
714714
let tasks = List.map (fun ({id}: Document.sentence) -> snd @@ task_for_sentence sch id) sentences in
715-
List.concat_map prepare_task tasks
715+
let todo = List.concat_map prepare_task tasks in
716+
{st with todo}
716717

717718
let all_errors st =
718719
List.fold_left (fun acc (id, (p,_)) ->

language-server/dm/executionManager.mli

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ val handle_event : event -> state -> (sentence_id option * state option * events
7474
(** Execution happens in two steps. In particular the event one takes only
7575
one task at a time to ease checking for interruption *)
7676
type prepared_task
77-
val build_tasks_for : Document.document -> Scheduler.schedule -> state -> sentence_id -> bool -> Vernacstate.t * state * prepared_task option * errored_sentence
78-
val build_tasks_for_sentences : Scheduler.schedule -> Document.sentence list -> prepared_task list
77+
val build_tasks_for : Document.document -> Scheduler.schedule -> state -> sentence_id -> bool -> Vernacstate.t * state * prepared_task option * sentence_id option
78+
val build_tasks_for_sentences : state -> Scheduler.schedule -> Document.sentence list -> state
7979
val execute : state -> Document.document -> Vernacstate.t * events * bool -> prepared_task -> bool -> (prepared_task option * state * Vernacstate.t * events * errored_sentence)
8080

8181
(* val update_overview : prepared_task -> prepared_task list -> state -> Document.document -> state

language-server/vscoqtop/lspManager.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -562,8 +562,8 @@ let sendCoqPilotResult id params =
562562
let Request.Client.CoqPilotParams.{ textDocument; position; text} = params in
563563
let uri = textDocument.uri in
564564
match Hashtbl.find_opt states (DocumentUri.to_path uri) with
565-
| None -> log @@ "[coqPilotResult] ignoring event on non existant document"; Error("Document does not exist"), []
566-
| Some st ->
565+
| None -> log @@ "[coqPilotResult] ignoring event on non existant document"; Error({message="Document does not exist"; code=None}), []
566+
| Some { st } ->
567567
let errors = Dm.DocumentManager.coq_pilot_observe st position text in
568568
log "Sending errors for coqpilot request:";
569569
List.iter (fun e -> log e) errors;

0 commit comments

Comments
 (0)