aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-07-08 20:18:49 +0100
committerbors[bot] <26634292+bors[bot]@users.noreply.github.com>2019-07-08 20:18:49 +0100
commitecdc6cdce997c6ae251dbda2066de929f9d49c49 (patch)
tree74f668500a59141777ded421239b0da33f4853c3 /crates
parent32100022010ecfefd1ea06caa71d1a508d2eb75d (diff)
parent95d78a8d8d3bcb25ff7073c849824985b196c651 (diff)
Merge #1514
1514: Better completions for floating point primitive types r=flodiebold a=marcogroppo After #1499 completions for (some of) the inherent methods of `f32` and `f64` are now working. Unfortunately during method resolution we were only looking for the `f32` and `f64` language items defined in `libcore` and we were ignoring the methods defined in `libstd`. This PR fixes this issue. Co-authored-by: Marco Groppo <[email protected]>
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_hir/src/ty/method_resolution.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/crates/ra_hir/src/ty/method_resolution.rs b/crates/ra_hir/src/ty/method_resolution.rs
index 76ace66ea..f65ad08a8 100644
--- a/crates/ra_hir/src/ty/method_resolution.rs
+++ b/crates/ra_hir/src/ty/method_resolution.rs
@@ -14,7 +14,7 @@ use crate::{
14 nameres::CrateModuleId, 14 nameres::CrateModuleId,
15 resolve::Resolver, 15 resolve::Resolver,
16 traits::TraitItem, 16 traits::TraitItem,
17 ty::primitive::{UncertainFloatTy, UncertainIntTy}, 17 ty::primitive::{FloatBitness, UncertainFloatTy, UncertainIntTy},
18 ty::{Ty, TypeCtor}, 18 ty::{Ty, TypeCtor},
19 Crate, Function, HirDatabase, Module, Name, Trait, 19 Crate, Function, HirDatabase, Module, Name, Trait,
20}; 20};
@@ -132,9 +132,11 @@ fn def_crates(db: &impl HirDatabase, cur_crate: Crate, ty: &Ty) -> Option<ArrayV
132 TypeCtor::Adt(def_id) => Some(std::iter::once(def_id.krate(db)?).collect()), 132 TypeCtor::Adt(def_id) => Some(std::iter::once(def_id.krate(db)?).collect()),
133 TypeCtor::Bool => lang_item_crate!(db, cur_crate, "bool"), 133 TypeCtor::Bool => lang_item_crate!(db, cur_crate, "bool"),
134 TypeCtor::Char => lang_item_crate!(db, cur_crate, "char"), 134 TypeCtor::Char => lang_item_crate!(db, cur_crate, "char"),
135 TypeCtor::Float(UncertainFloatTy::Known(f)) => { 135 TypeCtor::Float(UncertainFloatTy::Known(f)) => match f.bitness {
136 lang_item_crate!(db, cur_crate, f.ty_to_string()) 136 // There are two lang items: one in libcore (fXX) and one in libstd (fXX_runtime)
137 } 137 FloatBitness::X32 => lang_item_crate!(db, cur_crate, "f32", "f32_runtime"),
138 FloatBitness::X64 => lang_item_crate!(db, cur_crate, "f64", "f64_runtime"),
139 },
138 TypeCtor::Int(UncertainIntTy::Known(i)) => { 140 TypeCtor::Int(UncertainIntTy::Known(i)) => {
139 lang_item_crate!(db, cur_crate, i.ty_to_string()) 141 lang_item_crate!(db, cur_crate, i.ty_to_string())
140 } 142 }