[package]
name = "aristo-macros"
description = "Aristo SDK proc-macros: #[aristo::intent], #[aristo::assume]."
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme = "../../README.md"
keywords.workspace = true
rust-version.workspace = true
authors.workspace = true
documentation = "https://docs.rs/aristo-macros"
categories = ["development-tools::procedural-macro-helpers", "development-tools"]

[lints]
workspace = true

[lib]
proc-macro = true

[package.metadata.docs.rs]
# Render with all features on so `aristo_doc`'s rustdoc-injection
# pathway is visible alongside the default `aristo_check` validation.
all-features = true

[features]
default = ["aristo_check"]
# aristo_check: opt-in compile-time validation of single annotations.
# Default-on so dogfooding the SDK on its own source benefits from the
# fastest feedback loop. Downstream users who want zero validation cost
# can disable via `aristo-macros = { default-features = false }`.
aristo_check = []
# aristo_doc: when on, `#[aristo::intent]` and `#[aristo::assume]` inject a
# `#[doc = include_str!(".../.aristo/doc/<id-safe>.md")]` attribute above
# the wrapped item so `cargo doc` renders the Aristo-generated MD inline
# with the function's normal rustdoc. v0 requires an explicit `id = "..."`
# argument (matches the dogfood pattern; lints already encourage explicit
# ids). Off by default so non-doc-rendering builds aren't paying the
# include-time read cost.
aristo_doc = []

[dependencies]
proc-macro2 = "1.0"
quote = "1.0"
syn = { version = "2.0", features = ["full"] }

[dev-dependencies]
# Path-only (no version) intentionally — `aristo` depends on this crate,
# so a path+version dev-dep would create a publish-time cycle that even
# `cargo package` can't resolve. Path-only deps are stripped during
# publish-tarball preparation; locally they still resolve via the
# workspace.
aristo = { path = "../aristo" }
tempfile = "3.10"
trybuild = "1.0"
