Skip to content

Commit f8fd242

Browse files
authored
Merge pull request #3686 from Veetaha/feature/hover-actual-type-params
ra_hir: add more privacy for Type
2 parents a2f7ca2 + 559aeb2 commit f8fd242

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

crates/ra_hir/src/code_model.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use hir_def::{
1010
docs::Documentation,
1111
expr::{BindingAnnotation, Pat, PatId},
1212
per_ns::PerNs,
13-
resolver::HasResolver,
13+
resolver::{HasResolver, Resolver},
1414
type_ref::{Mutability, TypeRef},
1515
AdtId, AssocContainerId, ConstId, DefWithBodyId, EnumId, FunctionId, GenericDefId, HasModule,
1616
ImplId, LocalEnumVariantId, LocalModuleId, LocalStructFieldId, Lookup, ModuleId, StaticId,
@@ -912,10 +912,8 @@ impl Local {
912912
let def = DefWithBodyId::from(self.parent);
913913
let infer = db.infer(def);
914914
let ty = infer[self.pat_id].clone();
915-
let resolver = def.resolver(db.upcast());
916915
let krate = def.module(db.upcast()).krate;
917-
let environment = TraitEnvironment::lower(db, &resolver);
918-
Type { krate, ty: InEnvironment { value: ty, environment } }
916+
Type::new(db, krate, def, ty)
919917
}
920918

921919
pub fn source(self, db: &dyn HirDatabase) -> InFile<Either<ast::BindPat, ast::SelfParam>> {
@@ -1020,11 +1018,21 @@ impl ImplDef {
10201018

10211019
#[derive(Clone, PartialEq, Eq, Debug)]
10221020
pub struct Type {
1023-
pub(crate) krate: CrateId,
1024-
pub(crate) ty: InEnvironment<Ty>,
1021+
krate: CrateId,
1022+
ty: InEnvironment<Ty>,
10251023
}
10261024

10271025
impl Type {
1026+
pub(crate) fn new_with_resolver(
1027+
db: &dyn HirDatabase,
1028+
resolver: &Resolver,
1029+
ty: Ty,
1030+
) -> Option<Type> {
1031+
let krate = resolver.krate()?;
1032+
let environment = TraitEnvironment::lower(db, &resolver);
1033+
Some(Type { krate, ty: InEnvironment { value: ty, environment } })
1034+
}
1035+
10281036
fn new(db: &dyn HirDatabase, krate: CrateId, lexical_env: impl HasResolver, ty: Ty) -> Type {
10291037
let resolver = lexical_env.resolver(db.upcast());
10301038
let environment = TraitEnvironment::lower(db, &resolver);

crates/ra_hir/src/source_analyzer.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use hir_def::{
1717
AsMacroCall, DefWithBodyId,
1818
};
1919
use hir_expand::{hygiene::Hygiene, name::AsName, HirFileId, InFile};
20-
use hir_ty::{InEnvironment, InferenceResult, TraitEnvironment};
20+
use hir_ty::InferenceResult;
2121
use ra_syntax::{
2222
ast::{self, AstNode},
2323
SyntaxNode, SyntaxNodePtr, TextUnit,
@@ -103,10 +103,6 @@ impl SourceAnalyzer {
103103
Some(res)
104104
}
105105

106-
fn trait_env(&self, db: &dyn HirDatabase) -> Arc<TraitEnvironment> {
107-
TraitEnvironment::lower(db, &self.resolver)
108-
}
109-
110106
pub(crate) fn type_of(&self, db: &dyn HirDatabase, expr: &ast::Expr) -> Option<Type> {
111107
let expr_id = match expr {
112108
ast::Expr::MacroCall(call) => {
@@ -117,15 +113,13 @@ impl SourceAnalyzer {
117113
}?;
118114

119115
let ty = self.infer.as_ref()?[expr_id].clone();
120-
let environment = self.trait_env(db);
121-
Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } })
116+
Type::new_with_resolver(db, &self.resolver, ty)
122117
}
123118

124119
pub(crate) fn type_of_pat(&self, db: &dyn HirDatabase, pat: &ast::Pat) -> Option<Type> {
125120
let pat_id = self.pat_id(pat)?;
126121
let ty = self.infer.as_ref()?[pat_id].clone();
127-
let environment = self.trait_env(db);
128-
Some(Type { krate: self.resolver.krate()?, ty: InEnvironment { value: ty, environment } })
122+
Type::new_with_resolver(db, &self.resolver, ty)
129123
}
130124

131125
pub(crate) fn resolve_method_call(&self, call: &ast::MethodCallExpr) -> Option<Function> {

0 commit comments

Comments
 (0)