aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty.rs')
-rw-r--r--crates/ra_hir/src/ty.rs30
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
7use std::sync::Arc; 7use std::sync::Arc;
8use std::collections::HashMap; 8use std::collections::HashMap;
9use std::fmt;
9 10
10use ra_db::LocalSyntaxPtr; 11use ra_db::LocalSyntaxPtr;
11use ra_syntax::{ 12use ra_syntax::{
@@ -184,11 +185,40 @@ impl Ty {
184 } 185 }
185} 186}
186 187
188impl 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)]
188pub struct InferenceResult { 212pub struct InferenceResult {
189 type_for: FxHashMap<LocalSyntaxPtr, Ty>, 213 type_for: FxHashMap<LocalSyntaxPtr, Ty>,
190} 214}
191 215
216impl 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)]
193pub struct InferenceContext { 223pub struct InferenceContext {
194 scopes: Arc<FnScopes>, 224 scopes: Arc<FnScopes>,