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
+4 -4
View File
@@ -575,15 +575,15 @@ fn collect_block_items(&mut self, block: &ast::BlockExpr) {
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),
);
}
}
+2 -2
View File
@@ -151,7 +151,7 @@ pub(crate) fn collect_legacy_macros(&self) -> FxHashMap<Name, MacroDefId> {
}
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 @@ pub(crate) fn from_def(def: ModuleDefId, v: Visibility, favor_types: bool) -> Pe
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)
+3 -3
View File
@@ -844,7 +844,7 @@ fn define_def(&mut self, def: &raw::DefData, attrs: &Attrs) {
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 @@ fn define_def(&mut self, def: &raw::DefData, attrs: &Attrs) {
.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 @@ fn define_def(&mut self, def: &raw::DefData, attrs: &Attrs) {
.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,
)
}