diff options
author | Aleksey Kladov <[email protected]> | 2020-05-20 09:51:48 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-05-20 09:51:48 +0100 |
commit | d8881d98d3d1c88335c5f00328f1f2fc0100dd62 (patch) | |
tree | 76854b4bd5ee2aa41e423b694105ddf1d14b3741 /crates/ra_assists/src/utils.rs | |
parent | c0bcaea46652ade4259559f08368179d54d4fdd1 (diff) |
Fix Some|None order in fill_match_arms
Diffstat (limited to 'crates/ra_assists/src/utils.rs')
-rw-r--r-- | crates/ra_assists/src/utils.rs | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/crates/ra_assists/src/utils.rs b/crates/ra_assists/src/utils.rs index 9af27180b..0038a9764 100644 --- a/crates/ra_assists/src/utils.rs +++ b/crates/ra_assists/src/utils.rs | |||
@@ -3,7 +3,7 @@ pub(crate) mod insert_use; | |||
3 | 3 | ||
4 | use std::{iter, ops}; | 4 | use std::{iter, ops}; |
5 | 5 | ||
6 | use hir::{Adt, Crate, Semantics, Trait, Type}; | 6 | use hir::{Adt, Crate, Enum, ScopeDef, Semantics, Trait, Type}; |
7 | use ra_ide_db::RootDatabase; | 7 | use ra_ide_db::RootDatabase; |
8 | use ra_syntax::{ | 8 | use ra_syntax::{ |
9 | ast::{self, make, NameOwner}, | 9 | ast::{self, make, NameOwner}, |
@@ -200,13 +200,19 @@ impl FamousDefs<'_, '_> { | |||
200 | #[cfg(test)] | 200 | #[cfg(test)] |
201 | pub(crate) const FIXTURE: &'static str = r#" | 201 | pub(crate) const FIXTURE: &'static str = r#" |
202 | //- /libcore.rs crate:core | 202 | //- /libcore.rs crate:core |
203 | pub mod convert{ | 203 | pub mod convert { |
204 | pub trait From<T> { | 204 | pub trait From<T> { |
205 | fn from(T) -> Self; | 205 | fn from(T) -> Self; |
206 | } | 206 | } |
207 | } | 207 | } |
208 | 208 | ||
209 | pub mod prelude { pub use crate::convert::From } | 209 | pub mod option { |
210 | pub enum Option<T> { None, Some(T)} | ||
211 | } | ||
212 | |||
213 | pub mod prelude { | ||
214 | pub use crate::{convert::From, option::Option::{self, *}}; | ||
215 | } | ||
210 | #[prelude_import] | 216 | #[prelude_import] |
211 | pub use prelude::*; | 217 | pub use prelude::*; |
212 | "#; | 218 | "#; |
@@ -215,7 +221,25 @@ pub use prelude::*; | |||
215 | self.find_trait("core:convert:From") | 221 | self.find_trait("core:convert:From") |
216 | } | 222 | } |
217 | 223 | ||
224 | pub(crate) fn core_option_Option(&self) -> Option<Enum> { | ||
225 | self.find_enum("core:option:Option") | ||
226 | } | ||
227 | |||
218 | fn find_trait(&self, path: &str) -> Option<Trait> { | 228 | fn find_trait(&self, path: &str) -> Option<Trait> { |
229 | match self.find_def(path)? { | ||
230 | hir::ScopeDef::ModuleDef(hir::ModuleDef::Trait(it)) => Some(it), | ||
231 | _ => None, | ||
232 | } | ||
233 | } | ||
234 | |||
235 | fn find_enum(&self, path: &str) -> Option<Enum> { | ||
236 | match self.find_def(path)? { | ||
237 | hir::ScopeDef::ModuleDef(hir::ModuleDef::Adt(hir::Adt::Enum(it))) => Some(it), | ||
238 | _ => None, | ||
239 | } | ||
240 | } | ||
241 | |||
242 | fn find_def(&self, path: &str) -> Option<ScopeDef> { | ||
219 | let db = self.0.db; | 243 | let db = self.0.db; |
220 | let mut path = path.split(':'); | 244 | let mut path = path.split(':'); |
221 | let trait_ = path.next_back()?; | 245 | let trait_ = path.next_back()?; |
@@ -240,9 +264,6 @@ pub use prelude::*; | |||
240 | } | 264 | } |
241 | let def = | 265 | let def = |
242 | module.scope(db, None).into_iter().find(|(name, _def)| &name.to_string() == trait_)?.1; | 266 | module.scope(db, None).into_iter().find(|(name, _def)| &name.to_string() == trait_)?.1; |
243 | match def { | 267 | Some(def) |
244 | hir::ScopeDef::ModuleDef(hir::ModuleDef::Trait(it)) => Some(it), | ||
245 | _ => None, | ||
246 | } | ||
247 | } | 268 | } |
248 | } | 269 | } |