diff options
Diffstat (limited to 'crates/ra_assists/src/utils.rs')
-rw-r--r-- | crates/ra_assists/src/utils.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/crates/ra_assists/src/utils.rs b/crates/ra_assists/src/utils.rs index 3d6c59bda..316c8b20f 100644 --- a/crates/ra_assists/src/utils.rs +++ b/crates/ra_assists/src/utils.rs | |||
@@ -1,7 +1,7 @@ | |||
1 | //! Assorted functions shared by several assists. | 1 | //! Assorted functions shared by several assists. |
2 | pub(crate) mod insert_use; | 2 | pub(crate) mod insert_use; |
3 | 3 | ||
4 | use hir::Semantics; | 4 | use hir::{Adt, Semantics, Type}; |
5 | use ra_ide_db::RootDatabase; | 5 | use ra_ide_db::RootDatabase; |
6 | use ra_syntax::{ | 6 | use ra_syntax::{ |
7 | ast::{self, make, NameOwner}, | 7 | ast::{self, make, NameOwner}, |
@@ -99,3 +99,16 @@ fn invert_special_case(expr: &ast::Expr) -> Option<ast::Expr> { | |||
99 | _ => None, | 99 | _ => None, |
100 | } | 100 | } |
101 | } | 101 | } |
102 | |||
103 | pub(crate) fn happy_try_variant(sema: &Semantics<RootDatabase>, ty: &Type) -> Option<&'static str> { | ||
104 | let enum_ = match ty.as_adt() { | ||
105 | Some(Adt::Enum(it)) => it, | ||
106 | _ => return None, | ||
107 | }; | ||
108 | [("Result", "Ok"), ("Option", "Some")].iter().find_map(|(known_type, happy_case)| { | ||
109 | if &enum_.name(sema.db).to_string() == known_type { | ||
110 | return Some(*happy_case); | ||
111 | } | ||
112 | None | ||
113 | }) | ||
114 | } | ||