//! `caixa-ast` — span-aware Lisp AST, shared by caixa-fmt, caixa-lint,
//! and caixa-lsp.
//!
//! Why a sibling of `tatara-lisp::Sexp`? Because tatara-lisp's reader
//! throws away byte positions (it's a *compiler* — once the Sexp is
//! typed, positions are slack). Tools care about positions: the
//! formatter must re-emit at the original column; the linter must
//! highlight the exact region; the LSP must compute ranges. This crate
//! adds span + trivia (comments, blank lines) to every node while
//! keeping a free conversion to the plain `tatara_lisp::Sexp` for the
//! downstream compile pipeline.
//!
//! The surface grammar matches tatara-lisp exactly (list, symbol,
//! keyword, string, int, float, bool, nil, quote/quasiquote/unquote/
//! splice) — parse the same source, get equivalent trees.
extern crate self as caixa_ast;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;