Skip to content

feat(meta): add Neg variant to Arg for negated flags#29

Open
ldseraph wants to merge 1 commit into
aacebo:mainfrom
ldseraph:feat/neg-flag
Open

feat(meta): add Neg variant to Arg for negated flags#29
ldseraph wants to merge 1 commit into
aacebo:mainfrom
ldseraph:feat/neg-flag

Conversation

@ldseraph

Copy link
Copy Markdown

Add support for negated flags (e.g. -debug, -clone) to disable bool fields in #[derive(Attribute)] structs.

Changes:

  • Add Arg::Neg(Ident) variant with parsing, ToTokens, is_neg(), as_neg()
  • Add Args::has_flag() and Args::has_neg() for variant-aware queries
  • FromArg for bool: Neg returns false (Flag returns true)
  • FromArg for Ident/Path: accept both Flag and Neg
  • emit.rs: bool fields respect #[zyn(default = true/false)]
    • default = true → !args.has_neg(key) (on unless negated)
    • default = false → args.has_flag(key) (same as no default)
    • non-literal expr → generic match + FromArg fallback

Usage:
#[derive(Attribute)]
#[zyn("opt")]
struct Opt {
#[zyn(default = true)]
debug: bool, // on by default, use -debug to disable
display: bool, // off by default, use display to enable
}

Add support for negated flags (e.g. -debug, -clone) to disable bool
fields in #[derive(Attribute)] structs.

Changes:
- Add Arg::Neg(Ident) variant with parsing, ToTokens, is_neg(), as_neg()
- Add Args::has_flag() and Args::has_neg() for variant-aware queries
- FromArg for bool: Neg returns false (Flag returns true)
- FromArg for Ident/Path: accept both Flag and Neg
- emit.rs: bool fields respect #[zyn(default = true/false)]
  - default = true  → !args.has_neg(key) (on unless negated)
  - default = false → args.has_flag(key) (same as no default)
  - non-literal expr → generic match + FromArg fallback

Usage:
  #[derive(Attribute)]
  #[zyn("opt")]
  struct Opt {
      #[zyn(default = true)]
      debug: bool,   // on by default, use -debug to disable
      display: bool, // off by default, use display to enable
  }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant