Change favor_types to has_constructor

This commit is contained in:
Edwin Cheng 2020-05-05 01:15:27 +08:00
parent 5ae18f4f81
commit e921195d93
3 changed files with 9 additions and 9 deletions

View file

@ -575,15 +575,15 @@ impl ExprCollector<'_> {
self.body.item_scope.define_def(def);
if let Some(name) = name {
let vis = crate::visibility::Visibility::Public; // FIXME determine correctly
let favor_types = match def {
let has_constructor = match def {
ModuleDefId::AdtId(AdtId::StructId(s)) => {
self.db.struct_data(s).variant_data.kind() == StructKind::Record
self.db.struct_data(s).variant_data.kind() != StructKind::Record
}
_ => false,
_ => true,
};
self.body.item_scope.push_res(
name.as_name(),
crate::per_ns::PerNs::from_def(def, vis, favor_types),
crate::per_ns::PerNs::from_def(def, vis, has_constructor),
);
}
}

View file

@ -151,7 +151,7 @@ impl ItemScope {
}
impl PerNs {
pub(crate) fn from_def(def: ModuleDefId, v: Visibility, favor_types: bool) -> PerNs {
pub(crate) fn from_def(def: ModuleDefId, v: Visibility, has_constructor: bool) -> PerNs {
match def {
ModuleDefId::ModuleId(_) => PerNs::types(def, v),
ModuleDefId::FunctionId(_) => PerNs::values(def, v),
@ -159,7 +159,7 @@ impl PerNs {
AdtId::UnionId(_) => PerNs::both(def, def, v),
AdtId::EnumId(_) => PerNs::types(def, v),
AdtId::StructId(_) => {
if favor_types {
if !has_constructor {
PerNs::types(def, v)
} else {
PerNs::both(def, def, v)

View file

@ -844,7 +844,7 @@ impl ModCollector<'_, '_> {
let name = def.name.clone();
let container = ContainerId::ModuleId(module);
let vis = &def.visibility;
let mut favor_types = false;
let mut has_constructor = false;
let def: ModuleDefId = match def.kind {
raw::DefKind::Function(ast_id) => FunctionLoc {
@ -854,7 +854,7 @@ impl ModCollector<'_, '_> {
.intern(self.def_collector.db)
.into(),
raw::DefKind::Struct(ast_id, mode) => {
favor_types = mode == raw::StructDefKind::Record;
has_constructor = mode != raw::StructDefKind::Record;
StructLoc { container, ast_id: AstId::new(self.file_id, ast_id) }
.intern(self.def_collector.db)
.into()
@ -899,7 +899,7 @@ impl ModCollector<'_, '_> {
.unwrap_or(Visibility::Public);
self.def_collector.update(
self.module_id,
&[(name, PerNs::from_def(def, vis, favor_types))],
&[(name, PerNs::from_def(def, vis, has_constructor))],
vis,
)
}