// System.Meta: what macros are made with (`ys.md` §3, Attributes and macros).
namespace System.Meta;
/// Marks a method as a function-like macro: `Name!(…)` runs it on the
/// call's text (`string Name(string input)`), and the code it gives takes
/// the call's place.
public sealed class ProcMacro : Attribute {}
/// Marks a method as a derive macro: `[Derive(Name)]` on a type runs it on
/// the type (`string Name(Item item)`), and the code it gives is added
/// after the type.
public sealed class DeriveMacro : Attribute {}
/// A declaration as a macro sees it: its name, its word (`class`,
/// `struct`, `record`, `enum`), its fields, its text.
public record Item(string Name, string Kind, List<Field> Fields, string Source);
/// A field of an `Item`: its name and its type as written.
public record Field(string Name, string Type);