clarified signature and protocol (again);
authorwenzelm
Mon, 27 Oct 2025 16:20:06 +0100
changeset 83421 2740ae774d80
parent 83420 12133413a571
child 83422 31aceecbd3f2
clarified signature and protocol (again);
src/Tools/VSCode/extension/media/sledgehammer.js
src/Tools/VSCode/extension/src/extension.ts
src/Tools/VSCode/extension/src/lsp.ts
src/Tools/VSCode/extension/src/sledgehammer_panel.ts
src/Tools/VSCode/src/language_server.scala
src/Tools/VSCode/src/lsp.scala
src/Tools/VSCode/src/vscode_sledgehammer.scala
--- a/src/Tools/VSCode/extension/media/sledgehammer.js	Mon Oct 27 15:45:06 2025 +0100
+++ b/src/Tools/VSCode/extension/media/sledgehammer.js	Mon Oct 27 16:20:06 2025 +0100
@@ -247,15 +247,8 @@
             else if (node.nodeName.toLowerCase() === "sendback") {
               const button = document.createElement("button");
               button.textContent = node.textContent.trim();
-              button.addEventListener("click", () => {
-                vscode.postMessage({
-                  command: "insert_text",
-                  provers: provers_input.value,
-                  isar: isar_checkbox.checked,
-                  try0: try0_checkbox.checked,
-                  text: node.textContent.trim()
-                });
-              });
+              button.addEventListener("click", () =>
+                vscode.postMessage({ command: "insert", text: node.textContent.trim() }));
               div.appendChild(button);
             }
             else {
--- a/src/Tools/VSCode/extension/src/extension.ts	Mon Oct 27 15:45:06 2025 +0100
+++ b/src/Tools/VSCode/extension/src/extension.ts	Mon Oct 27 16:20:06 2025 +0100
@@ -236,10 +236,10 @@
     language_client.onReady().then(() => sledgehammer_provider.request_provers(language_client))
 
     language_client.onReady().then(() => {
-      language_client.onNotification(lsp.sledgehammer_status_response_type, msg =>
+      language_client.onNotification(lsp.sledgehammer_status_type, msg =>
         sledgehammer_provider.update_status(msg.message))
-      language_client.onNotification(lsp.sledgehammer_apply_response_type, msg =>
-        sledgehammer_provider.updateResult(msg))
+      language_client.onNotification(lsp.sledgehammer_output_type, msg =>
+        sledgehammer_provider.update_output(msg))
       language_client.onNotification(lsp.sledgehammer_insert_position_response_type, msg =>
         sledgehammer_provider.insert(msg.position))
       language_client.onNotification(lsp.sledgehammer_provers_response_type, msg =>
--- a/src/Tools/VSCode/extension/src/lsp.ts	Mon Oct 27 15:45:06 2025 +0100
+++ b/src/Tools/VSCode/extension/src/lsp.ts	Mon Oct 27 16:20:06 2025 +0100
@@ -189,14 +189,17 @@
 
 /* Sledgehammer */
 
-export interface SledgehammerApplyRequest {
+export interface Sledgehammer_Request {
   provers: string;
   isar: boolean;
   try0: boolean;
-  purpose: number;
 }
 
-export interface SledgehammerApplyResult {
+export interface Sledgehammer_Status {
+  message: string;
+}
+
+export interface Sledgehammer_Output {
   content: string;
   position: {
     uri: string;
@@ -219,16 +222,12 @@
   };
 }
 
-export interface Sledgehammer_Status {
-  message: string;
-}
-
 export interface Sledgehammer_Provers {
   provers: string;
 }
 
 export const sledgehammer_request_type =
-  new NotificationType<SledgehammerApplyRequest>("PIDE/sledgehammer_request");
+  new NotificationType<Sledgehammer_Request>("PIDE/sledgehammer_request");
 
 export const sledgehammer_cancel_type =
   new NotificationType<void>("PIDE/sledgehammer_cancel");
@@ -236,17 +235,20 @@
 export const sledgehammer_locate_type =
   new NotificationType<void>("PIDE/sledgehammer_locate");
 
+export const sledgehammer_insert_type =
+  new NotificationType<void>("PIDE/sledgehammer_insert");
+
 export const sledgehammer_provers_request_type =
   new NotificationType<void>("PIDE/sledgehammer_provers_request");
 
 export const sledgehammer_provers_response_type =
   new NotificationType<Sledgehammer_Provers>("PIDE/sledgehammer_provers_response");
 
-export const sledgehammer_status_response_type =
-  new NotificationType<Sledgehammer_Status>("PIDE/sledgehammer_status_response");
+export const sledgehammer_status_type =
+  new NotificationType<Sledgehammer_Status>("PIDE/sledgehammer_status");
 
-export const sledgehammer_apply_response_type =
-  new NotificationType<SledgehammerApplyResult>("PIDE/sledgehammer_apply_response");
+export const sledgehammer_output_type =
+  new NotificationType<Sledgehammer_Output>("PIDE/sledgehammer_output");
 
 export const sledgehammer_insert_position_response_type =
   new NotificationType<SledgehammerInsertPosition>("PIDE/sledgehammer_insert_position_response");
--- a/src/Tools/VSCode/extension/src/sledgehammer_panel.ts	Mon Oct 27 15:45:06 2025 +0100
+++ b/src/Tools/VSCode/extension/src/sledgehammer_panel.ts	Mon Oct 27 16:20:06 2025 +0100
@@ -59,8 +59,7 @@
           this._language_client.sendNotification(lsp.sledgehammer_request_type, {
             provers: message.provers,
             isar: message.isar,
-            try0: message.try0,
-            purpose: 1
+            try0: message.try0
           });
           break;
         case "cancel":
@@ -69,13 +68,8 @@
         case "locate":
           this._language_client.sendNotification(lsp.sledgehammer_locate_type);
           break;
-        case "insert_text":
-          this._language_client.sendNotification(lsp.sledgehammer_request_type, {
-            provers: message.provers,
-            isar: message.isar,
-            try0: message.try0,
-            purpose: 3
-          });
+        case "insert":
+          this._language_client.sendNotification(lsp.sledgehammer_insert_type);
           this.text_to_insert = message.text;
           break;
       }
@@ -123,7 +117,7 @@
   }
 
 
-  public updateResult(result: lsp.SledgehammerApplyResult): void {
+  public update_output(result: lsp.Sledgehammer_Output): void {
     const editor = window.activeTextEditor;
     const lineText = editor?.document.lineAt(result.position.line).text ?? "";
     this._lastResultPosition = {
--- a/src/Tools/VSCode/src/language_server.scala	Mon Oct 27 15:45:06 2025 +0100
+++ b/src/Tools/VSCode/src/language_server.scala	Mon Oct 27 16:20:06 2025 +0100
@@ -549,10 +549,11 @@
           case LSP.Preview_Request(file, column) => preview_request(file, column)
           case LSP.Symbols_Panel_Request => symbols_panel_request()
           case LSP.Documentation_Request => documentation_request()
-          case LSP.Sledgehammer_Request(provers, isar, try0, purpose) =>
-            sledgehammer.handle_request(provers, isar, try0, purpose)
+          case LSP.Sledgehammer_Request(provers, isar, try0) =>
+            sledgehammer.handle_request(provers, isar, try0)
           case LSP.Sledgehammer_Cancel(()) => sledgehammer.cancel()
           case LSP.Sledgehammer_Locate(()) => sledgehammer.locate()
+          case LSP.Sledgehammer_Insert(()) => sledgehammer.insert()
           case LSP.Sledgehammer_Provers_Request(()) => sledgehammer.send_provers()
           case _ => if (!LSP.ResponseMessage.is_empty(json)) log("### IGNORED")
         }
--- a/src/Tools/VSCode/src/lsp.scala	Mon Oct 27 15:45:06 2025 +0100
+++ b/src/Tools/VSCode/src/lsp.scala	Mon Oct 27 16:20:06 2025 +0100
@@ -808,32 +808,33 @@
   }
 
   object Sledgehammer_Request {
-    def unapply(json: JSON.T): Option[(String, Boolean, Boolean, Int)] =
+    def unapply(json: JSON.T): Option[(String, Boolean, Boolean)] =
       json match {
         case Notification("PIDE/sledgehammer_request", Some(params)) =>
           for {
             provers <- JSON.string(params, "provers")
             isar <- JSON.bool(params, "isar")
             try0 <- JSON.bool(params, "try0")
-            purpose <- JSON.int_default(params, "purpose", 1)
-          } yield (provers, isar, try0, purpose)
+          } yield (provers, isar, try0)
         case _ => None
       }
   }
 
+  object Sledgehammer_Status {
+    def apply(message: String): JSON.T =
+      Notification("PIDE/sledgehammer_status", JSON.Object("message" -> message))
+  }
+
+  object Sledgehammer_Output {
+    def apply(json: JSON.Object.T): JSON.T =
+      Notification("PIDE/sledgehammer_output", json)
+  }
+
   object Sledgehammer_Cancel extends Notification0("PIDE/sledgehammer_cancel")
 
   object Sledgehammer_Locate extends Notification0("PIDE/sledgehammer_locate")
 
-  object Sledgehammer_Status_Response {
-    def apply(message: String): JSON.T =
-      Notification("PIDE/sledgehammer_status_response", JSON.Object("message" -> message))
-  }
-
-  object Sledgehammer_Apply_Response {
-    def apply(json: JSON.Object.T): JSON.T =
-      Notification("PIDE/sledgehammer_apply_response", json)
-  }
+  object Sledgehammer_Insert extends Notification0("PIDE/sledgehammer_insert")
 
   object Sledgehammer_Insert_Position_Response {
     def apply(json: JSON.Object.T): JSON.T =
--- a/src/Tools/VSCode/src/vscode_sledgehammer.scala	Mon Oct 27 15:45:06 2025 +0100
+++ b/src/Tools/VSCode/src/vscode_sledgehammer.scala	Mon Oct 27 16:20:06 2025 +0100
@@ -29,22 +29,16 @@
     server.channel.write(LSP.Sledgehammer_Provers_Response.apply(provers))
   }
 
-  def handle_request(provers: String, isar: Boolean, try0: Boolean, purpose: Int): Unit = {
-    purpose match {
-      case 1 =>
-        server.resources.get_caret() match {
-          case Some(caret) =>
-            val snapshot = server.resources.snapshot(caret.model)
-            val uri = Url.print_file(caret.file)
-            server.editor.send_dispatcher {
-              query_operation.apply_query(List(provers, isar.toString, try0.toString))
-            }
-          case None => server.channel.write(LSP.Sledgehammer_No_Proof_Response())
+  def handle_request(provers: String, isar: Boolean, try0: Boolean): Unit =
+    server.resources.get_caret() match {
+      case Some(caret) =>
+        val snapshot = server.resources.snapshot(caret.model)
+        val uri = Url.print_file(caret.file)
+        server.editor.send_dispatcher {
+          query_operation.apply_query(List(provers, isar.toString, try0.toString))
         }
-      case 3 => insert_query()
-      case _ =>
+      case None => server.channel.write(LSP.Sledgehammer_No_Proof_Response())
     }
-  }
 
   private def consume_status(status: Query_Operation.Status): Unit = {
     val msg =
@@ -53,7 +47,7 @@
         case Query_Operation.Status.running => "Sledgehammering ..."
         case Query_Operation.Status.finished => "Finished"
       }
-    server.channel.write(LSP.Sledgehammer_Status_Response(msg))
+    server.channel.write(LSP.Sledgehammer_Status(msg))
   }
 
   private def extract_sendback_id(body: List[XML.Elem]): Option[Int] = {
@@ -143,10 +137,10 @@
         "line" -> query_position._2,
         "character" -> query_position._3)
     )
-    server.channel.write(LSP.Sledgehammer_Apply_Response(json))
+    server.channel.write(LSP.Sledgehammer_Output(json))
   }
 
-  def insert_query(): Unit = {
+  def insert(): Unit = {
     last_sendback_id match {
       case Some(sendback_id) =>
         val models = server.resources.get_models()