mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 21:05:02 +00:00
Use Name::missing consistently
This commit is contained in:
parent
c0bb667a7d
commit
1d14fd1737
7 changed files with 33 additions and 52 deletions
|
@ -330,7 +330,7 @@ impl Struct {
|
||||||
Some(self.module(db).krate())
|
Some(self.module(db).krate())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
|
pub fn name(self, db: &impl DefDatabase) -> Name {
|
||||||
db.struct_data(self.id.into()).name.clone()
|
db.struct_data(self.id.into()).name.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,7 +371,7 @@ pub struct Union {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Union {
|
impl Union {
|
||||||
pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
|
pub fn name(self, db: &impl DefDatabase) -> Name {
|
||||||
db.union_data(self.id).name.clone()
|
db.union_data(self.id).name.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ impl Enum {
|
||||||
Some(self.module(db).krate())
|
Some(self.module(db).krate())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
|
pub fn name(self, db: &impl DefDatabase) -> Name {
|
||||||
db.enum_data(self.id).name.clone()
|
db.enum_data(self.id).name.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -433,11 +433,8 @@ impl Enum {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn variant(self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> {
|
pub fn variant(self, db: &impl DefDatabase, name: &Name) -> Option<EnumVariant> {
|
||||||
db.enum_data(self.id)
|
let id = db.enum_data(self.id).variant(name)?;
|
||||||
.variants
|
Some(EnumVariant { parent: self, id })
|
||||||
.iter()
|
|
||||||
.find(|(_id, data)| data.name.as_ref() == Some(name))
|
|
||||||
.map(|(id, _)| EnumVariant { parent: self, id })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ty(self, db: &impl HirDatabase) -> Type {
|
pub fn ty(self, db: &impl HirDatabase) -> Type {
|
||||||
|
@ -459,7 +456,7 @@ impl EnumVariant {
|
||||||
self.parent
|
self.parent
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
|
pub fn name(self, db: &impl DefDatabase) -> Name {
|
||||||
db.enum_data(self.parent.id).variants[self.id].name.clone()
|
db.enum_data(self.parent.id).variants[self.id].name.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -720,7 +717,7 @@ impl Trait {
|
||||||
Module { id: self.id.module(db) }
|
Module { id: self.id.module(db) }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn name(self, db: &impl DefDatabase) -> Option<Name> {
|
pub fn name(self, db: &impl DefDatabase) -> Name {
|
||||||
db.trait_data(self.id).name.clone()
|
db.trait_data(self.id).name.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,19 +18,19 @@ use crate::{
|
||||||
/// Note that we use `StructData` for unions as well!
|
/// Note that we use `StructData` for unions as well!
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct StructData {
|
pub struct StructData {
|
||||||
pub name: Option<Name>,
|
pub name: Name,
|
||||||
pub variant_data: Arc<VariantData>,
|
pub variant_data: Arc<VariantData>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct EnumData {
|
pub struct EnumData {
|
||||||
pub name: Option<Name>,
|
pub name: Name,
|
||||||
pub variants: Arena<LocalEnumVariantId, EnumVariantData>,
|
pub variants: Arena<LocalEnumVariantId, EnumVariantData>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct EnumVariantData {
|
pub struct EnumVariantData {
|
||||||
pub name: Option<Name>,
|
pub name: Name,
|
||||||
pub variant_data: Arc<VariantData>,
|
pub variant_data: Arc<VariantData>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,14 +51,14 @@ pub struct StructFieldData {
|
||||||
impl StructData {
|
impl StructData {
|
||||||
pub(crate) fn struct_data_query(db: &impl DefDatabase, id: StructId) -> Arc<StructData> {
|
pub(crate) fn struct_data_query(db: &impl DefDatabase, id: StructId) -> Arc<StructData> {
|
||||||
let src = id.source(db);
|
let src = id.source(db);
|
||||||
let name = src.value.name().map(|n| n.as_name());
|
let name = src.value.name().map_or_else(Name::missing, |n| n.as_name());
|
||||||
let variant_data = VariantData::new(src.value.kind());
|
let variant_data = VariantData::new(src.value.kind());
|
||||||
let variant_data = Arc::new(variant_data);
|
let variant_data = Arc::new(variant_data);
|
||||||
Arc::new(StructData { name, variant_data })
|
Arc::new(StructData { name, variant_data })
|
||||||
}
|
}
|
||||||
pub(crate) fn union_data_query(db: &impl DefDatabase, id: UnionId) -> Arc<StructData> {
|
pub(crate) fn union_data_query(db: &impl DefDatabase, id: UnionId) -> Arc<StructData> {
|
||||||
let src = id.source(db);
|
let src = id.source(db);
|
||||||
let name = src.value.name().map(|n| n.as_name());
|
let name = src.value.name().map_or_else(Name::missing, |n| n.as_name());
|
||||||
let variant_data = VariantData::new(
|
let variant_data = VariantData::new(
|
||||||
src.value
|
src.value
|
||||||
.record_field_def_list()
|
.record_field_def_list()
|
||||||
|
@ -73,14 +73,14 @@ impl StructData {
|
||||||
impl EnumData {
|
impl EnumData {
|
||||||
pub(crate) fn enum_data_query(db: &impl DefDatabase, e: EnumId) -> Arc<EnumData> {
|
pub(crate) fn enum_data_query(db: &impl DefDatabase, e: EnumId) -> Arc<EnumData> {
|
||||||
let src = e.source(db);
|
let src = e.source(db);
|
||||||
let name = src.value.name().map(|n| n.as_name());
|
let name = src.value.name().map_or_else(Name::missing, |n| n.as_name());
|
||||||
let mut trace = Trace::new_for_arena();
|
let mut trace = Trace::new_for_arena();
|
||||||
lower_enum(&mut trace, &src.value);
|
lower_enum(&mut trace, &src.value);
|
||||||
Arc::new(EnumData { name, variants: trace.into_arena() })
|
Arc::new(EnumData { name, variants: trace.into_arena() })
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn variant(&self, name: &Name) -> Option<LocalEnumVariantId> {
|
pub fn variant(&self, name: &Name) -> Option<LocalEnumVariantId> {
|
||||||
let (id, _) = self.variants.iter().find(|(_id, data)| data.name.as_ref() == Some(name))?;
|
let (id, _) = self.variants.iter().find(|(_id, data)| &data.name == name)?;
|
||||||
Some(id)
|
Some(id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ fn lower_enum(
|
||||||
trace.alloc(
|
trace.alloc(
|
||||||
|| var.clone(),
|
|| var.clone(),
|
||||||
|| EnumVariantData {
|
|| EnumVariantData {
|
||||||
name: var.name().map(|it| it.as_name()),
|
name: var.name().map_or_else(Name::missing, |it| it.as_name()),
|
||||||
variant_data: Arc::new(VariantData::new(var.kind())),
|
variant_data: Arc::new(VariantData::new(var.kind())),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
@ -86,7 +86,7 @@ impl TypeAliasData {
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct TraitData {
|
pub struct TraitData {
|
||||||
pub name: Option<Name>,
|
pub name: Name,
|
||||||
pub items: Vec<(Name, AssocItemId)>,
|
pub items: Vec<(Name, AssocItemId)>,
|
||||||
pub auto: bool,
|
pub auto: bool,
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ pub struct TraitData {
|
||||||
impl TraitData {
|
impl TraitData {
|
||||||
pub(crate) fn trait_data_query(db: &impl DefDatabase, tr: TraitId) -> Arc<TraitData> {
|
pub(crate) fn trait_data_query(db: &impl DefDatabase, tr: TraitId) -> Arc<TraitData> {
|
||||||
let src = tr.source(db);
|
let src = tr.source(db);
|
||||||
let name = src.value.name().map(|n| n.as_name());
|
let name = src.value.name().map_or_else(Name::missing, |n| n.as_name());
|
||||||
let auto = src.value.is_auto();
|
let auto = src.value.is_auto();
|
||||||
let ast_id_map = db.ast_id_map(src.file_id);
|
let ast_id_map = db.ast_id_map(src.file_id);
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ impl TraitData {
|
||||||
.impl_items()
|
.impl_items()
|
||||||
.map(|item_node| match item_node {
|
.map(|item_node| match item_node {
|
||||||
ast::ImplItem::FnDef(it) => {
|
ast::ImplItem::FnDef(it) => {
|
||||||
let name = it.name().map(|it| it.as_name()).unwrap_or_else(Name::missing);
|
let name = it.name().map_or_else(Name::missing, |it| it.as_name());
|
||||||
let def = FunctionLoc {
|
let def = FunctionLoc {
|
||||||
container,
|
container,
|
||||||
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
|
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
|
||||||
|
@ -114,7 +114,7 @@ impl TraitData {
|
||||||
(name, def)
|
(name, def)
|
||||||
}
|
}
|
||||||
ast::ImplItem::ConstDef(it) => {
|
ast::ImplItem::ConstDef(it) => {
|
||||||
let name = it.name().map(|it| it.as_name()).unwrap_or_else(Name::missing);
|
let name = it.name().map_or_else(Name::missing, |it| it.as_name());
|
||||||
let def = ConstLoc {
|
let def = ConstLoc {
|
||||||
container,
|
container,
|
||||||
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
|
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
|
||||||
|
@ -124,7 +124,7 @@ impl TraitData {
|
||||||
(name, def)
|
(name, def)
|
||||||
}
|
}
|
||||||
ast::ImplItem::TypeAliasDef(it) => {
|
ast::ImplItem::TypeAliasDef(it) => {
|
||||||
let name = it.name().map(|it| it.as_name()).unwrap_or_else(Name::missing);
|
let name = it.name().map_or_else(Name::missing, |it| it.as_name());
|
||||||
let def = TypeAliasLoc {
|
let def = TypeAliasLoc {
|
||||||
container,
|
container,
|
||||||
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
|
ast_id: AstId::new(src.file_id, ast_id_map.ast_id(&it)),
|
||||||
|
@ -214,6 +214,7 @@ impl ImplData {
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct ConstData {
|
pub struct ConstData {
|
||||||
|
/// const _: () = ();
|
||||||
pub name: Option<Name>,
|
pub name: Option<Name>,
|
||||||
pub type_ref: TypeRef,
|
pub type_ref: TypeRef,
|
||||||
}
|
}
|
||||||
|
|
|
@ -362,7 +362,7 @@ where
|
||||||
.variants
|
.variants
|
||||||
.iter()
|
.iter()
|
||||||
.filter_map(|(local_id, variant_data)| {
|
.filter_map(|(local_id, variant_data)| {
|
||||||
let name = variant_data.name.clone()?;
|
let name = variant_data.name.clone();
|
||||||
let variant = EnumVariantId { parent: e, local_id };
|
let variant = EnumVariantId { parent: e, local_id };
|
||||||
let res = Resolution {
|
let res = Resolution {
|
||||||
def: PerNs::both(variant.into(), variant.into()),
|
def: PerNs::both(variant.into(), variant.into()),
|
||||||
|
|
|
@ -901,12 +901,10 @@ impl HirDisplay for ApplicationTy {
|
||||||
let sig = f.db.callable_item_signature(def);
|
let sig = f.db.callable_item_signature(def);
|
||||||
let name = match def {
|
let name = match def {
|
||||||
CallableDef::FunctionId(ff) => f.db.function_data(ff).name.clone(),
|
CallableDef::FunctionId(ff) => f.db.function_data(ff).name.clone(),
|
||||||
CallableDef::StructId(s) => {
|
CallableDef::StructId(s) => f.db.struct_data(s).name.clone(),
|
||||||
f.db.struct_data(s).name.clone().unwrap_or_else(Name::missing)
|
|
||||||
}
|
|
||||||
CallableDef::EnumVariantId(e) => {
|
CallableDef::EnumVariantId(e) => {
|
||||||
let enum_data = f.db.enum_data(e.parent);
|
let enum_data = f.db.enum_data(e.parent);
|
||||||
enum_data.variants[e.local_id].name.clone().unwrap_or_else(Name::missing)
|
enum_data.variants[e.local_id].name.clone()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
match def {
|
match def {
|
||||||
|
@ -929,8 +927,7 @@ impl HirDisplay for ApplicationTy {
|
||||||
AdtId::StructId(it) => f.db.struct_data(it).name.clone(),
|
AdtId::StructId(it) => f.db.struct_data(it).name.clone(),
|
||||||
AdtId::UnionId(it) => f.db.union_data(it).name.clone(),
|
AdtId::UnionId(it) => f.db.union_data(it).name.clone(),
|
||||||
AdtId::EnumId(it) => f.db.enum_data(it).name.clone(),
|
AdtId::EnumId(it) => f.db.enum_data(it).name.clone(),
|
||||||
}
|
};
|
||||||
.unwrap_or_else(Name::missing);
|
|
||||||
write!(f, "{}", name)?;
|
write!(f, "{}", name)?;
|
||||||
if self.parameters.len() > 0 {
|
if self.parameters.len() > 0 {
|
||||||
write!(f, "<")?;
|
write!(f, "<")?;
|
||||||
|
@ -943,7 +940,7 @@ impl HirDisplay for ApplicationTy {
|
||||||
ContainerId::TraitId(it) => it,
|
ContainerId::TraitId(it) => it,
|
||||||
_ => panic!("not an associated type"),
|
_ => panic!("not an associated type"),
|
||||||
};
|
};
|
||||||
let trait_name = f.db.trait_data(trait_).name.clone().unwrap_or_else(Name::missing);
|
let trait_name = f.db.trait_data(trait_).name.clone();
|
||||||
let name = f.db.type_alias_data(type_alias).name.clone();
|
let name = f.db.type_alias_data(type_alias).name.clone();
|
||||||
write!(f, "{}::{}", trait_name, name)?;
|
write!(f, "{}::{}", trait_name, name)?;
|
||||||
if self.parameters.len() > 0 {
|
if self.parameters.len() > 0 {
|
||||||
|
@ -971,8 +968,7 @@ impl HirDisplay for ProjectionTy {
|
||||||
return write!(f, "…");
|
return write!(f, "…");
|
||||||
}
|
}
|
||||||
|
|
||||||
let trait_name =
|
let trait_name = f.db.trait_data(self.trait_(f.db)).name.clone();
|
||||||
f.db.trait_data(self.trait_(f.db)).name.clone().unwrap_or_else(Name::missing);
|
|
||||||
write!(f, "<{} as {}", self.parameters[0].display(f.db), trait_name,)?;
|
write!(f, "<{} as {}", self.parameters[0].display(f.db), trait_name,)?;
|
||||||
if self.parameters.len() > 1 {
|
if self.parameters.len() > 1 {
|
||||||
write!(f, "<")?;
|
write!(f, "<")?;
|
||||||
|
@ -1021,14 +1017,7 @@ impl HirDisplay for Ty {
|
||||||
// We assume that the self type is $0 (i.e. the
|
// We assume that the self type is $0 (i.e. the
|
||||||
// existential) here, which is the only thing that's
|
// existential) here, which is the only thing that's
|
||||||
// possible in actual Rust, and hence don't print it
|
// possible in actual Rust, and hence don't print it
|
||||||
write!(
|
write!(f, "{}", f.db.trait_data(trait_ref.trait_).name.clone())?;
|
||||||
f,
|
|
||||||
"{}",
|
|
||||||
f.db.trait_data(trait_ref.trait_)
|
|
||||||
.name
|
|
||||||
.clone()
|
|
||||||
.unwrap_or_else(Name::missing)
|
|
||||||
)?;
|
|
||||||
if trait_ref.substs.len() > 1 {
|
if trait_ref.substs.len() > 1 {
|
||||||
write!(f, "<")?;
|
write!(f, "<")?;
|
||||||
f.write_joined(&trait_ref.substs[1..], ", ")?;
|
f.write_joined(&trait_ref.substs[1..], ", ")?;
|
||||||
|
@ -1088,7 +1077,7 @@ impl TraitRef {
|
||||||
} else {
|
} else {
|
||||||
write!(f, ": ")?;
|
write!(f, ": ")?;
|
||||||
}
|
}
|
||||||
write!(f, "{}", f.db.trait_data(self.trait_).name.clone().unwrap_or_else(Name::missing))?;
|
write!(f, "{}", f.db.trait_data(self.trait_).name.clone())?;
|
||||||
if self.substs.len() > 1 {
|
if self.substs.len() > 1 {
|
||||||
write!(f, "<")?;
|
write!(f, "<")?;
|
||||||
f.write_joined(&self.substs[1..], ", ")?;
|
f.write_joined(&self.substs[1..], ", ")?;
|
||||||
|
|
|
@ -267,10 +267,7 @@ impl Completions {
|
||||||
|
|
||||||
pub(crate) fn add_enum_variant(&mut self, ctx: &CompletionContext, variant: hir::EnumVariant) {
|
pub(crate) fn add_enum_variant(&mut self, ctx: &CompletionContext, variant: hir::EnumVariant) {
|
||||||
let is_deprecated = is_deprecated(variant, ctx.db);
|
let is_deprecated = is_deprecated(variant, ctx.db);
|
||||||
let name = match variant.name(ctx.db) {
|
let name = variant.name(ctx.db);
|
||||||
Some(it) => it,
|
|
||||||
None => return,
|
|
||||||
};
|
|
||||||
let detail_types = variant.fields(ctx.db).into_iter().map(|field| field.ty(ctx.db));
|
let detail_types = variant.fields(ctx.db).into_iter().map(|field| field.ty(ctx.db));
|
||||||
let detail = join(detail_types.map(|t| t.display(ctx.db).to_string()))
|
let detail = join(detail_types.map(|t| t.display(ctx.db).to_string()))
|
||||||
.separator(", ")
|
.separator(", ")
|
||||||
|
|
|
@ -93,12 +93,9 @@ impl FunctionSignature {
|
||||||
_ => (),
|
_ => (),
|
||||||
};
|
};
|
||||||
|
|
||||||
let parent_name = match variant.parent_enum(db).name(db) {
|
let parent_name = variant.parent_enum(db).name(db).to_string();
|
||||||
Some(name) => name.to_string(),
|
|
||||||
None => "missing".into(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let name = format!("{}::{}", parent_name, variant.name(db).unwrap());
|
let name = format!("{}::{}", parent_name, variant.name(db));
|
||||||
|
|
||||||
let params = variant
|
let params = variant
|
||||||
.fields(db)
|
.fields(db)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue