Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/ast/edit_in_place.rs')
-rw-r--r--crates/syntax/src/ast/edit_in_place.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/crates/syntax/src/ast/edit_in_place.rs b/crates/syntax/src/ast/edit_in_place.rs
index f1286e7aa2..2b152a45c9 100644
--- a/crates/syntax/src/ast/edit_in_place.rs
+++ b/crates/syntax/src/ast/edit_in_place.rs
@@ -7,6 +7,7 @@ use parser::{SyntaxKind, T};
use crate::{
algo::{self, neighbor},
ast::{self, edit::IndentLevel, make, HasGenericArgs, HasGenericParams},
+ syntax_editor::SyntaxEditor,
ted::{self, Position},
AstNode, AstToken, Direction, SyntaxElement,
SyntaxKind::{ATTR, COMMENT, WHITESPACE},
@@ -257,6 +258,29 @@ impl ast::GenericParamList {
}
}
+ pub fn syntax_editor_add_generic_param(
+ &self,
+ editor: &mut SyntaxEditor,
+ generic_param: ast::GenericParam,
+ ) {
+ match self.generic_params().last() {
+ Some(last_param) => {
+ let position = crate::syntax_editor::Position::after(last_param.syntax());
+ let elements = vec![
+ make::token(T![,]).into(),
+ make::tokens::single_space().into(),
+ generic_param.syntax().clone().into(),
+ ];
+ editor.insert_all(position, elements);
+ }
+ None => {
+ let after_l_angle =
+ crate::syntax_editor::Position::after(self.l_angle_token().unwrap());
+ editor.insert(after_l_angle, generic_param.syntax());
+ }
+ }
+ }
+
/// Removes the existing generic param
pub fn remove_generic_param(&self, generic_param: ast::GenericParam) {
if let Some(previous) = generic_param.syntax().prev_sibling() {