Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/syntax_editor.rs')
| -rw-r--r-- | crates/syntax/src/syntax_editor.rs | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/crates/syntax/src/syntax_editor.rs b/crates/syntax/src/syntax_editor.rs index 48c160b9a9..58200189c4 100644 --- a/crates/syntax/src/syntax_editor.rs +++ b/crates/syntax/src/syntax_editor.rs @@ -33,7 +33,7 @@ pub struct SyntaxEditor { impl SyntaxEditor { /// Creates a syntax editor to start editing from `root` pub fn new(root: SyntaxNode) -> Self { - Self { root, changes: vec![], mappings: SyntaxMapping::new(), annotations: vec![] } + Self { root, changes: vec![], mappings: SyntaxMapping::default(), annotations: vec![] } } pub fn add_annotation(&mut self, element: impl Element, annotation: SyntaxAnnotation) { @@ -151,9 +151,8 @@ impl SyntaxEdit { #[repr(transparent)] pub struct SyntaxAnnotation(NonZeroU32); -impl SyntaxAnnotation { - /// Creates a unique syntax annotation to attach data to. - pub fn new() -> Self { +impl Default for SyntaxAnnotation { + fn default() -> Self { static COUNTER: AtomicU32 = AtomicU32::new(1); // Only consistency within a thread matters, as SyntaxElements are !Send @@ -163,12 +162,6 @@ impl SyntaxAnnotation { } } -impl Default for SyntaxAnnotation { - fn default() -> Self { - Self::new() - } -} - /// Position describing where to insert elements #[derive(Debug)] pub struct Position { @@ -385,8 +378,8 @@ mod tests { use expect_test::expect; use crate::{ + AstNode, ast::{self, make, syntax_factory::SyntaxFactory}, - AstNode, SyntaxKind, }; use super::*; @@ -411,12 +404,12 @@ mod tests { let to_replace = root.syntax().descendants().find_map(ast::BinExpr::cast).unwrap(); let mut editor = SyntaxEditor::new(root.syntax().clone()); - let make = SyntaxFactory::new(); + let make = SyntaxFactory::with_mappings(); let name = make::name("var_name"); let name_ref = make::name_ref("var_name").clone_for_update(); - let placeholder_snippet = SyntaxAnnotation::new(); + let placeholder_snippet = SyntaxAnnotation::default(); editor.add_annotation(name.syntax(), placeholder_snippet); editor.add_annotation(name_ref.syntax(), placeholder_snippet); @@ -445,11 +438,12 @@ mod tests { expect.assert_eq(&edit.new_root.to_string()); assert_eq!(edit.find_annotation(placeholder_snippet).len(), 2); - assert!(edit - .annotations - .iter() - .flat_map(|(_, elements)| elements) - .all(|element| element.ancestors().any(|it| &it == edit.new_root()))) + assert!( + edit.annotations + .iter() + .flat_map(|(_, elements)| elements) + .all(|element| element.ancestors().any(|it| &it == edit.new_root())) + ) } #[test] @@ -521,7 +515,7 @@ mod tests { let second_let = root.syntax().descendants().find_map(ast::LetStmt::cast).unwrap(); let mut editor = SyntaxEditor::new(root.syntax().clone()); - let make = SyntaxFactory::new(); + let make = SyntaxFactory::with_mappings(); let new_block_expr = make.block_expr([], Some(ast::Expr::BlockExpr(inner_block.clone()))); @@ -573,7 +567,7 @@ mod tests { let inner_block = root.clone(); let mut editor = SyntaxEditor::new(root.syntax().clone()); - let make = SyntaxFactory::new(); + let make = SyntaxFactory::with_mappings(); let new_block_expr = make.block_expr([], Some(ast::Expr::BlockExpr(inner_block.clone()))); @@ -630,20 +624,12 @@ mod tests { } if let Some(tail) = parent_fn.body().unwrap().tail_expr() { - // FIXME: We do this because `xtask tidy` will not allow us to have trailing whitespace in the expect string. - if let Some(SyntaxElement::Token(token)) = tail.syntax().prev_sibling_or_token() { - if let SyntaxKind::WHITESPACE = token.kind() { - editor.delete(token); - } - } editor.delete(tail.syntax().clone()); } let edit = editor.finish(); - let expect = expect![[r#" -fn it() { -}"#]]; + let expect = expect![["fn it() {\n \n}"]]; expect.assert_eq(&edit.new_root.to_string()); } } |