Skip to content

Commit 0ec7f76

Browse files
bors[bot]matklad
andauthored
Merge #3375
3375: Cleanup editing API a bit r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <[email protected]>
2 parents b53ff21 + 9abcab1 commit 0ec7f76

File tree

8 files changed

+39
-15
lines changed

8 files changed

+39
-15
lines changed

crates/ra_assists/src/ast_transform.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ impl<'a> QualifyPaths<'a> {
157157

158158
pub fn apply<'a, N: AstNode>(transformer: &dyn AstTransform<'a>, node: N) -> N {
159159
let syntax = node.syntax();
160-
let result = ra_syntax::algo::replace_descendants(syntax, &|element| match element {
160+
let result = ra_syntax::algo::replace_descendants(syntax, |element| match element {
161161
ra_syntax::SyntaxElement::Node(n) => {
162162
let replacement = transformer.get_substitution(&n)?;
163163
Some(replacement.into())

crates/ra_assists/src/handlers/early_return.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ pub(crate) fn convert_to_guarded_return(ctx: AssistCtx) -> Option<Assist> {
120120
let expr = {
121121
let name_ref = make::name_ref("it");
122122
let segment = make::path_segment(name_ref);
123-
let path = make::path_unqalified(segment);
123+
let path = make::path_unqualified(segment);
124124
make::expr_path(path)
125125
};
126126
make::match_arm(once(pat.into()), expr)

crates/ra_assists/src/handlers/move_bounds.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ fn build_predicate(param: ast::TypeParam) -> Option<ast::WherePred> {
7575
let path = {
7676
let name_ref = make::name_ref(&param.name()?.syntax().to_string());
7777
let segment = make::path_segment(name_ref);
78-
make::path_unqalified(segment)
78+
make::path_unqualified(segment)
7979
};
8080
let predicate = make::where_pred(path, param.type_bound_list()?.bounds());
8181
Some(predicate)

crates/ra_ide/src/expand_macro.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ fn expand_macro_recur(
5252
}
5353
}
5454

55-
Some(replace_descendants(&expanded, &|n| replaces.get(n).cloned()))
55+
Some(replace_descendants(&expanded, |n| replaces.get(n).cloned()))
5656
}
5757

5858
// FIXME: It would also be cool to share logic here and in the mbe tests,

crates/ra_mbe/src/syntax_bridge.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ mod tests {
570570
let token_tree = insert_children(
571571
&rbrace.parent().unwrap(),
572572
InsertPosition::Last,
573-
&mut std::iter::once(space),
573+
std::iter::once(space),
574574
);
575575

576576
// Token Tree now is :

crates/ra_syntax/src/algo.rs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,15 @@ pub fn diff(from: &SyntaxNode, to: &SyntaxNode) -> TreeDiff {
142142
/// This is a type-unsafe low-level editing API, if you need to use it,
143143
/// prefer to create a type-safe abstraction on top of it instead.
144144
pub fn insert_children(
145+
parent: &SyntaxNode,
146+
position: InsertPosition<SyntaxElement>,
147+
to_insert: impl IntoIterator<Item = SyntaxElement>,
148+
) -> SyntaxNode {
149+
let mut to_insert = to_insert.into_iter();
150+
_insert_children(parent, position, &mut to_insert)
151+
}
152+
153+
fn _insert_children(
145154
parent: &SyntaxNode,
146155
position: InsertPosition<SyntaxElement>,
147156
to_insert: &mut dyn Iterator<Item = SyntaxElement>,
@@ -176,6 +185,15 @@ pub fn insert_children(
176185
/// This is a type-unsafe low-level editing API, if you need to use it,
177186
/// prefer to create a type-safe abstraction on top of it instead.
178187
pub fn replace_children(
188+
parent: &SyntaxNode,
189+
to_delete: RangeInclusive<SyntaxElement>,
190+
to_insert: impl IntoIterator<Item = SyntaxElement>,
191+
) -> SyntaxNode {
192+
let mut to_insert = to_insert.into_iter();
193+
_replace_children(parent, to_delete, &mut to_insert)
194+
}
195+
196+
fn _replace_children(
179197
parent: &SyntaxNode,
180198
to_delete: RangeInclusive<SyntaxElement>,
181199
to_insert: &mut dyn Iterator<Item = SyntaxElement>,
@@ -202,14 +220,21 @@ pub fn replace_children(
202220
/// to create a type-safe abstraction on top of it instead.
203221
pub fn replace_descendants(
204222
parent: &SyntaxNode,
205-
map: &impl Fn(&SyntaxElement) -> Option<SyntaxElement>,
223+
map: impl Fn(&SyntaxElement) -> Option<SyntaxElement>,
224+
) -> SyntaxNode {
225+
_replace_descendants(parent, &map)
226+
}
227+
228+
fn _replace_descendants(
229+
parent: &SyntaxNode,
230+
map: &dyn Fn(&SyntaxElement) -> Option<SyntaxElement>,
206231
) -> SyntaxNode {
207232
// FIXME: this could be made much faster.
208233
let new_children = parent.children_with_tokens().map(|it| go(map, it)).collect::<Vec<_>>();
209234
return with_children(parent, new_children);
210235

211236
fn go(
212-
map: &impl Fn(&SyntaxElement) -> Option<SyntaxElement>,
237+
map: &dyn Fn(&SyntaxElement) -> Option<SyntaxElement>,
213238
element: SyntaxElement,
214239
) -> NodeOrToken<rowan::GreenNode, rowan::GreenToken> {
215240
if let Some(replacement) = map(&element) {
@@ -221,7 +246,7 @@ pub fn replace_descendants(
221246
match element {
222247
NodeOrToken::Token(it) => NodeOrToken::Token(it.green().clone()),
223248
NodeOrToken::Node(it) => {
224-
NodeOrToken::Node(replace_descendants(&it, map).green().clone())
249+
NodeOrToken::Node(_replace_descendants(&it, map).green().clone())
225250
}
226251
}
227252
}

crates/ra_syntax/src/ast/edit.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ pub fn replace_descendants<N: AstNode, D: AstNode>(
276276
.into_iter()
277277
.map(|(from, to)| (from.syntax().clone().into(), to.syntax().clone().into()))
278278
.collect::<FxHashMap<SyntaxElement, _>>();
279-
let new_syntax = algo::replace_descendants(parent.syntax(), &|n| map.get(n).cloned());
279+
let new_syntax = algo::replace_descendants(parent.syntax(), |n| map.get(n).cloned());
280280
N::cast(new_syntax).unwrap()
281281
}
282282

@@ -331,7 +331,7 @@ impl IndentLevel {
331331
)
332332
})
333333
.collect();
334-
algo::replace_descendants(&node, &|n| replacements.get(n).cloned())
334+
algo::replace_descendants(&node, |n| replacements.get(n).cloned())
335335
}
336336

337337
pub fn decrease_indent<N: AstNode>(self, node: N) -> N {
@@ -359,7 +359,7 @@ impl IndentLevel {
359359
)
360360
})
361361
.collect();
362-
algo::replace_descendants(&node, &|n| replacements.get(n).cloned())
362+
algo::replace_descendants(&node, |n| replacements.get(n).cloned())
363363
}
364364
}
365365

@@ -389,7 +389,7 @@ fn insert_children<N: AstNode>(
389389
position: InsertPosition<SyntaxElement>,
390390
to_insert: impl IntoIterator<Item = SyntaxElement>,
391391
) -> N {
392-
let new_syntax = algo::insert_children(parent.syntax(), position, &mut to_insert.into_iter());
392+
let new_syntax = algo::insert_children(parent.syntax(), position, to_insert);
393393
N::cast(new_syntax).unwrap()
394394
}
395395

@@ -404,8 +404,7 @@ fn replace_children<N: AstNode>(
404404
to_replace: RangeInclusive<SyntaxElement>,
405405
to_insert: impl IntoIterator<Item = SyntaxElement>,
406406
) -> N {
407-
let new_syntax =
408-
algo::replace_children(parent.syntax(), to_replace, &mut to_insert.into_iter());
407+
let new_syntax = algo::replace_children(parent.syntax(), to_replace, to_insert);
409408
N::cast(new_syntax).unwrap()
410409
}
411410

crates/ra_syntax/src/ast/make.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub fn name_ref(text: &str) -> ast::NameRef {
1515
pub fn path_segment(name_ref: ast::NameRef) -> ast::PathSegment {
1616
ast_from_text(&format!("use {};", name_ref.syntax()))
1717
}
18-
pub fn path_unqalified(segment: ast::PathSegment) -> ast::Path {
18+
pub fn path_unqualified(segment: ast::PathSegment) -> ast::Path {
1919
path_from_text(&format!("use {}", segment.syntax()))
2020
}
2121
pub fn path_qualified(qual: ast::Path, segment: ast::PathSegment) -> ast::Path {

0 commit comments

Comments
 (0)