MCPcopy Create free account
hub / github.com/csskit/csskit / on_did_change_text_document

Method on_did_change_text_document

crates/csskit_lsp/src/service.rs:275–309  ·  view source on GitHub ↗
(&self, req: lsp_types::DidChangeTextDocumentParams)

Source from the content-addressed store, hash-verified

273
274 #[instrument]
275 fn on_did_change_text_document(&self, req: lsp_types::DidChangeTextDocumentParams) {
276 let uri = req.text_document.uri;
277 let changes = req.content_changes;
278 if let Some(mut file) = self.files.clone().get_mut(&uri) {
279 let mut rope = file.content.clone();
280 for change in changes {
281 let range = if let Some(range) = change.range {
282 rope.try_line_to_char(range.start.line as usize).map_or_else(
283 |_| (0, None),
284 |start| {
285 rope.try_line_to_char(range.end.line as usize).map_or_else(
286 |_| (start + range.start.character as usize, None),
287 |end| {
288 (start + range.start.character as usize, Some(end + range.end.character as usize))
289 },
290 )
291 },
292 )
293 } else {
294 (0, None)
295 };
296 match range {
297 (start, None) => {
298 rope.try_remove(start..).ok();
299 rope.try_insert(start, &change.text).ok();
300 }
301 (start, Some(end)) => {
302 rope.try_remove(start..end).ok();
303 rope.try_insert(start, &change.text).ok();
304 }
305 }
306 }
307 file.commit(rope)
308 }
309 }
310}

Callers

nothing calls this directly

Calls 3

cloneMethod · 0.80
okMethod · 0.80
commitMethod · 0.80

Tested by

no test coverage detected