Unnamed repository; edit this file 'description' to name the repository.
make generate_unique_lifetime_param_name return Option<SmolStr>
bit-aloo 2 months ago
parent e55ef1c · commit 191ddf0
-rw-r--r--crates/ide-assists/src/handlers/introduce_named_lifetime.rs21
1 files changed, 10 insertions, 11 deletions
diff --git a/crates/ide-assists/src/handlers/introduce_named_lifetime.rs b/crates/ide-assists/src/handlers/introduce_named_lifetime.rs
index 76d47b9276..854e9561d2 100644
--- a/crates/ide-assists/src/handlers/introduce_named_lifetime.rs
+++ b/crates/ide-assists/src/handlers/introduce_named_lifetime.rs
@@ -1,7 +1,8 @@
use ide_db::{FileId, FxHashSet};
use syntax::{
- AstNode, T, TextRange,
+ AstNode, SmolStr, T, TextRange, ToSmolStr,
ast::{self, HasGenericParams, HasName, syntax_factory::SyntaxFactory},
+ format_smolstr,
syntax_editor::{Element, Position, SyntaxEditor},
};
@@ -53,16 +54,14 @@ pub(crate) fn introduce_named_lifetime(acc: &mut Assists, ctx: &AssistContext<'_
/// Given a type parameter list, generate a unique lifetime parameter name
/// which is not in the list
fn generate_unique_lifetime_param_name(
- existing_type_param_list: Option<ast::GenericParamList>,
-) -> Option<String> {
- match existing_type_param_list {
- Some(type_params) => {
- let used_lifetime_params: FxHashSet<_> =
- type_params.lifetime_params().map(|p| p.syntax().text().to_string()).collect();
- ('a'..='z').map(|it| format!("'{it}")).find(|it| !used_lifetime_params.contains(it))
- }
- None => Some("'a".to_owned()),
- }
+ existing_params: Option<ast::GenericParamList>,
+) -> Option<SmolStr> {
+ let used_lifetime_param: FxHashSet<SmolStr> = existing_params
+ .iter()
+ .flat_map(|params| params.lifetime_params())
+ .map(|p| p.syntax().text().to_smolstr())
+ .collect();
+ ('a'..='z').map(|c| format_smolstr!("'{c}")).find(|lt| !used_lifetime_param.contains(lt))
}
fn generate_fn_def_assist(