src/Tools/VSCode/src/server.scala
changeset 64683 c0c09b6dfbe0
parent 64682 7e119f32276a
child 64684 fe2c9c215b36
equal deleted inserted replaced
64682:7e119f32276a 64683:c0c09b6dfbe0
   109 
   109 
   110   def rendering_offset(node_pos: Line.Node_Position): Option[(VSCode_Rendering, Text.Offset)] =
   110   def rendering_offset(node_pos: Line.Node_Position): Option[(VSCode_Rendering, Text.Offset)] =
   111     for {
   111     for {
   112       model <- state.value.models.get(node_pos.name)
   112       model <- state.value.models.get(node_pos.name)
   113       rendering = model.rendering(options)
   113       rendering = model.rendering(options)
   114       offset <- model.doc.offset(node_pos.pos, text_length)
   114       offset <- model.doc.offset(node_pos.pos)
   115     } yield (rendering, offset)
   115     } yield (rendering, offset)
   116 
   116 
   117 
   117 
   118   /* input from client */
   118   /* input from client */
   119 
   119 
   132   def update_document(uri: String, text: String)
   132   def update_document(uri: String, text: String)
   133   {
   133   {
   134     state.change(st =>
   134     state.change(st =>
   135       {
   135       {
   136         val node_name = resources.node_name(uri)
   136         val node_name = resources.node_name(uri)
   137         val model = Document_Model(session, Line.Document(text), node_name, text_length)
   137         val model = Document_Model(session, Line.Document(text, text_length), node_name)
   138         st.copy(models = st.models + (uri -> model))
   138         st.copy(models = st.models + (uri -> model))
   139       })
   139       })
   140     delay_input.invoke()
   140     delay_input.invoke()
   141   }
   141   }
   142 
   142 
   263       for {
   263       for {
   264         (rendering, offset) <- rendering_offset(node_pos)
   264         (rendering, offset) <- rendering_offset(node_pos)
   265         info <- rendering.tooltip(Text.Range(offset, offset + 1))
   265         info <- rendering.tooltip(Text.Range(offset, offset + 1))
   266       } yield {
   266       } yield {
   267         val doc = rendering.model.doc
   267         val doc = rendering.model.doc
   268         val range = doc.range(info.range, text_length)
   268         val range = doc.range(info.range)
   269         val s = Pretty.string_of(info.info, margin = rendering.tooltip_margin)
   269         val s = Pretty.string_of(info.info, margin = rendering.tooltip_margin)
   270         (range, List("```\n" + s + "\n```"))  // FIXME proper content format
   270         (range, List("```\n" + s + "\n```"))  // FIXME proper content format
   271       }
   271       }
   272     channel.write(Protocol.Hover.reply(id, result))
   272     channel.write(Protocol.Hover.reply(id, result))
   273   }
   273   }