src/Tools/VSCode/src/language_server.scala
changeset 83363 486e094b676c
parent 82987 1143c65b5829
child 83364 1d85e55bbc14
--- a/src/Tools/VSCode/src/language_server.scala	Thu Oct 23 14:49:21 2025 +0200
+++ b/src/Tools/VSCode/src/language_server.scala	Thu Oct 23 16:15:40 2025 +0200
@@ -14,7 +14,7 @@
 import isabelle._
 
 import java.io.{PrintStream, OutputStream, File => JFile}
-
+import isabelle.vscode.Sledgehammer_Panel
 import scala.annotation.tailrec
 
 
@@ -117,6 +117,7 @@
   private val session_ = Synchronized(None: Option[VSCode_Session])
   def session: VSCode_Session = session_.value getOrElse error("Server inactive")
   def resources: VSCode_Resources = session.resources
+  private val sledgehammer_panel = Sledgehammer_Panel(this)
 
   def rendering_offset(node_pos: Line.Node_Position): Option[(VSCode_Rendering, Text.Offset)] =
     for {
@@ -296,6 +297,7 @@
       session.syslog_messages += syslog_messages
 
       dynamic_output.init()
+      sledgehammer_panel.init()
 
       try {
         Isabelle_Process.start(
@@ -324,6 +326,7 @@
         delay_output.revoke()
         delay_caret_update.revoke()
         delay_preview.revoke()
+        sledgehammer_panel.exit()
 
         val result = session.stop()
         if (result.ok) reply("")
@@ -487,6 +490,20 @@
     channel.write(LSP.Symbols_Convert_Request.reply(id, converted))
   }
 
+  def symbols_panel_request(init: Boolean): Unit = {
+    val abbrevs =
+      resources.get_caret().flatMap { caret =>
+        resources.get_model(caret.file).map(_.syntax().abbrevs)
+      }.getOrElse(session.resources.session_base.overall_syntax.abbrevs)
+
+    channel.write(LSP.Symbols_Response(Symbol.symbols, abbrevs))
+  }
+
+
+  def documentation_request(init: Boolean): Unit = {
+    channel.write(LSP.Documentation_Response())
+  }
+
 
   /* main loop */
 
@@ -530,6 +547,12 @@
           case LSP.Symbols_Convert_Request(id, text, boolean) =>
             symbols_convert_request(id, text, boolean)
           case LSP.Preview_Request(file, column) => preview_request(file, column)
+          case LSP.Symbols_Panel_Request(init) => symbols_panel_request(init)
+          case LSP.Documentation_Request(init) => documentation_request(init)
+          case LSP.Sledgehammer_Request(provers, isar, try0, purpose) => sledgehammer_panel.handle_request(provers, isar, try0, purpose)
+          case LSP.Sledgehammer_Cancel => sledgehammer_panel.cancel_query()
+          case LSP.Sledgehammer_Provers(init) => sledgehammer_panel.send_provers_and_history(init)
+          case LSP.Sledgehammer_Delete_Prover(entry) => sledgehammer_panel.handle_sledgehammer_delete(entry)
           case _ => if (!LSP.ResponseMessage.is_empty(json)) log("### IGNORED")
         }
       }