Skip to content

Macro definitions should be regular HIR items #87406

Closed
@cjgillot

Description

@cjgillot

Macro definitions are currently handled separately from other item kinds in HIR, either as MacroDef nodes inside hir::Crate::exported_macros or as using the hir::Crate::non_exported_macro_attrs.

They should be transformed into additional variants in the hir::ItemKind enum, and iterated over like any other item.

Instructions:

  • introduce two additional variants hir::ItemKind::ExportedMacro { ast: ast::MacroDef } and hir::ItemKind::NonExportedMacro;
  • move the macro case in rustc_ast_lowering::item::LoweringContext::lower_item into lower_item_kind;
  • remove hir::OwnerNode::{MacroDef, NonExportedMacro} variants.

I recomment waiting on #83723 and #87234 to be merged.

Original idea by @petrochenkov in #83723 (comment)
Should help with #73754

Metadata

Metadata

Labels

A-HIRArea: The high-level intermediate representation (HIR)A-decl-macros-2-0Area: Declarative macros 2.0 (#39412)A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)C-cleanupCategory: PRs that clean code up or issues documenting cleanup.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.F-decl_macro`#![feature(decl_macro)]`T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions