From 97807340281d26e8e34f18ef515bb7ec6e13bd1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=A8Florian?= <¨flodiebold@gmail.com¨> Date: Sun, 23 Feb 2025 18:40:31 +0100 Subject: [PATCH] Make GenericParamsCollector::type_or_consts not unnecessarily pub(crate) --- crates/hir-def/src/generics.rs | 14 +++++++++++++- crates/hir-def/src/item_tree/lower.rs | 11 ++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/crates/hir-def/src/generics.rs b/crates/hir-def/src/generics.rs index 8082019379..ed5038c5ae 100644 --- a/crates/hir-def/src/generics.rs +++ b/crates/hir-def/src/generics.rs @@ -10,6 +10,7 @@ use hir_expand::{ name::{AsName, Name}, ExpandResult, }; +use intern::sym; use la_arena::{Arena, RawIdx}; use stdx::{ impl_from, @@ -446,12 +447,23 @@ impl GenericParams { #[derive(Clone, Default)] pub(crate) struct GenericParamsCollector { - pub(crate) type_or_consts: Arena, + type_or_consts: Arena, lifetimes: Arena, where_predicates: Vec, } impl GenericParamsCollector { + pub(crate) fn fill_self_param(&mut self) { + self.type_or_consts.alloc( + TypeParamData { + name: Some(Name::new_symbol_root(sym::Self_.clone())), + default: None, + provenance: TypeParamProvenance::TraitSelf, + } + .into(), + ); + } + pub(crate) fn fill( &mut self, lower_ctx: &mut LowerCtx<'_>, diff --git a/crates/hir-def/src/item_tree/lower.rs b/crates/hir-def/src/item_tree/lower.rs index 71848845a8..b0546d4f33 100644 --- a/crates/hir-def/src/item_tree/lower.rs +++ b/crates/hir-def/src/item_tree/lower.rs @@ -21,7 +21,7 @@ use triomphe::Arc; use crate::{ db::DefDatabase, - generics::{GenericParams, GenericParamsCollector, TypeParamData, TypeParamProvenance}, + generics::{GenericParams, GenericParamsCollector}, item_tree::{ AssocItem, AttrOwner, Const, Either, Enum, ExternBlock, ExternCrate, Field, FieldParent, FieldsShape, FileItemTreeId, FnFlags, Function, GenericArgs, GenericItemSourceMapBuilder, @@ -881,14 +881,7 @@ impl<'a> Ctx<'a> { if let HasImplicitSelf::Yes(bounds) = has_implicit_self { // Traits and trait aliases get the Self type as an implicit first type parameter. - generics.type_or_consts.alloc( - TypeParamData { - name: Some(Name::new_symbol_root(sym::Self_.clone())), - default: None, - provenance: TypeParamProvenance::TraitSelf, - } - .into(), - ); + generics.fill_self_param(); // add super traits as bounds on Self // i.e., `trait Foo: Bar` is equivalent to `trait Foo where Self: Bar` let bound_target = Either::Left(body_ctx.alloc_type_ref_desugared(TypeRef::Path(