mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 14:51:48 +00:00
internal: Enforce Resolver to always have a module scope
This commit is contained in:
parent
ef92453dfe
commit
75689f2ad8
71 changed files with 360 additions and 398 deletions
|
@ -420,9 +420,8 @@ pub(crate) fn associated_ty_data_query(
|
|||
.collect();
|
||||
|
||||
if !ctx.unsized_types.borrow().contains(&self_ty) {
|
||||
let sized_trait = resolver
|
||||
.krate()
|
||||
.and_then(|krate| db.lang_item(krate, SmolStr::new_inline("sized")))
|
||||
let sized_trait = db
|
||||
.lang_item(resolver.krate(), SmolStr::new_inline("sized"))
|
||||
.and_then(|lang_item| lang_item.as_trait().map(to_chalk_trait_id));
|
||||
let sized_bound = sized_trait.into_iter().map(|sized_trait| {
|
||||
let trait_bound =
|
||||
|
|
|
@ -762,7 +762,7 @@ impl<'a> InferenceContext<'a> {
|
|||
}
|
||||
|
||||
fn resolve_lang_item(&self, name: Name) -> Option<LangItemTarget> {
|
||||
let krate = self.resolver.krate()?;
|
||||
let krate = self.resolver.krate();
|
||||
self.db.lang_item(krate, name.to_smol_str())
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ use crate::{
|
|||
const_or_path_to_chalk, generic_arg_to_chalk, lower_to_chalk_mutability, ParamLoweringMode,
|
||||
},
|
||||
mapping::{from_chalk, ToChalk},
|
||||
method_resolution,
|
||||
method_resolution::{self, VisibleFromModule},
|
||||
primitive::{self, UintTy},
|
||||
static_lifetime, to_chalk_trait_id,
|
||||
utils::{generics, Generics},
|
||||
|
@ -487,13 +487,8 @@ impl<'a> InferenceContext<'a> {
|
|||
}
|
||||
_ => return None,
|
||||
};
|
||||
let module = self.resolver.module();
|
||||
let is_visible = module
|
||||
.map(|mod_id| {
|
||||
self.db.field_visibilities(field_id.parent)[field_id.local_id]
|
||||
.is_visible_from(self.db.upcast(), mod_id)
|
||||
})
|
||||
.unwrap_or(true);
|
||||
let is_visible = self.db.field_visibilities(field_id.parent)[field_id.local_id]
|
||||
.is_visible_from(self.db.upcast(), self.resolver.module());
|
||||
if !is_visible {
|
||||
// Write down the first field resolution even if it is not visible
|
||||
// This aids IDE features for private fields like goto def and in
|
||||
|
@ -946,7 +941,7 @@ impl<'a> InferenceContext<'a> {
|
|||
self.db,
|
||||
self.trait_env.clone(),
|
||||
&traits_in_scope,
|
||||
self.resolver.module().into(),
|
||||
VisibleFromModule::Filter(self.resolver.module()),
|
||||
method_name,
|
||||
);
|
||||
let (receiver_ty, method_ty, substs) = match resolved {
|
||||
|
|
|
@ -9,8 +9,11 @@ use hir_def::{
|
|||
use hir_expand::name::Name;
|
||||
|
||||
use crate::{
|
||||
builder::ParamKind, consteval, method_resolution, GenericArgData, Interner, Substitution,
|
||||
TraitRefExt, Ty, TyBuilder, TyExt, TyKind, ValueTyDefId,
|
||||
builder::ParamKind,
|
||||
consteval,
|
||||
method_resolution::{self, VisibleFromModule},
|
||||
GenericArgData, Interner, Substitution, TraitRefExt, Ty, TyBuilder, TyExt, TyKind,
|
||||
ValueTyDefId,
|
||||
};
|
||||
|
||||
use super::{ExprOrPatId, InferenceContext, TraitRef};
|
||||
|
@ -231,7 +234,7 @@ impl<'a> InferenceContext<'a> {
|
|||
self.db,
|
||||
self.table.trait_env.clone(),
|
||||
&traits_in_scope,
|
||||
self.resolver.module().into(),
|
||||
VisibleFromModule::Filter(self.resolver.module()),
|
||||
Some(name),
|
||||
method_resolution::LookupMode::Path,
|
||||
move |_ty, item| {
|
||||
|
|
|
@ -335,12 +335,13 @@ impl<'a> TyLoweringContext<'a> {
|
|||
let mut expander = self.expander.borrow_mut();
|
||||
if expander.is_some() {
|
||||
(Some(expander), false)
|
||||
} else if let Some(module_id) = self.resolver.module() {
|
||||
*expander =
|
||||
Some(Expander::new(self.db.upcast(), macro_call.file_id, module_id));
|
||||
(Some(expander), true)
|
||||
} else {
|
||||
(None, false)
|
||||
*expander = Some(Expander::new(
|
||||
self.db.upcast(),
|
||||
macro_call.file_id,
|
||||
self.resolver.module(),
|
||||
));
|
||||
(Some(expander), true)
|
||||
}
|
||||
};
|
||||
let ty = if let Some(mut expander) = expander {
|
||||
|
@ -860,9 +861,8 @@ impl<'a> TyLoweringContext<'a> {
|
|||
}
|
||||
TypeBound::Path(path, TraitBoundModifier::Maybe) => {
|
||||
let sized_trait = self
|
||||
.resolver
|
||||
.krate()
|
||||
.and_then(|krate| self.db.lang_item(krate, SmolStr::new_inline("sized")))
|
||||
.db
|
||||
.lang_item(self.resolver.krate(), SmolStr::new_inline("sized"))
|
||||
.and_then(|lang_item| lang_item.as_trait());
|
||||
// Don't lower associated type bindings as the only possible relaxed trait bound
|
||||
// `?Sized` has no of them.
|
||||
|
@ -1268,9 +1268,8 @@ fn implicitly_sized_clauses<'a>(
|
|||
) -> impl Iterator<Item = WhereClause> + 'a {
|
||||
let is_trait_def = matches!(def, GenericDefId::TraitId(..));
|
||||
let generic_args = &substitution.as_slice(Interner)[is_trait_def as usize..];
|
||||
let sized_trait = resolver
|
||||
.krate()
|
||||
.and_then(|krate| db.lang_item(krate, SmolStr::new_inline("sized")))
|
||||
let sized_trait = db
|
||||
.lang_item(resolver.krate(), SmolStr::new_inline("sized"))
|
||||
.and_then(|lang_item| lang_item.as_trait().map(to_chalk_trait_id));
|
||||
|
||||
sized_trait.into_iter().flat_map(move |sized_trait| {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue