src/Tools/VSCode/src/protocol.scala
changeset 64649 d67c3094a0c2
parent 64648 5d7f741aaccb
child 64651 ea5620f7b0d8
equal deleted inserted replaced
64648:5d7f741aaccb 64649:d67c3094a0c2
    80       }
    80       }
    81   }
    81   }
    82 
    82 
    83   class RequestTextDocumentPosition(name: String)
    83   class RequestTextDocumentPosition(name: String)
    84   {
    84   {
    85     def unapply(json: JSON.T): Option[(Id, String, Line.Position)] =
    85     def unapply(json: JSON.T): Option[(Id, Line.Position_Node)] =
    86       json match {
    86       json match {
    87         case RequestMessage(id, method, Some(TextDocumentPosition(uri, pos))) if method == name =>
    87         case RequestMessage(id, method, Some(TextDocumentPosition(pos_node))) if method == name =>
    88           Some((id, uri, pos))
    88           Some((id, pos_node))
    89         case _ => None
    89         case _ => None
    90       }
    90       }
    91   }
    91   }
    92 
    92 
    93 
    93 
   176       }
   176       }
   177   }
   177   }
   178 
   178 
   179   object Location
   179   object Location
   180   {
   180   {
   181     def apply(uri: String, range: Line.Range): JSON.T =
   181     def apply(loc: Line.Range_Node): JSON.T =
   182       Map("uri" -> uri, "range" -> Range(range))
   182       Map("uri" -> loc.name, "range" -> Range(loc.range))
   183 
   183 
   184     def unapply(json: JSON.T): Option[(String, Line.Range)] =
   184     def unapply(json: JSON.T): Option[Line.Range_Node] =
   185       for {
   185       for {
   186         uri <- JSON.string(json, "uri")
   186         uri <- JSON.string(json, "uri")
   187         range_json <- JSON.value(json, "range")
   187         range_json <- JSON.value(json, "range")
   188         range <- Range.unapply(range_json)
   188         range <- Range.unapply(range_json)
   189       } yield (uri, range)
   189       } yield Line.Range_Node(range, uri)
   190   }
   190   }
   191 
   191 
   192   object TextDocumentPosition
   192   object TextDocumentPosition
   193   {
   193   {
   194     def unapply(json: JSON.T): Option[(String, Line.Position)] =
   194     def unapply(json: JSON.T): Option[Line.Position_Node] =
   195       for {
   195       for {
   196         doc <- JSON.value(json, "textDocument")
   196         doc <- JSON.value(json, "textDocument")
   197         uri <- JSON.string(doc, "uri")
   197         uri <- JSON.string(doc, "uri")
   198         pos_json <- JSON.value(json, "position")
   198         pos_json <- JSON.value(json, "position")
   199         pos <- Position.unapply(pos_json)
   199         pos <- Position.unapply(pos_json)
   200       } yield (uri, pos)
   200       } yield Line.Position_Node(pos, uri)
   201   }
   201   }
   202 
   202 
   203 
   203 
   204   /* diagnostic messages */
   204   /* diagnostic messages */
   205 
   205 
   306 
   306 
   307   /* goto definition request */
   307   /* goto definition request */
   308 
   308 
   309   object GotoDefinition extends RequestTextDocumentPosition("textDocument/definition")
   309   object GotoDefinition extends RequestTextDocumentPosition("textDocument/definition")
   310   {
   310   {
   311     def reply(id: Id, result: List[(String, Line.Range)]): JSON.T =
   311     def reply(id: Id, result: List[Line.Range_Node]): JSON.T =
   312       ResponseMessage(id, Some(result.map({ case (uri, range) => Location.apply(uri, range) })))
   312       ResponseMessage(id, Some(result.map(Location.apply(_))))
   313   }
   313   }
   314 }
   314 }