329 sealed case class CompletionItem( |
329 sealed case class CompletionItem( |
330 label: String, |
330 label: String, |
331 kind: Option[Int] = None, |
331 kind: Option[Int] = None, |
332 detail: Option[String] = None, |
332 detail: Option[String] = None, |
333 documentation: Option[String] = None, |
333 documentation: Option[String] = None, |
334 insertText: Option[String] = None, |
334 text: Option[String] = None, |
335 range: Option[Line.Range] = None, |
335 range: Option[Line.Range] = None, |
336 command: Option[Command] = None) |
336 command: Option[Command] = None) |
337 { |
337 { |
338 def json: JSON.T = |
338 def json: JSON.T = |
339 Map("label" -> label) ++ |
339 Map("label" -> label) ++ |
340 JSON.optional("kind" -> kind) ++ |
340 JSON.optional("kind" -> kind) ++ |
341 JSON.optional("detail" -> detail) ++ |
341 JSON.optional("detail" -> detail) ++ |
342 JSON.optional("documentation" -> documentation) ++ |
342 JSON.optional("documentation" -> documentation) ++ |
343 JSON.optional("insertText" -> insertText) ++ |
343 JSON.optional("insertText" -> text) ++ |
344 JSON.optional("range" -> range.map(Range(_))) ++ |
344 JSON.optional("range" -> range.map(Range(_))) ++ |
345 JSON.optional("textEdit" -> |
345 JSON.optional("textEdit" -> |
346 range.map(r => Map("range" -> Range(r), "newText" -> insertText.getOrElse(label)))) ++ |
346 range.map(r => Map("range" -> Range(r), "newText" -> text.getOrElse(label)))) ++ |
347 JSON.optional("command" -> command.map(_.json)) |
347 JSON.optional("command" -> command.map(_.json)) |
348 } |
348 } |
349 |
349 |
350 object Completion extends RequestTextDocumentPosition("textDocument/completion") |
350 object Completion extends RequestTextDocumentPosition("textDocument/completion") |
351 { |
351 { |