src/Tools/VSCode/src/protocol.scala
changeset 64648 5d7f741aaccb
parent 64605 9c1173a7e4cb
child 64649 d67c3094a0c2
equal deleted inserted replaced
64647:bbfcef118acb 64648:5d7f741aaccb
    74   class Request0(name: String)
    74   class Request0(name: String)
    75   {
    75   {
    76     def unapply(json: JSON.T): Option[Id] =
    76     def unapply(json: JSON.T): Option[Id] =
    77       json match {
    77       json match {
    78         case RequestMessage(id, method, _) if method == name => Some(id)
    78         case RequestMessage(id, method, _) if method == name => Some(id)
       
    79         case _ => None
       
    80       }
       
    81   }
       
    82 
       
    83   class RequestTextDocumentPosition(name: String)
       
    84   {
       
    85     def unapply(json: JSON.T): Option[(Id, String, Line.Position)] =
       
    86       json match {
       
    87         case RequestMessage(id, method, Some(TextDocumentPosition(uri, pos))) if method == name =>
       
    88           Some((id, uri, pos))
    79         case _ => None
    89         case _ => None
    80       }
    90       }
    81   }
    91   }
    82 
    92 
    83 
    93 
   123   }
   133   }
   124 
   134 
   125   object ServerCapabilities
   135   object ServerCapabilities
   126   {
   136   {
   127     val json: JSON.T =
   137     val json: JSON.T =
   128       Map("textDocumentSync" -> 1, "hoverProvider" -> true)
   138       Map(
       
   139         "textDocumentSync" -> 1,
       
   140         "hoverProvider" -> true,
       
   141         "definitionProvider" -> true)
   129   }
   142   }
   130 
   143 
   131   object Shutdown extends Request0("shutdown")
   144   object Shutdown extends Request0("shutdown")
   132   {
   145   {
   133     def reply(id: Id, error: String): JSON.T =
   146     def reply(id: Id, error: String): JSON.T =
   275   object DidSaveTextDocument extends TextDocumentNotification("textDocument/didSave")
   288   object DidSaveTextDocument extends TextDocumentNotification("textDocument/didSave")
   276 
   289 
   277 
   290 
   278   /* hover request */
   291   /* hover request */
   279 
   292 
   280   object Hover
   293   object Hover extends RequestTextDocumentPosition("textDocument/hover")
   281   {
   294   {
   282     def unapply(json: JSON.T): Option[(Id, String, Line.Position)] =
       
   283       json match {
       
   284         case RequestMessage(id, "textDocument/hover", Some(TextDocumentPosition(uri, pos))) =>
       
   285           Some((id, uri, pos))
       
   286         case _ => None
       
   287       }
       
   288 
       
   289     def reply(id: Id, result: Option[(Line.Range, List[String])]): JSON.T =
   295     def reply(id: Id, result: Option[(Line.Range, List[String])]): JSON.T =
   290     {
   296     {
   291       val res =
   297       val res =
   292         result match {
   298         result match {
   293           case Some((range, contents)) => Map("contents" -> contents, "range" -> Range(range))
   299           case Some((range, contents)) => Map("contents" -> contents, "range" -> Range(range))
   294           case None => Map("contents" -> Nil)
   300           case None => Map("contents" -> Nil)
   295         }
   301         }
   296       ResponseMessage(id, Some(res))
   302       ResponseMessage(id, Some(res))
   297     }
   303     }
   298   }
   304   }
       
   305 
       
   306 
       
   307   /* goto definition request */
       
   308 
       
   309   object GotoDefinition extends RequestTextDocumentPosition("textDocument/definition")
       
   310   {
       
   311     def reply(id: Id, result: List[(String, Line.Range)]): JSON.T =
       
   312       ResponseMessage(id, Some(result.map({ case (uri, range) => Location.apply(uri, range) })))
       
   313   }
   299 }
   314 }