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.rs44
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());
}
}