Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/defs.rs')
-rw-r--r--crates/ide-db/src/defs.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/ide-db/src/defs.rs b/crates/ide-db/src/defs.rs
index 502314ed1e..bf4f541ff5 100644
--- a/crates/ide-db/src/defs.rs
+++ b/crates/ide-db/src/defs.rs
@@ -5,9 +5,9 @@
// FIXME: this badly needs rename/rewrite (matklad, 2020-02-06).
+use crate::RootDatabase;
use crate::documentation::{Documentation, HasDocs};
use crate::famous_defs::FamousDefs;
-use crate::RootDatabase;
use arrayvec::ArrayVec;
use either::Either;
use hir::{
@@ -21,8 +21,9 @@ use hir::{
use span::Edition;
use stdx::{format_to, impl_from};
use syntax::{
+ SyntaxKind, SyntaxNode, SyntaxToken,
ast::{self, AstNode},
- match_ast, SyntaxKind, SyntaxNode, SyntaxToken,
+ match_ast,
};
// FIXME: a more precise name would probably be `Symbol`?
@@ -838,6 +839,14 @@ impl NameRefClass {
ast::AsmRegSpec(_) => {
Some(NameRefClass::Definition(Definition::InlineAsmRegOrRegClass(()), None))
},
+ ast::OffsetOfExpr(_) => {
+ let (def, subst) = sema.resolve_offset_of_field(name_ref)?;
+ let def = match def {
+ Either::Left(variant) => Definition::Variant(variant),
+ Either::Right(field) => Definition::Field(field),
+ };
+ Some(NameRefClass::Definition(def, Some(subst)))
+ },
_ => None
}
}
@@ -988,7 +997,6 @@ impl TryFrom<DefWithBody> for Definition {
DefWithBody::Static(it) => Ok(it.into()),
DefWithBody::Const(it) => Ok(it.into()),
DefWithBody::Variant(it) => Ok(it.into()),
- DefWithBody::InTypeConst(_) => Err(()),
}
}
}