Differentiate method/tymethod by determining 'defaultness'

Currently a method only has defaultness if it is a provided trait
method, but this will change when specialisation is available and may
need to become a concept known to hir.

I opted to go for a 'fewest changes' approach given specialisation is
still under development.
This commit is contained in:
Zac Pullar-Strecker 2020-09-03 19:55:24 +12:00
parent 62b76e7004
commit c648884397
7 changed files with 31 additions and 9 deletions

View file

@ -772,7 +772,14 @@ impl Function {
hir_ty::diagnostics::validate_body(db, self.id.into(), sink)
}
pub fn parent_def(self, db: &dyn HirDatabase) -> Option<MethodOwner> {
/// Whether this function declaration has a definition.
///
/// This is false in the case of required (not provided) trait methods.
pub fn has_body(self, db: &dyn HirDatabase) -> bool {
db.function_data(self.id).has_body
}
pub fn method_owner(self, db: &dyn HirDatabase) -> Option<MethodOwner> {
match self.as_assoc_item(db).map(|assoc| assoc.container(db)) {
Some(AssocItemContainer::Trait(t)) => Some(t.into()),
Some(AssocItemContainer::ImplDef(imp)) => {

View file

@ -35,8 +35,8 @@ pub use crate::{
code_model::{
Access, Adt, AsAssocItem, AssocItem, AssocItemContainer, Callable, CallableKind, Const,
Crate, CrateDependency, DefWithBody, Enum, EnumVariant, Field, FieldSource, Function,
GenericDef, HasVisibility, ImplDef, Local, MacroDef, Module, ModuleDef, ScopeDef, Static,
Struct, Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility,
GenericDef, HasVisibility, ImplDef, Local, MacroDef, MethodOwner, Module, ModuleDef,
ScopeDef, Static, Struct, Trait, Type, TypeAlias, TypeParam, Union, VariantDef, Visibility,
},
has_source::HasSource,
semantics::{original_range, PathResolution, Semantics, SemanticsScope},