]> git.lizzy.rs Git - rust.git/blobdiff - crates/ra_syntax/src/ast/edit.rs
do refact and fix some issue
[rust.git] / crates / ra_syntax / src / ast / edit.rs
index 6f005a2d88c9b0f9dccc4956ebfec057592d29ca..95bf9db14733b0e49e433449a2e332b3e9b7f71e 100644 (file)
         make::{self, tokens},
         AstNode, TypeBoundsOwner,
     },
-    AstToken, Direction, InsertPosition, SmolStr, SyntaxElement,
+    AstToken, Direction, InsertPosition, SmolStr, SyntaxElement, SyntaxKind,
     SyntaxKind::{ATTR, COMMENT, WHITESPACE},
     SyntaxNode, SyntaxToken, T,
 };
 
+impl ast::BinExpr {
+    #[must_use]
+    pub fn replace_op(&self, op: SyntaxKind) -> Option<ast::BinExpr> {
+        let op_node: SyntaxElement = self.op_details()?.0.into();
+        let to_insert: Option<SyntaxElement> = Some(tokens::op(op).into());
+        let replace_range = RangeInclusive::new(op_node.clone(), op_node);
+        Some(replace_children(self, replace_range, to_insert.into_iter()))
+    }
+}
+
 impl ast::FnDef {
     #[must_use]
     pub fn with_body(&self, body: ast::Block) -> ast::FnDef {