diff --git a/src/diff/dijkstra.rs b/src/diff/dijkstra.rs index 9fb5f6d65..c79eaa90c 100644 --- a/src/diff/dijkstra.rs +++ b/src/diff/dijkstra.rs @@ -273,9 +273,9 @@ mod tests { fn identical_atoms() { let arena = Arena::new(); - let lhs = Syntax::new_atom(&arena, pos_helper(0), "foo", AtomKind::Normal); + let lhs = Syntax::new_atom(&arena, pos_helper(0), "foo".to_owned(), AtomKind::Normal); // Same content as LHS. - let rhs = Syntax::new_atom(&arena, pos_helper(0), "foo", AtomKind::Normal); + let rhs = Syntax::new_atom(&arena, pos_helper(0), "foo".to_owned(), AtomKind::Normal); init_all_info(&[lhs], &[rhs]); let start = Vertex::new(Some(lhs), Some(rhs)); @@ -303,7 +303,7 @@ mod tests { vec![Syntax::new_atom( &arena, pos_helper(1), - "foo", + "foo".to_owned(), AtomKind::Normal, )], "]", @@ -354,8 +354,8 @@ mod tests { "[", pos_helper(0), vec![ - Syntax::new_atom(&arena, pos_helper(1), "foo", AtomKind::Normal), - Syntax::new_atom(&arena, pos_helper(2), "foo", AtomKind::Normal), + Syntax::new_atom(&arena, pos_helper(1), "foo".to_owned(), AtomKind::Normal), + Syntax::new_atom(&arena, pos_helper(2), "foo".to_owned(), AtomKind::Normal), ], "]", pos_helper(3), @@ -389,7 +389,7 @@ mod tests { pos_helper(0), vec![ Syntax::new_list(&arena, "(", pos_helper(1), vec![], ")", pos_helper(2)), - Syntax::new_atom(&arena, pos_helper(3), "foo", AtomKind::Normal), + Syntax::new_atom(&arena, pos_helper(3), "foo".to_owned(), AtomKind::Normal), ], "]", pos_helper(4), @@ -401,7 +401,7 @@ mod tests { pos_helper(0), vec![ Syntax::new_list(&arena, "(", pos_helper(1), vec![], ")", pos_helper(2)), - Syntax::new_atom(&arena, pos_helper(3), "foo", AtomKind::Normal), + Syntax::new_atom(&arena, pos_helper(3), "foo".to_owned(), AtomKind::Normal), ], "}", pos_helper(4), @@ -437,14 +437,14 @@ mod tests { let lhs = vec![Syntax::new_atom( &arena, pos_helper(1), - "the quick brown fox", + "the quick brown fox".to_owned(), AtomKind::Comment, )]; let rhs = vec![Syntax::new_atom( &arena, pos_helper(1), - "the quick brown cat", + "the quick brown cat".to_owned(), AtomKind::Comment, )]; init_all_info(&lhs, &rhs); @@ -469,14 +469,14 @@ mod tests { let lhs = vec![Syntax::new_atom( &arena, pos_helper(1), - "the quick brown fox", + "the quick brown fox".to_owned(), AtomKind::Comment, )]; let rhs = vec![Syntax::new_atom( &arena, pos_helper(1), - "foo bar", + "foo bar".to_owned(), AtomKind::Comment, )]; init_all_info(&lhs, &rhs); @@ -502,13 +502,13 @@ mod tests { Syntax::new_atom( &arena, pos_helper(1), - "the quick brown fox", + "the quick brown fox".to_owned(), AtomKind::Comment, ), Syntax::new_atom( &arena, pos_helper(2), - "the quick brown thing", + "the quick brown thing".to_owned(), AtomKind::Comment, ), ]; @@ -516,7 +516,7 @@ mod tests { let rhs = vec![Syntax::new_atom( &arena, pos_helper(1), - "the quick brown fox.", + "the quick brown fox.".to_owned(), AtomKind::Comment, )]; init_all_info(&lhs, &rhs); @@ -540,8 +540,8 @@ mod tests { #[test] fn mark_syntax_equal_atoms() { let arena = Arena::new(); - let lhs = Syntax::new_atom(&arena, pos_helper(1), "foo", AtomKind::Normal); - let rhs = Syntax::new_atom(&arena, pos_helper(1), "foo", AtomKind::Normal); + let lhs = Syntax::new_atom(&arena, pos_helper(1), "foo".to_owned(), AtomKind::Normal); + let rhs = Syntax::new_atom(&arena, pos_helper(1), "foo".to_owned(), AtomKind::Normal); init_all_info(&[lhs], &[rhs]); let mut change_map = ChangeMap::default(); @@ -554,8 +554,8 @@ mod tests { #[test] fn mark_syntax_different_atoms() { let arena = Arena::new(); - let lhs = Syntax::new_atom(&arena, pos_helper(1), "foo", AtomKind::Normal); - let rhs = Syntax::new_atom(&arena, pos_helper(1), "bar", AtomKind::Normal); + let lhs = Syntax::new_atom(&arena, pos_helper(1), "foo".to_owned(), AtomKind::Normal); + let rhs = Syntax::new_atom(&arena, pos_helper(1), "bar".to_owned(), AtomKind::Normal); init_all_info(&[lhs], &[rhs]); let mut change_map = ChangeMap::default(); diff --git a/src/diff/sliders.rs b/src/diff/sliders.rs index cd3da9892..0ce5c799b 100644 --- a/src/diff/sliders.rs +++ b/src/diff/sliders.rs @@ -704,9 +704,9 @@ mod tests { }]; let lhs = [ - Syntax::new_atom(&arena, line1a, "a", AtomKind::Comment), - Syntax::new_atom(&arena, line1b, "b", AtomKind::Comment), - Syntax::new_atom(&arena, line2, "a", AtomKind::Comment), + Syntax::new_atom(&arena, line1a, "a".to_owned(), AtomKind::Comment), + Syntax::new_atom(&arena, line1b, "b".to_owned(), AtomKind::Comment), + Syntax::new_atom(&arena, line2, "a".to_owned(), AtomKind::Comment), ]; let pos = vec![SingleLineSpan { @@ -714,7 +714,7 @@ mod tests { start_col: 1, end_col: 2, }]; - let rhs = [Syntax::new_atom(&arena, pos, "a", AtomKind::Comment)]; + let rhs = [Syntax::new_atom(&arena, pos, "a".to_owned(), AtomKind::Comment)]; init_all_info(&lhs, &rhs); @@ -753,9 +753,9 @@ mod tests { }]; let lhs = [ - Syntax::new_atom(&arena, line1, "a", AtomKind::Comment), - Syntax::new_atom(&arena, line2a, "b", AtomKind::Comment), - Syntax::new_atom(&arena, line2b, "a", AtomKind::Comment), + Syntax::new_atom(&arena, line1, "a".to_owned(), AtomKind::Comment), + Syntax::new_atom(&arena, line2a, "b".to_owned(), AtomKind::Comment), + Syntax::new_atom(&arena, line2b, "a".to_owned(), AtomKind::Comment), ]; let pos = vec![SingleLineSpan { @@ -763,7 +763,7 @@ mod tests { start_col: 1, end_col: 2, }]; - let rhs = [Syntax::new_atom(&arena, pos, "a", AtomKind::Comment)]; + let rhs = [Syntax::new_atom(&arena, pos, "a".to_owned(), AtomKind::Comment)]; init_all_info(&lhs, &rhs); diff --git a/src/parse/syntax.rs b/src/parse/syntax.rs index 77b6df5b3..ce4a2ed9c 100644 --- a/src/parse/syntax.rs +++ b/src/parse/syntax.rs @@ -249,13 +249,13 @@ impl<'a> Syntax<'a> { pub(crate) fn new_atom( arena: &'a Arena>, mut position: Vec, - mut content: &str, + mut content: String, kind: AtomKind, ) -> &'a Syntax<'a> { // If a parser hasn't cleaned up \r on CRLF files with // comments, discard it. if content.ends_with('\r') { - content = &content[..content.len() - 1]; + content.pop(); } // If a parser adds a trailing newline to the atom, discard @@ -264,13 +264,13 @@ impl<'a> Syntax<'a> { // the end of the file. if content.ends_with('\n') { position.pop(); - content = &content[..content.len() - 1]; + content.pop(); } arena.alloc(Atom { info: SyntaxInfo::default(), position, - content: content.into(), + content, kind, }) } @@ -1084,8 +1084,8 @@ mod tests { let arena = Arena::new(); - let comment = Syntax::new_atom(&arena, pos.clone(), "foo", AtomKind::Comment); - let atom = Syntax::new_atom(&arena, pos, "foo", AtomKind::Normal); + let comment = Syntax::new_atom(&arena, pos.clone(), "foo".to_owned(), AtomKind::Comment); + let atom = Syntax::new_atom(&arena, pos, "foo".to_owned(), AtomKind::Normal); init_all_info(&[comment], &[atom]); assert_ne!(comment, atom); @@ -1097,7 +1097,7 @@ mod tests { let position = vec![]; let content = "foo\r"; - let atom = Syntax::new_atom(&arena, position, content, AtomKind::Comment); + let atom = Syntax::new_atom(&arena, position, content.to_owned(), AtomKind::Comment); match atom { List { .. } => unreachable!(), @@ -1124,7 +1124,7 @@ mod tests { ]; let content = ";; hello\n"; - let atom = Syntax::new_atom(&arena, position, content, AtomKind::Comment); + let atom = Syntax::new_atom(&arena, position, content.to_owned(), AtomKind::Comment); match atom { List { .. } => unreachable!(), @@ -1157,8 +1157,8 @@ mod tests { let arena = Arena::new(); - let type_atom = Syntax::new_atom(&arena, pos.clone(), "foo", AtomKind::Type); - let atom = Syntax::new_atom(&arena, pos, "foo", AtomKind::Normal); + let type_atom = Syntax::new_atom(&arena, pos.clone(), "foo".to_owned(), AtomKind::Type); + let atom = Syntax::new_atom(&arena, pos, "foo".to_owned(), AtomKind::Normal); init_all_info(&[type_atom], &[atom]); assert_eq!(type_atom, atom); @@ -1173,7 +1173,7 @@ mod tests { }]; let arena = Arena::new(); - let atom = Syntax::new_atom(&arena, pos, "foo", AtomKind::Normal); + let atom = Syntax::new_atom(&arena, pos, "foo".to_owned(), AtomKind::Normal); let trivial_list = Syntax::new_list(&arena, "", vec![], vec![atom], "", vec![]); @@ -1189,7 +1189,7 @@ mod tests { }]; let arena = Arena::new(); - let atom = Syntax::new_atom(&arena, pos, "", AtomKind::Normal); + let atom = Syntax::new_atom(&arena, pos, "".to_owned(), AtomKind::Normal); let trivial_list = Syntax::new_list(&arena, "(", vec![], vec![atom], ")", vec![]); @@ -1211,8 +1211,8 @@ mod tests { let arena = Arena::new(); - let x = Syntax::new_atom(&arena, pos.clone(), "foo\nbar", AtomKind::Comment); - let y = Syntax::new_atom(&arena, pos, "foo\n bar", AtomKind::Comment); + let x = Syntax::new_atom(&arena, pos.clone(), "foo\nbar".to_owned(), AtomKind::Comment); + let y = Syntax::new_atom(&arena, pos, "foo\n bar".to_owned(), AtomKind::Comment); init_all_info(&[x], &[y]); assert_eq!(x, y); diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index 90f783a31..1ffb9dd9b 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -1796,7 +1796,7 @@ fn atom_from_cursor<'a>( AtomKind::Normal }; - Some(Syntax::new_atom(arena, position, content, highlight)) + Some(Syntax::new_atom(arena, position, content.to_owned(), highlight)) } #[cfg(test)]