From 555aefd71850332b35d9ad601a3e3d156c1de3b0 Mon Sep 17 00:00:00 2001 From: Lucas Franceschino Date: Tue, 10 Dec 2024 15:40:58 +0100 Subject: [PATCH 1/5] misc(nix): add libz to devShell (MacOS needs it) --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index 168556d28..17b4c6a22 100644 --- a/flake.nix +++ b/flake.nix @@ -190,6 +190,7 @@ pkgs.cargo-release pkgs.cargo-insta pkgs.openssl.dev + pkgs.libz.dev pkgs.pkg-config pkgs.rust-analyzer pkgs.toml2json From b74cabd0b5dad3bda956a63a2e74c64518b3eb1b Mon Sep 17 00:00:00 2001 From: Lucas Franceschino Date: Tue, 10 Dec 2024 15:41:38 +0100 Subject: [PATCH 2/5] feat(exporter): add a `kind` on `DefId`s Fixes #1163 --- frontend/exporter/src/types/def_id.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/exporter/src/types/def_id.rs b/frontend/exporter/src/types/def_id.rs index a777ceded..7d0e5deed 100644 --- a/frontend/exporter/src/types/def_id.rs +++ b/frontend/exporter/src/types/def_id.rs @@ -54,6 +54,10 @@ pub struct DefIdContents { /// indexes unless you cannot do otherwise. pub index: (u32, u32), pub is_local: bool, + + /// The kind of definition this `DefId` points to. + #[cfg(not(feature = "extract_names_mode"))] + pub kind: crate::DefKind, } #[cfg(feature = "rustc")] @@ -140,6 +144,8 @@ pub(crate) fn translate_def_id<'tcx, S: BaseState<'tcx>>(s: &S, def_id: RDefId) rustc_hir::def_id::DefIndex::as_u32(def_id.index), ), is_local: def_id.is_local(), + #[cfg(not(feature = "extract_names_mode"))] + kind: tcx.def_kind(def_id).sinto(s), }; let contents = s.with_global_cache(|cache| id_table::Node::new(contents, &mut cache.id_table_session)); From b242ed6271338985a4e10bb15898b3665b357a9d Mon Sep 17 00:00:00 2001 From: Lucas Franceschino Date: Tue, 10 Dec 2024 16:02:01 +0100 Subject: [PATCH 3/5] intro(exporter): `DefKind` --- frontend/exporter/src/types/hir.rs | 50 +++++++++++++++++++++++++++-- frontend/exporter/src/types/span.rs | 2 +- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/frontend/exporter/src/types/hir.rs b/frontend/exporter/src/types/hir.rs index 1c8a23399..27e1b9705 100644 --- a/frontend/exporter/src/types/hir.rs +++ b/frontend/exporter/src/types/hir.rs @@ -62,7 +62,7 @@ impl SInto for hir::Mutability { /// Reflects [`hir::def::CtorKind`] #[derive_group(Serializers)] -#[derive(AdtInto, Clone, Debug, JsonSchema)] +#[derive(AdtInto, JsonSchema, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] #[args(, from: hir::def::CtorKind, state: S as _s)] pub enum CtorKind { Fn, @@ -71,7 +71,7 @@ pub enum CtorKind { /// Reflects [`hir::def::CtorOf`] #[derive_group(Serializers)] -#[derive(AdtInto, Clone, Debug, JsonSchema)] +#[derive(AdtInto, JsonSchema, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] #[args(, from: hir::def::CtorOf, state: S as _s)] pub enum CtorOf { Struct, @@ -1177,7 +1177,51 @@ pub enum AttrKind { DocComment(CommentKind, Symbol), } -sinto_todo!(rustc_hir::def, DefKind); +/// Reflects [`rustc_hir::def::DefKind`] +#[derive(AdtInto)] +#[args(, from: rustc_hir::def::DefKind, state: S as tcx)] +#[derive_group(Serializers)] +#[derive(Debug, JsonSchema, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum DefKind { + Mod, + Struct, + Union, + Enum, + Variant, + Trait, + TyAlias, + ForeignTy, + TraitAlias, + AssocTy, + TyParam, + Fn, + Const, + ConstParam, + Static { + safety: Safety, + mutability: Mutability, + nested: bool, + }, + Ctor(CtorOf, CtorKind), + AssocFn, + AssocConst, + Macro(MacroKind), + ExternCrate, + Use, + ForeignMod, + AnonConst, + InlineConst, + OpaqueTy, + Field, + LifetimeParam, + GlobalAsm, + Impl { + of_trait: bool, + }, + Closure, + SyntheticCoroutineBody, +} + sinto_todo!(rustc_hir, GenericArgs<'a> as HirGenericArgs); sinto_todo!(rustc_hir, InlineAsm<'a>); sinto_todo!(rustc_hir, MissingLifetimeKind); diff --git a/frontend/exporter/src/types/span.rs b/frontend/exporter/src/types/span.rs index a179ca54e..a4b256135 100644 --- a/frontend/exporter/src/types/span.rs +++ b/frontend/exporter/src/types/span.rs @@ -38,7 +38,7 @@ pub enum AstPass { /// Reflects [`rustc_span::hygiene::MacroKind`] #[derive_group(Serializers)] -#[derive(AdtInto, Clone, Debug, JsonSchema)] +#[derive(AdtInto, JsonSchema, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] #[args(, from: rustc_span::hygiene::MacroKind, state: S as _s)] pub enum MacroKind { Bang, From 75853e8984d490b0fa46a6366dfb8704f9540185 Mon Sep 17 00:00:00 2001 From: Lucas Franceschino Date: Wed, 11 Dec 2024 10:53:50 +0100 Subject: [PATCH 4/5] refactor(frontend): move `DefKind` and below to `def_id.rs` --- frontend/exporter/src/types/def_id.rs | 90 ++++++++++++++++++++++++++- frontend/exporter/src/types/hir.rs | 75 ---------------------- frontend/exporter/src/types/span.rs | 10 --- 3 files changed, 89 insertions(+), 86 deletions(-) diff --git a/frontend/exporter/src/types/def_id.rs b/frontend/exporter/src/types/def_id.rs index 7d0e5deed..4d8e2d15a 100644 --- a/frontend/exporter/src/types/def_id.rs +++ b/frontend/exporter/src/types/def_id.rs @@ -18,7 +18,7 @@ use crate::prelude::*; use crate::{AdtInto, JsonSchema}; #[cfg(feature = "rustc")] -use rustc_span::def_id::DefId as RDefId; +use {rustc_hir as hir, rustc_span::def_id::DefId as RDefId}; pub type Symbol = String; @@ -29,6 +29,94 @@ impl<'t, S> SInto for rustc_span::symbol::Symbol { } } +/// Reflects [`hir::Safety`] +#[cfg_attr(not(feature = "extract_names_mode"), derive(AdtInto, JsonSchema))] +#[cfg_attr(not(feature = "extract_names_mode"), args(, from: hir::Safety, state: S as _s))] +#[derive_group(Serializers)] +#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)] +pub enum Safety { + Unsafe, + Safe, +} + +pub type Mutability = bool; + +/// Reflects [`hir::def::CtorKind`] +#[derive_group(Serializers)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[cfg_attr(not(feature = "extract_names_mode"), derive(JsonSchema, AdtInto))] +#[cfg_attr(not(feature = "extract_names_mode"), args(, from: hir::def::CtorKind, state: S as _s))] +pub enum CtorKind { + Fn, + Const, +} + +/// Reflects [`hir::def::CtorOf`] +#[derive_group(Serializers)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[cfg_attr(not(feature = "extract_names_mode"), derive(JsonSchema, AdtInto))] +#[cfg_attr(not(feature = "extract_names_mode"), args(, from: hir::def::CtorOf, state: S as _s))] +pub enum CtorOf { + Struct, + Variant, +} + +/// Reflects [`rustc_span::hygiene::MacroKind`] +#[derive_group(Serializers)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[cfg_attr(not(feature = "extract_names_mode"), derive(JsonSchema, AdtInto))] +#[cfg_attr(not(feature = "extract_names_mode"), args(, from: rustc_span::hygiene::MacroKind, state: S as _s))] +pub enum MacroKind { + Bang, + Attr, + Derive, +} + +/// Reflects [`rustc_hir::def::DefKind`] +#[derive_group(Serializers)] +#[cfg_attr(not(feature = "extract_names_mode"), derive(JsonSchema, AdtInto))] +#[cfg_attr(not(feature = "extract_names_mode"),args(, from: rustc_hir::def::DefKind, state: S as tcx))] +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum DefKind { + Mod, + Struct, + Union, + Enum, + Variant, + Trait, + TyAlias, + ForeignTy, + TraitAlias, + AssocTy, + TyParam, + Fn, + Const, + ConstParam, + Static { + safety: Safety, + mutability: Mutability, + nested: bool, + }, + Ctor(CtorOf, CtorKind), + AssocFn, + AssocConst, + Macro(MacroKind), + ExternCrate, + Use, + ForeignMod, + AnonConst, + InlineConst, + OpaqueTy, + Field, + LifetimeParam, + GlobalAsm, + Impl { + of_trait: bool, + }, + Closure, + SyntheticCoroutineBody, +} + /// Reflects [`rustc_hir::def_id::DefId`] #[derive_group(Serializers)] #[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] diff --git a/frontend/exporter/src/types/hir.rs b/frontend/exporter/src/types/hir.rs index 27e1b9705..42bbf4b20 100644 --- a/frontend/exporter/src/types/hir.rs +++ b/frontend/exporter/src/types/hir.rs @@ -48,8 +48,6 @@ pub enum Movability { Movable, } -pub type Mutability = bool; - #[cfg(feature = "rustc")] impl SInto for hir::Mutability { fn sinto(&self, _s: &S) -> Mutability { @@ -60,24 +58,6 @@ impl SInto for hir::Mutability { } } -/// Reflects [`hir::def::CtorKind`] -#[derive_group(Serializers)] -#[derive(AdtInto, JsonSchema, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] -#[args(, from: hir::def::CtorKind, state: S as _s)] -pub enum CtorKind { - Fn, - Const, -} - -/// Reflects [`hir::def::CtorOf`] -#[derive_group(Serializers)] -#[derive(AdtInto, JsonSchema, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] -#[args(, from: hir::def::CtorOf, state: S as _s)] -pub enum CtorOf { - Struct, - Variant, -} - /// Reflects [`hir::RangeEnd`] #[derive(AdtInto)] #[args(, from: hir::RangeEnd, state: S as _s)] @@ -88,16 +68,6 @@ pub enum RangeEnd { Excluded, } -/// Reflects [`hir::Safety`] -#[derive(AdtInto)] -#[args(, from: hir::Safety, state: S as _s)] -#[derive_group(Serializers)] -#[derive(Clone, Debug, JsonSchema, Hash, PartialEq, Eq, PartialOrd, Ord)] -pub enum Safety { - Unsafe, - Safe, -} - /// Reflects [`hir::ImplicitSelfKind`] #[derive(AdtInto)] #[args(, from: hir::ImplicitSelfKind, state: S as _s)] @@ -1177,51 +1147,6 @@ pub enum AttrKind { DocComment(CommentKind, Symbol), } -/// Reflects [`rustc_hir::def::DefKind`] -#[derive(AdtInto)] -#[args(, from: rustc_hir::def::DefKind, state: S as tcx)] -#[derive_group(Serializers)] -#[derive(Debug, JsonSchema, Clone, PartialEq, Eq, PartialOrd, Ord)] -pub enum DefKind { - Mod, - Struct, - Union, - Enum, - Variant, - Trait, - TyAlias, - ForeignTy, - TraitAlias, - AssocTy, - TyParam, - Fn, - Const, - ConstParam, - Static { - safety: Safety, - mutability: Mutability, - nested: bool, - }, - Ctor(CtorOf, CtorKind), - AssocFn, - AssocConst, - Macro(MacroKind), - ExternCrate, - Use, - ForeignMod, - AnonConst, - InlineConst, - OpaqueTy, - Field, - LifetimeParam, - GlobalAsm, - Impl { - of_trait: bool, - }, - Closure, - SyntheticCoroutineBody, -} - sinto_todo!(rustc_hir, GenericArgs<'a> as HirGenericArgs); sinto_todo!(rustc_hir, InlineAsm<'a>); sinto_todo!(rustc_hir, MissingLifetimeKind); diff --git a/frontend/exporter/src/types/span.rs b/frontend/exporter/src/types/span.rs index a4b256135..6304b32a9 100644 --- a/frontend/exporter/src/types/span.rs +++ b/frontend/exporter/src/types/span.rs @@ -36,16 +36,6 @@ pub enum AstPass { ProcMacroHarness, } -/// Reflects [`rustc_span::hygiene::MacroKind`] -#[derive_group(Serializers)] -#[derive(AdtInto, JsonSchema, Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] -#[args(, from: rustc_span::hygiene::MacroKind, state: S as _s)] -pub enum MacroKind { - Bang, - Attr, - Derive, -} - /// Reflects [`rustc_span::hygiene::ExpnKind`] #[derive(AdtInto)] #[args(<'tcx, S: BaseState<'tcx>>, from: rustc_span::hygiene::ExpnKind, state: S as gstate)] From b28e6ac5485d1140e72323430a1b1dae9b638753 Mon Sep 17 00:00:00 2001 From: Lucas Franceschino Date: Wed, 11 Dec 2024 11:06:15 +0100 Subject: [PATCH 5/5] feat(frontend/def_id): make kind inconditional --- frontend/exporter/src/types/def_id.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/frontend/exporter/src/types/def_id.rs b/frontend/exporter/src/types/def_id.rs index 4d8e2d15a..d5e59b04a 100644 --- a/frontend/exporter/src/types/def_id.rs +++ b/frontend/exporter/src/types/def_id.rs @@ -144,7 +144,6 @@ pub struct DefIdContents { pub is_local: bool, /// The kind of definition this `DefId` points to. - #[cfg(not(feature = "extract_names_mode"))] pub kind: crate::DefKind, } @@ -232,7 +231,6 @@ pub(crate) fn translate_def_id<'tcx, S: BaseState<'tcx>>(s: &S, def_id: RDefId) rustc_hir::def_id::DefIndex::as_u32(def_id.index), ), is_local: def_id.is_local(), - #[cfg(not(feature = "extract_names_mode"))] kind: tcx.def_kind(def_id).sinto(s), }; let contents =