diff options
Diffstat (limited to 'crates/ra_hir/src/ty.rs')
-rw-r--r-- | crates/ra_hir/src/ty.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ty.rs b/crates/ra_hir/src/ty.rs index 087385b98..66b204dcd 100644 --- a/crates/ra_hir/src/ty.rs +++ b/crates/ra_hir/src/ty.rs | |||
@@ -6,6 +6,7 @@ use rustc_hash::{FxHashMap, FxHashSet}; | |||
6 | 6 | ||
7 | use std::sync::Arc; | 7 | use std::sync::Arc; |
8 | use std::collections::HashMap; | 8 | use std::collections::HashMap; |
9 | use std::fmt; | ||
9 | 10 | ||
10 | use ra_db::LocalSyntaxPtr; | 11 | use ra_db::LocalSyntaxPtr; |
11 | use ra_syntax::{ | 12 | use ra_syntax::{ |
@@ -184,11 +185,40 @@ impl Ty { | |||
184 | } | 185 | } |
185 | } | 186 | } |
186 | 187 | ||
188 | impl fmt::Display for Ty { | ||
189 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||
190 | match self { | ||
191 | Ty::Bool => write!(f, "bool"), | ||
192 | Ty::Char => write!(f, "char"), | ||
193 | Ty::Int(t) => write!(f, "{}", t.ty_to_string()), | ||
194 | Ty::Uint(t) => write!(f, "{}", t.ty_to_string()), | ||
195 | Ty::Float(t) => write!(f, "{}", t.ty_to_string()), | ||
196 | Ty::Str => write!(f, "str"), | ||
197 | Ty::Slice(t) => write!(f, "[{}]", t), | ||
198 | Ty::Never => write!(f, "!"), | ||
199 | Ty::Tuple(ts) => { | ||
200 | write!(f, "(")?; | ||
201 | for t in ts { | ||
202 | write!(f, "{},", t)?; | ||
203 | } | ||
204 | write!(f, ")") | ||
205 | } | ||
206 | Ty::Unknown => write!(f, "[unknown]") | ||
207 | } | ||
208 | } | ||
209 | } | ||
210 | |||
187 | #[derive(Clone, PartialEq, Eq, Debug)] | 211 | #[derive(Clone, PartialEq, Eq, Debug)] |
188 | pub struct InferenceResult { | 212 | pub struct InferenceResult { |
189 | type_for: FxHashMap<LocalSyntaxPtr, Ty>, | 213 | type_for: FxHashMap<LocalSyntaxPtr, Ty>, |
190 | } | 214 | } |
191 | 215 | ||
216 | impl InferenceResult { | ||
217 | pub fn type_of_node(&self, node: SyntaxNodeRef) -> Option<Ty> { | ||
218 | self.type_for.get(&LocalSyntaxPtr::new(node)).cloned() | ||
219 | } | ||
220 | } | ||
221 | |||
192 | #[derive(Clone, PartialEq, Eq, Debug)] | 222 | #[derive(Clone, PartialEq, Eq, Debug)] |
193 | pub struct InferenceContext { | 223 | pub struct InferenceContext { |
194 | scopes: Arc<FnScopes>, | 224 | scopes: Arc<FnScopes>, |