diff options
Diffstat (limited to 'crates/assists')
-rw-r--r-- | crates/assists/src/handlers/extract_struct_from_enum_variant.rs | 22 | ||||
-rw-r--r-- | crates/assists/src/utils/import_assets.rs | 6 | ||||
-rw-r--r-- | crates/assists/src/utils/insert_use.rs | 4 |
3 files changed, 16 insertions, 16 deletions
diff --git a/crates/assists/src/handlers/extract_struct_from_enum_variant.rs b/crates/assists/src/handlers/extract_struct_from_enum_variant.rs index 48433feb9..178718c5e 100644 --- a/crates/assists/src/handlers/extract_struct_from_enum_variant.rs +++ b/crates/assists/src/handlers/extract_struct_from_enum_variant.rs | |||
@@ -37,6 +37,12 @@ pub(crate) fn extract_struct_from_enum_variant( | |||
37 | ast::StructKind::Tuple(field_list) => field_list, | 37 | ast::StructKind::Tuple(field_list) => field_list, |
38 | _ => return None, | 38 | _ => return None, |
39 | }; | 39 | }; |
40 | |||
41 | // skip 1-tuple variants | ||
42 | if field_list.fields().count() == 1 { | ||
43 | return None; | ||
44 | } | ||
45 | |||
40 | let variant_name = variant.name()?.to_string(); | 46 | let variant_name = variant.name()?.to_string(); |
41 | let variant_hir = ctx.sema.to_def(&variant)?; | 47 | let variant_hir = ctx.sema.to_def(&variant)?; |
42 | if existing_struct_def(ctx.db(), &variant_name, &variant_hir) { | 48 | if existing_struct_def(ctx.db(), &variant_name, &variant_hir) { |
@@ -233,17 +239,6 @@ enum A { One(One) }"#, | |||
233 | } | 239 | } |
234 | 240 | ||
235 | #[test] | 241 | #[test] |
236 | fn test_extract_struct_one_field() { | ||
237 | check_assist( | ||
238 | extract_struct_from_enum_variant, | ||
239 | "enum A { <|>One(u32) }", | ||
240 | r#"struct One(pub u32); | ||
241 | |||
242 | enum A { One(One) }"#, | ||
243 | ); | ||
244 | } | ||
245 | |||
246 | #[test] | ||
247 | fn test_extract_struct_pub_visibility() { | 242 | fn test_extract_struct_pub_visibility() { |
248 | check_assist( | 243 | check_assist( |
249 | extract_struct_from_enum_variant, | 244 | extract_struct_from_enum_variant, |
@@ -324,4 +319,9 @@ fn another_fn() { | |||
324 | enum A { <|>One(u8) }"#, | 319 | enum A { <|>One(u8) }"#, |
325 | ); | 320 | ); |
326 | } | 321 | } |
322 | |||
323 | #[test] | ||
324 | fn test_extract_not_applicable_one_field() { | ||
325 | check_not_applicable(r"enum A { <|>One(u32) }"); | ||
326 | } | ||
327 | } | 327 | } |
diff --git a/crates/assists/src/utils/import_assets.rs b/crates/assists/src/utils/import_assets.rs index 23db3a74b..f47edbb76 100644 --- a/crates/assists/src/utils/import_assets.rs +++ b/crates/assists/src/utils/import_assets.rs | |||
@@ -26,13 +26,13 @@ pub(crate) enum ImportCandidate { | |||
26 | 26 | ||
27 | #[derive(Debug)] | 27 | #[derive(Debug)] |
28 | pub(crate) struct TraitImportCandidate { | 28 | pub(crate) struct TraitImportCandidate { |
29 | pub ty: hir::Type, | 29 | pub(crate) ty: hir::Type, |
30 | pub name: ast::NameRef, | 30 | pub(crate) name: ast::NameRef, |
31 | } | 31 | } |
32 | 32 | ||
33 | #[derive(Debug)] | 33 | #[derive(Debug)] |
34 | pub(crate) struct PathImportCandidate { | 34 | pub(crate) struct PathImportCandidate { |
35 | pub name: ast::NameRef, | 35 | pub(crate) name: ast::NameRef, |
36 | } | 36 | } |
37 | 37 | ||
38 | #[derive(Debug)] | 38 | #[derive(Debug)] |
diff --git a/crates/assists/src/utils/insert_use.rs b/crates/assists/src/utils/insert_use.rs index 033fbcedc..a76bd5ebf 100644 --- a/crates/assists/src/utils/insert_use.rs +++ b/crates/assists/src/utils/insert_use.rs | |||
@@ -17,13 +17,13 @@ use syntax::{ | |||
17 | use test_utils::mark; | 17 | use test_utils::mark; |
18 | 18 | ||
19 | #[derive(Debug)] | 19 | #[derive(Debug)] |
20 | pub enum ImportScope { | 20 | pub(crate) enum ImportScope { |
21 | File(ast::SourceFile), | 21 | File(ast::SourceFile), |
22 | Module(ast::ItemList), | 22 | Module(ast::ItemList), |
23 | } | 23 | } |
24 | 24 | ||
25 | impl ImportScope { | 25 | impl ImportScope { |
26 | pub fn from(syntax: SyntaxNode) -> Option<Self> { | 26 | pub(crate) fn from(syntax: SyntaxNode) -> Option<Self> { |
27 | if let Some(module) = ast::Module::cast(syntax.clone()) { | 27 | if let Some(module) = ast::Module::cast(syntax.clone()) { |
28 | module.item_list().map(ImportScope::Module) | 28 | module.item_list().map(ImportScope::Module) |
29 | } else if let this @ Some(_) = ast::SourceFile::cast(syntax.clone()) { | 29 | } else if let this @ Some(_) = ast::SourceFile::cast(syntax.clone()) { |