use namespaced consts for KnownName

This commit is contained in:
Unreal Hoang 2019-07-09 00:45:12 +09:00
parent 944f71afc6
commit 741fc8fbfc
No known key found for this signature in database
GPG key ID: F66217BDC6F37CFA

View file

@ -40,7 +40,7 @@ use crate::{
PatId, Statement, UnaryOp, PatId, Statement, UnaryOp,
}, },
generics::{GenericParams, HasGenericParams}, generics::{GenericParams, HasGenericParams},
name::{INTO_ITERATOR, ITEM, ITER, SELF_TYPE, STD}, name,
nameres::{Namespace, PerNs}, nameres::{Namespace, PerNs},
path::{GenericArg, GenericArgs, PathKind, PathSegment}, path::{GenericArg, GenericArgs, PathKind, PathSegment},
resolve::{ resolve::{
@ -843,7 +843,7 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
// Parent arguments are unknown, except for the receiver type // Parent arguments are unknown, except for the receiver type
if let Some(parent_generics) = def_generics.and_then(|p| p.parent_params.clone()) { if let Some(parent_generics) = def_generics.and_then(|p| p.parent_params.clone()) {
for param in &parent_generics.params { for param in &parent_generics.params {
if param.name == SELF_TYPE { if param.name == name::SELF_TYPE {
substs.push(receiver_ty.clone()); substs.push(receiver_ty.clone());
} else { } else {
substs.push(Ty::Unknown); substs.push(Ty::Unknown);
@ -1362,35 +1362,33 @@ impl<'a, D: HirDatabase> InferenceContext<'a, D> {
let into_iter_path = Path { let into_iter_path = Path {
kind: PathKind::Abs, kind: PathKind::Abs,
segments: vec![ segments: vec![
PathSegment { name: STD, args_and_bindings: None }, PathSegment { name: name::STD, args_and_bindings: None },
PathSegment { name: ITER, args_and_bindings: None }, PathSegment { name: name::ITER, args_and_bindings: None },
PathSegment { name: INTO_ITERATOR, args_and_bindings: None }, PathSegment { name: name::INTO_ITERATOR, args_and_bindings: None },
], ],
}; };
match self.resolver.resolve_path_segments(self.db, &into_iter_path).into_fully_resolved() { match self.resolver.resolve_path_segments(self.db, &into_iter_path).into_fully_resolved() {
PerNs { types: Some(Def(Trait(trait_))), .. } => { PerNs { types: Some(Def(Trait(trait_))), .. } => {
Some(trait_.associated_type_by_name(self.db, ITEM)?) Some(trait_.associated_type_by_name(self.db, name::ITEM)?)
} }
_ => None, _ => None,
} }
} }
fn resolve_ops_try_ok(&self) -> Option<TypeAlias> { fn resolve_ops_try_ok(&self) -> Option<TypeAlias> {
use crate::name::{OK, OPS, TRY};
let ops_try_path = Path { let ops_try_path = Path {
kind: PathKind::Abs, kind: PathKind::Abs,
segments: vec![ segments: vec![
PathSegment { name: STD, args_and_bindings: None }, PathSegment { name: name::STD, args_and_bindings: None },
PathSegment { name: OPS, args_and_bindings: None }, PathSegment { name: name::OPS, args_and_bindings: None },
PathSegment { name: TRY, args_and_bindings: None }, PathSegment { name: name::TRY, args_and_bindings: None },
], ],
}; };
match self.resolver.resolve_path_segments(self.db, &ops_try_path).into_fully_resolved() { match self.resolver.resolve_path_segments(self.db, &ops_try_path).into_fully_resolved() {
PerNs { types: Some(Def(Trait(trait_))), .. } => { PerNs { types: Some(Def(Trait(trait_))), .. } => {
Some(trait_.associated_type_by_name(self.db, OK)?) Some(trait_.associated_type_by_name(self.db, name::OK)?)
} }
_ => None, _ => None,
} }