From 0c0e208c321737379d8cfc3617ea5ee163261215 Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Fri, 7 Feb 2025 02:46:30 +0000 Subject: [PATCH] refactor(ast_tools): remove `Def::file_id` method, add `StructDef::file` and `EnumDef::file` methods instead (#8933) Refactor. Remove methods that weren't useful, and replace them with ones which are! --- tasks/ast_tools/src/derives/mod.rs | 17 +++++------------ tasks/ast_tools/src/schema/defs/box.rs | 9 +-------- tasks/ast_tools/src/schema/defs/cell.rs | 9 +-------- tasks/ast_tools/src/schema/defs/enum.rs | 13 +++++++------ tasks/ast_tools/src/schema/defs/mod.rs | 9 +++++---- tasks/ast_tools/src/schema/defs/option.rs | 9 +-------- tasks/ast_tools/src/schema/defs/primitive.rs | 9 +-------- tasks/ast_tools/src/schema/defs/struct.rs | 13 +++++++------ tasks/ast_tools/src/schema/defs/type.rs | 19 ++----------------- tasks/ast_tools/src/schema/defs/vec.rs | 9 +-------- 10 files changed, 31 insertions(+), 85 deletions(-) diff --git a/tasks/ast_tools/src/derives/mod.rs b/tasks/ast_tools/src/derives/mod.rs index 627c84835eb8e..63d9611d3694b 100644 --- a/tasks/ast_tools/src/derives/mod.rs +++ b/tasks/ast_tools/src/derives/mod.rs @@ -150,17 +150,18 @@ pub trait Derive: Runner { let mut crate_contents = FxHashMap::<&str, CrateContent>::default(); for type_def in &schema.types { - let derived = match type_def { + let (derived, file_id) = match type_def { TypeDef::Struct(struct_def) if struct_def.generates_derive(derive_id) => { - self.derive(StructOrEnum::Struct(struct_def), schema) + let derived = self.derive(StructOrEnum::Struct(struct_def), schema); + (derived, struct_def.file_id) } TypeDef::Enum(enum_def) if enum_def.generates_derive(derive_id) => { - self.derive(StructOrEnum::Enum(enum_def), schema) + let derived = self.derive(StructOrEnum::Enum(enum_def), schema); + (derived, enum_def.file_id) } _ => continue, }; - let file_id = type_def.file_id().unwrap(); let content = crate_contents.entry(schema.files[file_id].krate()).or_default(); content.import_file_ids.insert(file_id); @@ -278,14 +279,6 @@ impl Def for StructOrEnum<'_> { } } - /// Get [`FileId`] of file containing definition of this type. - fn file_id(&self) -> Option { - match self { - Self::Struct(struct_def) => struct_def.file_id(), - Self::Enum(enum_def) => enum_def.file_id(), - } - } - /// Get all traits which have derives generated for this type. fn generated_derives(&self) -> Derives { match self { diff --git a/tasks/ast_tools/src/schema/defs/box.rs b/tasks/ast_tools/src/schema/defs/box.rs index f2ac651de39be..9d345d3cc56a6 100644 --- a/tasks/ast_tools/src/schema/defs/box.rs +++ b/tasks/ast_tools/src/schema/defs/box.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use quote::quote; -use super::{extensions::layout::Layout, Def, Derives, FileId, Schema, TypeDef, TypeId}; +use super::{extensions::layout::Layout, Def, Derives, Schema, TypeDef, TypeId}; /// Type definition for a `Box`. #[derive(Debug)] @@ -40,13 +40,6 @@ impl Def for BoxDef { &self.name } - /// Get [`FileId`] of file containing definition of this type. - /// - /// `Box`es are not defined in a file, so returns `None`. - fn file_id(&self) -> Option { - None - } - /// Get all traits which have derives generated for this type. /// /// `Box`es never have any generated derives. diff --git a/tasks/ast_tools/src/schema/defs/cell.rs b/tasks/ast_tools/src/schema/defs/cell.rs index 85406b3a08e2a..63fa6a7eed7f7 100644 --- a/tasks/ast_tools/src/schema/defs/cell.rs +++ b/tasks/ast_tools/src/schema/defs/cell.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use quote::quote; -use super::{extensions::layout::Layout, Def, Derives, FileId, Schema, TypeDef, TypeId}; +use super::{extensions::layout::Layout, Def, Derives, Schema, TypeDef, TypeId}; /// Type definition for a `Cell`. #[derive(Debug)] @@ -40,13 +40,6 @@ impl Def for CellDef { &self.name } - /// Get [`FileId`] of file containing definition of this type. - /// - /// `Cell`s are not defined in a file, so returns `None`. - fn file_id(&self) -> Option { - None - } - /// Get all traits which have derives generated for this type. /// /// `Cell`s never have any generated derives. diff --git a/tasks/ast_tools/src/schema/defs/enum.rs b/tasks/ast_tools/src/schema/defs/enum.rs index e0a0d95f0beb4..1d89516714904 100644 --- a/tasks/ast_tools/src/schema/defs/enum.rs +++ b/tasks/ast_tools/src/schema/defs/enum.rs @@ -16,7 +16,7 @@ use super::{ layout::Layout, visit::{VisitEnum, VisitFieldOrVariant}, }, - Def, Derives, FileId, Schema, TypeDef, TypeId, + Def, Derives, File, FileId, Schema, TypeDef, TypeId, }; pub type Discriminant = u8; @@ -100,6 +100,12 @@ impl EnumDef { self.layout.layout_64.size == 1 } + /// Get the [`File`] which this struct is defined in. + #[expect(dead_code)] + pub fn file<'s>(&self, schema: &'s Schema) -> &'s File { + &schema.files[self.file_id] + } + /// Get iterator over variant indexes. /// /// Only includes own variant, not inherited. @@ -124,11 +130,6 @@ impl Def for EnumDef { &self.name } - /// Get [`FileId`] of file containing definition of this type. - fn file_id(&self) -> Option { - Some(self.file_id) - } - /// Get all traits which have derives generated for this type. fn generated_derives(&self) -> Derives { self.generated_derives diff --git a/tasks/ast_tools/src/schema/defs/mod.rs b/tasks/ast_tools/src/schema/defs/mod.rs index b243540b1ce07..1efed240eb83a 100644 --- a/tasks/ast_tools/src/schema/defs/mod.rs +++ b/tasks/ast_tools/src/schema/defs/mod.rs @@ -3,7 +3,11 @@ use proc_macro2::TokenStream; use quote::quote; use syn::Ident; -use crate::{codegen::DeriveId, utils::create_ident, Schema}; +use crate::{ + codegen::DeriveId, + schema::{File, Schema}, + utils::create_ident, +}; use super::{extensions, Derives, FileId, TypeId}; @@ -32,9 +36,6 @@ pub trait Def { /// Get type name. fn name(&self) -> &str; - /// Get [`FileId`] of file containing definition of this type. - fn file_id(&self) -> Option; - /// Get all traits which have derives generated for this type. fn generated_derives(&self) -> Derives; diff --git a/tasks/ast_tools/src/schema/defs/option.rs b/tasks/ast_tools/src/schema/defs/option.rs index b6eec61a5a55e..4525274bc7839 100644 --- a/tasks/ast_tools/src/schema/defs/option.rs +++ b/tasks/ast_tools/src/schema/defs/option.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use quote::quote; -use super::{extensions::layout::Layout, Def, Derives, FileId, Schema, TypeDef, TypeId}; +use super::{extensions::layout::Layout, Def, Derives, Schema, TypeDef, TypeId}; /// Type definition for an `Option`. #[derive(Debug)] @@ -40,13 +40,6 @@ impl Def for OptionDef { &self.name } - /// Get [`FileId`] of file containing definition of this type. - /// - /// `Options`s are not defined in a file, so returns `None`. - fn file_id(&self) -> Option { - None - } - /// Get all traits which have derives generated for this type. /// /// `Option`s never have any generated derives. diff --git a/tasks/ast_tools/src/schema/defs/primitive.rs b/tasks/ast_tools/src/schema/defs/primitive.rs index ad832e16d5e5f..4399a94cf2a22 100644 --- a/tasks/ast_tools/src/schema/defs/primitive.rs +++ b/tasks/ast_tools/src/schema/defs/primitive.rs @@ -1,7 +1,7 @@ use proc_macro2::TokenStream; use quote::quote; -use super::{extensions::layout::Layout, Def, Derives, FileId, Schema, TypeDef, TypeId}; +use super::{extensions::layout::Layout, Def, Derives, Schema, TypeDef, TypeId}; /// Type definition for a primitive type. /// @@ -33,13 +33,6 @@ impl Def for PrimitiveDef { self.name } - /// Get [`FileId`] of file containing definition of this type. - /// - /// Primitives are not defined in a file, so returns `None`. - fn file_id(&self) -> Option { - None - } - /// Get all traits which have derives generated for this type. /// /// Primitives never have any generated derives. diff --git a/tasks/ast_tools/src/schema/defs/struct.rs b/tasks/ast_tools/src/schema/defs/struct.rs index 46720d63bb73a..03c1fce04c832 100644 --- a/tasks/ast_tools/src/schema/defs/struct.rs +++ b/tasks/ast_tools/src/schema/defs/struct.rs @@ -16,7 +16,7 @@ use super::{ span::SpanStruct, visit::{VisitFieldOrVariant, VisitStruct}, }, - Def, Derives, FileId, Schema, TypeDef, TypeId, + Def, Derives, File, FileId, Schema, TypeDef, TypeId, }; /// Type definition for a struct. @@ -77,6 +77,12 @@ impl StructDef { self.plural_name().to_case(Case::Snake) } + /// Get the [`File`] which this struct is defined in. + #[expect(dead_code)] + pub fn file<'s>(&self, schema: &'s Schema) -> &'s File { + &schema.files[self.file_id] + } + /// Get iterator over field indexes. pub fn field_indices(&self) -> Range { 0..self.fields.len() @@ -94,11 +100,6 @@ impl Def for StructDef { &self.name } - /// Get [`FileId`] of file containing definition of this type. - fn file_id(&self) -> Option { - Some(self.file_id) - } - /// Get all traits which have derives generated for this type. fn generated_derives(&self) -> Derives { self.generated_derives diff --git a/tasks/ast_tools/src/schema/defs/type.rs b/tasks/ast_tools/src/schema/defs/type.rs index 035f2344d807a..524a2a108536e 100644 --- a/tasks/ast_tools/src/schema/defs/type.rs +++ b/tasks/ast_tools/src/schema/defs/type.rs @@ -1,8 +1,8 @@ use proc_macro2::TokenStream; use super::{ - BoxDef, CellDef, Def, Derives, EnumDef, FileId, OptionDef, PrimitiveDef, Schema, StructDef, - TypeId, VecDef, + BoxDef, CellDef, Def, Derives, EnumDef, OptionDef, PrimitiveDef, Schema, StructDef, TypeId, + VecDef, }; /// Type definition for a type. @@ -44,21 +44,6 @@ impl Def for TypeDef { } } - /// Get [`FileId`] of file containing definition of this type. - /// - /// Returns `None` if type is not defined in a file (e.g. primitives). - fn file_id(&self) -> Option { - match self { - TypeDef::Struct(def) => def.file_id(), - TypeDef::Enum(def) => def.file_id(), - TypeDef::Primitive(def) => def.file_id(), - TypeDef::Option(def) => def.file_id(), - TypeDef::Box(def) => def.file_id(), - TypeDef::Vec(def) => def.file_id(), - TypeDef::Cell(def) => def.file_id(), - } - } - /// Get all traits which have derives generated for this type. fn generated_derives(&self) -> Derives { match self { diff --git a/tasks/ast_tools/src/schema/defs/vec.rs b/tasks/ast_tools/src/schema/defs/vec.rs index 32f478e8a0731..727d61ee0cd27 100644 --- a/tasks/ast_tools/src/schema/defs/vec.rs +++ b/tasks/ast_tools/src/schema/defs/vec.rs @@ -3,7 +3,7 @@ use quote::quote; use super::{ extensions::{layout::Layout, visit::VisitVec}, - Def, Derives, FileId, Schema, TypeDef, TypeId, + Def, Derives, Schema, TypeDef, TypeId, }; /// Type definition for a `Vec`. @@ -50,13 +50,6 @@ impl Def for VecDef { &self.name } - /// Get [`FileId`] of file containing definition of this type. - /// - /// `Vec`s are not defined in a file, so returns `None`. - fn file_id(&self) -> Option { - None - } - /// Get all traits which have derives generated for this type. /// /// `Vec`s never have any generated derives.