From 4967b811dda4eae3910514ea8788f0fab256ad8c Mon Sep 17 00:00:00 2001 From: Jess Balint Date: Fri, 22 May 2020 19:09:37 -0500 Subject: tweak syntax --- .../src/handlers/change_lifetime_anon_to_named.rs | 89 ++++++++++------------ 1 file changed, 40 insertions(+), 49 deletions(-) diff --git a/crates/ra_assists/src/handlers/change_lifetime_anon_to_named.rs b/crates/ra_assists/src/handlers/change_lifetime_anon_to_named.rs index 67d50cfda..922213607 100644 --- a/crates/ra_assists/src/handlers/change_lifetime_anon_to_named.rs +++ b/crates/ra_assists/src/handlers/change_lifetime_anon_to_named.rs @@ -37,57 +37,48 @@ pub(crate) fn change_lifetime_anon_to_named(acc: &mut Assists, ctx: &AssistConte // only allow naming the last anonymous lifetime return None; } - match lifetime_arg.syntax().ancestors().find_map(ast::ImplDef::cast) { - Some(impl_def) => { - // get the `impl` keyword so we know where to add the lifetime argument - let impl_kw = impl_def.syntax().first_child_or_token()?.into_token()?; - if impl_kw.kind() != SyntaxKind::IMPL_KW { - return None; - } - let new_lifetime_param = match impl_def.type_param_list() { + let impl_def = lifetime_arg.syntax().ancestors().find_map(ast::ImplDef::cast)?; + // get the `impl` keyword so we know where to add the lifetime argument + let impl_kw = impl_def.syntax().first_child_or_token()?.into_token()?; + if impl_kw.kind() != SyntaxKind::IMPL_KW { + return None; + } + let new_lifetime_param = match impl_def.type_param_list() { + Some(type_params) => { + let used_lifetime_params: HashSet<_> = type_params + .lifetime_params() + .map(|p| { + let mut param_name = p.syntax().text().to_string(); + param_name.remove(0); + param_name + }) + .collect(); + (b'a'..=b'z') + .map(char::from) + .find(|c| !used_lifetime_params.contains(&c.to_string()))? + } + None => 'a', + }; + acc.add( + AssistId("change_lifetime_anon_to_named"), + "Give anonymous lifetime a name", + lifetime_arg.syntax().text_range(), + |builder| { + match impl_def.type_param_list() { Some(type_params) => { - let used_lifetime_params: HashSet<_> = type_params - .lifetime_params() - .map(|p| { - let mut param_name = p.syntax().text().to_string(); - param_name.remove(0); - param_name - }) - .collect(); - (b'a'..=b'z') - .map(char::from) - .find(|c| !used_lifetime_params.contains(&c.to_string()))? - } - None => 'a', - }; - acc.add( - AssistId("change_lifetime_anon_to_named"), - "Give anonymous lifetime a name", - lifetime_arg.syntax().text_range(), - |builder| { - match impl_def.type_param_list() { - Some(type_params) => { - builder.insert( - (u32::from(type_params.syntax().text_range().end()) - 1).into(), - format!(", '{}", new_lifetime_param), - ); - } - None => { - builder.insert( - impl_kw.text_range().end(), - format!("<'{}>", new_lifetime_param), - ); - } - } - builder.replace( - lifetime_arg.syntax().text_range(), - format!("'{}", new_lifetime_param), + builder.insert( + (u32::from(type_params.syntax().text_range().end()) - 1).into(), + format!(", '{}", new_lifetime_param), ); - }, - ) - } - _ => None, - } + } + None => { + builder + .insert(impl_kw.text_range().end(), format!("<'{}>", new_lifetime_param)); + } + } + builder.replace(lifetime_arg.syntax().text_range(), format!("'{}", new_lifetime_param)); + }, + ) } #[cfg(test)] -- cgit v1.2.3