Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/ast/syntax_factory/constructors.rs')
-rw-r--r--crates/syntax/src/ast/syntax_factory/constructors.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/crates/syntax/src/ast/syntax_factory/constructors.rs b/crates/syntax/src/ast/syntax_factory/constructors.rs
index 7cf9e2bf14..5fe419ad4e 100644
--- a/crates/syntax/src/ast/syntax_factory/constructors.rs
+++ b/crates/syntax/src/ast/syntax_factory/constructors.rs
@@ -1578,6 +1578,44 @@ impl SyntaxFactory {
pub fn ident(&self, text: &str) -> SyntaxToken {
make::tokens::ident(text)
}
+
+ pub fn mut_self_param(&self) -> ast::SelfParam {
+ let ast = make::mut_self_param().clone_for_update();
+
+ if let Some(mut mapping) = self.mappings() {
+ let builder = SyntaxMappingBuilder::new(ast.syntax().clone());
+ builder.finish(&mut mapping);
+ }
+
+ ast
+ }
+
+ pub fn ret_type(&self, ty: ast::Type) -> ast::RetType {
+ let ast = make::ret_type(ty.clone()).clone_for_update();
+
+ if let Some(mut mapping) = self.mappings() {
+ let mut builder = SyntaxMappingBuilder::new(ast.syntax().clone());
+ builder.map_node(ty.syntax().clone(), ast.ty().unwrap().syntax().clone());
+ builder.finish(&mut mapping);
+ }
+ ast
+ }
+
+ pub fn ty_ref(&self, ty: ast::Type, is_mut: bool) -> ast::Type {
+ let ast = make::ty_ref(ty.clone(), is_mut).clone_for_update();
+
+ if let Some(mut mapping) = self.mappings() {
+ let mut builder = SyntaxMappingBuilder::new(ast.syntax().clone());
+ match &ast {
+ ast::Type::RefType(ref_ty) => {
+ builder.map_node(ty.syntax().clone(), ref_ty.ty().unwrap().syntax().clone());
+ }
+ _ => unreachable!(),
+ }
+ builder.finish(&mut mapping);
+ }
+ ast
+ }
}
// `ext` constructors