aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/utils.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-04-29 09:38:18 +0100
committerAleksey Kladov <[email protected]>2020-04-29 09:38:51 +0100
commit73bef854ab854ab1a289944966444453e6f4aadf (patch)
treebc136f0d2f5b733ffc54714e4096f35863bfa3f1 /crates/ra_assists/src/utils.rs
parent549ce9a9cf25efa3eba6549f96b2e43bc640faa9 (diff)
Move shared assist code to utils
Diffstat (limited to 'crates/ra_assists/src/utils.rs')
-rw-r--r--crates/ra_assists/src/utils.rs15
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.
2pub(crate) mod insert_use; 2pub(crate) mod insert_use;
3 3
4use hir::Semantics; 4use hir::{Adt, Semantics, Type};
5use ra_ide_db::RootDatabase; 5use ra_ide_db::RootDatabase;
6use ra_syntax::{ 6use 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
103pub(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}