From 7e74af32268f9b0783ca94107b0b10d52e4ebe5e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov <aleksey.kladov@gmail.com> Date: Tue, 28 Aug 2018 14:06:30 +0300 Subject: Avoid materializing strings --- crates/libeditor/src/code_actions.rs | 4 ++-- crates/libeditor/src/typing.rs | 17 ++++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) (limited to 'crates/libeditor') diff --git a/crates/libeditor/src/code_actions.rs b/crates/libeditor/src/code_actions.rs index e6ba83d2e..cd5146d87 100644 --- a/crates/libeditor/src/code_actions.rs +++ b/crates/libeditor/src/code_actions.rs @@ -29,8 +29,8 @@ pub fn flip_comma<'a>(file: &'a File, offset: TextUnit) -> Option<impl FnOnce() let right = non_trivia_sibling(comma, Direction::Forward)?; Some(move || { let mut edit = EditBuilder::new(); - edit.replace(left.range(), right.text()); - edit.replace(right.range(), left.text()); + edit.replace(left.range(), right.text().to_string()); + edit.replace(right.range(), left.text().to_string()); ActionResult { edit: edit.finish(), cursor_position: None, diff --git a/crates/libeditor/src/typing.rs b/crates/libeditor/src/typing.rs index 2cff96b34..3a3776c26 100644 --- a/crates/libeditor/src/typing.rs +++ b/crates/libeditor/src/typing.rs @@ -15,16 +15,15 @@ use {ActionResult, EditBuilder, find_node_at_offset}; pub fn join_lines(file: &File, range: TextRange) -> ActionResult { let range = if range.is_empty() { - let text = file.syntax().text(); - let text = &text[TextRange::from_to(range.start(), TextUnit::of_str(&text))]; - let pos = text.bytes().take_while(|&b| b != b'\n').count(); - if pos == text.len() { - return ActionResult { + let syntax = file.syntax(); + let text = syntax.text().slice(range.start()..); + let pos = match text.find('\n') { + None => return ActionResult { edit: EditBuilder::new().finish(), cursor_position: None - }; - } - let pos: TextUnit = (pos as u32).into(); + }, + Some(pos) => pos + }; TextRange::offset_len( range.start() + pos, TextUnit::of_char('\n'), @@ -129,7 +128,7 @@ fn join_lambda_body( let expr = single_expr(block)?; edit.replace( block_expr.syntax().range(), - expr.syntax().text(), + expr.syntax().text().to_string(), ); Some(()) } -- cgit v1.2.3