aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_hir_def/src/builtin_type.rs32
-rw-r--r--crates/ra_ide_api/src/hover.rs8
2 files changed, 34 insertions, 6 deletions
diff --git a/crates/ra_hir_def/src/builtin_type.rs b/crates/ra_hir_def/src/builtin_type.rs
index 12929caa9..2ec0c83fe 100644
--- a/crates/ra_hir_def/src/builtin_type.rs
+++ b/crates/ra_hir_def/src/builtin_type.rs
@@ -3,6 +3,8 @@
3//! A peculiarity of built-in types is that they are always available and are 3//! A peculiarity of built-in types is that they are always available and are
4//! not associated with any particular crate. 4//! not associated with any particular crate.
5 5
6use std::fmt;
7
6use hir_expand::name::{self, Name}; 8use hir_expand::name::{self, Name};
7 9
8#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] 10#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
@@ -61,3 +63,33 @@ impl BuiltinType {
61 (name::F64, BuiltinType::Float { bitness: FloatBitness::X64 }), 63 (name::F64, BuiltinType::Float { bitness: FloatBitness::X64 }),
62 ]; 64 ];
63} 65}
66
67impl fmt::Display for BuiltinType {
68 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
69 let type_name = match self {
70 BuiltinType::Char => "char",
71 BuiltinType::Bool => "bool",
72 BuiltinType::Str => "str",
73 BuiltinType::Int { signedness, bitness } => match (signedness, bitness) {
74 (Signedness::Signed, IntBitness::Xsize) => "isize",
75 (Signedness::Signed, IntBitness::X8) => "i8",
76 (Signedness::Signed, IntBitness::X16) => "i16",
77 (Signedness::Signed, IntBitness::X32) => "i32",
78 (Signedness::Signed, IntBitness::X64) => "i64",
79 (Signedness::Signed, IntBitness::X128) => "i128",
80
81 (Signedness::Unsigned, IntBitness::Xsize) => "usize",
82 (Signedness::Unsigned, IntBitness::X8) => "u8",
83 (Signedness::Unsigned, IntBitness::X16) => "u16",
84 (Signedness::Unsigned, IntBitness::X32) => "u32",
85 (Signedness::Unsigned, IntBitness::X64) => "u64",
86 (Signedness::Unsigned, IntBitness::X128) => "u128",
87 },
88 BuiltinType::Float { bitness } => match bitness {
89 FloatBitness::X32 => "f32",
90 FloatBitness::X64 => "f64",
91 },
92 };
93 f.write_str(type_name)
94 }
95}
diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs
index 244c65814..cc41390b2 100644
--- a/crates/ra_ide_api/src/hover.rs
+++ b/crates/ra_ide_api/src/hover.rs
@@ -1,6 +1,6 @@
1//! FIXME: write short doc here 1//! FIXME: write short doc here
2 2
3use hir::{Adt, BuiltinType, HasSource, HirDisplay}; 3use hir::{Adt, HasSource, HirDisplay};
4use ra_db::SourceDatabase; 4use ra_db::SourceDatabase;
5use ra_syntax::{ 5use ra_syntax::{
6 algo::{ancestors_at_offset, find_covering_element, find_node_at_offset}, 6 algo::{ancestors_at_offset, find_covering_element, find_node_at_offset},
@@ -132,11 +132,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
132 hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)), 132 hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)),
133 hir::ModuleDef::Trait(it) => res.extend(from_def_source(db, it)), 133 hir::ModuleDef::Trait(it) => res.extend(from_def_source(db, it)),
134 hir::ModuleDef::TypeAlias(it) => res.extend(from_def_source(db, it)), 134 hir::ModuleDef::TypeAlias(it) => res.extend(from_def_source(db, it)),
135 hir::ModuleDef::BuiltinType(it) => { 135 hir::ModuleDef::BuiltinType(it) => res.extend(Some(it.to_string())),
136 if let Some(b) = BuiltinType::ALL.iter().find(|(_, ty)| *ty == it) {
137 res.extend(Some(b.0.to_string()))
138 }
139 }
140 }, 136 },
141 Some(SelfType(ty)) => { 137 Some(SelfType(ty)) => {
142 if let Some((adt_def, _)) = ty.as_adt() { 138 if let Some((adt_def, _)) = ty.as_adt() {