Skip to content

Commit fd598e6

Browse files
authored
Merge pull request #1014 from coq/continuous-mode-reg
Send a proof view in continuous mode when cursor position was executed
2 parents 95068b8 + a023b48 commit fd598e6

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

language-server/dm/documentManager.ml

+14-1
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,19 @@ let execution_finished st id started =
554554

555555
let execute st id vst_for_next_todo started task background block =
556556
let time = Unix.gettimeofday () -. started in
557+
let proof_view_event = (*When in continuous mode we always check if we should update the goal view *)
558+
if background then begin
559+
match st.observe_id with
560+
| Top -> []
561+
| Id o_id ->
562+
let s_id = ExecutionManager.get_id_of_executed_task task in
563+
if o_id = s_id then
564+
[mk_proof_view_event s_id]
565+
else []
566+
end
567+
else
568+
[]
569+
in
557570
match Document.get_sentence st.document id with
558571
| None ->
559572
log (Printf.sprintf "ExecuteToLoc %d stops after %2.3f, sentences invalidated" (Stateid.to_int id) time);
@@ -578,7 +591,7 @@ let execute st id vst_for_next_todo started task background block =
578591
let event = Option.cata (fun event -> [event]) [] event in
579592
let state = Some {st with execution_state; cancel_handle} in
580593
let update_view = true in
581-
let events = inject_em_events events @ block_events @ event in
594+
let events = proof_view_event @ inject_em_events events @ block_events @ event in
582595
{state; events; update_view; notification=None}
583596

584597
let get_proof st diff_mode id =

language-server/dm/executionManager.ml

+8
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ type state = {
9797
overview: exec_overview;
9898
}
9999

100+
let get_id_of_executed_task task =
101+
match task with
102+
| PSkip {id} -> id
103+
| PBlock {id} -> id
104+
| PExec {id} -> id
105+
| PQuery {id} -> id
106+
| PDelegate {terminator_id} -> terminator_id
107+
100108
let print_exec_overview overview =
101109
let {processing; processed; prepared } = overview in
102110
log @@ "--------- Prepared ranges ---------";

language-server/dm/executionManager.mli

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ type errored_sentence = (sentence_id * Loc.t option) option
4141
type feedback_message = Feedback.level * Loc.t option * Quickfix.t list * Pp.t
4242

4343
val pr_event : event -> Pp.t
44-
4544
val init : Vernacstate.t -> state * event Sel.Event.t
4645
val destroy : state -> unit
4746

@@ -74,6 +73,7 @@ val handle_event : event -> state -> (sentence_id option * state option * events
7473
(** Execution happens in two steps. In particular the event one takes only
7574
one task at a time to ease checking for interruption *)
7675
type prepared_task
76+
val get_id_of_executed_task : prepared_task -> sentence_id
7777
val build_tasks_for : Document.document -> Scheduler.schedule -> state -> sentence_id -> bool -> Vernacstate.t * state * prepared_task option * errored_sentence
7878
val execute : state -> Document.document -> Vernacstate.t * events * bool -> prepared_task -> bool -> (prepared_task option * state * Vernacstate.t * events * errored_sentence)
7979

0 commit comments

Comments
 (0)