//! # ecma-lex-cat
//!
//! ECMAScript lexer producing `Spanned<Token>` values that downstream
//! parsers feed into [`ecma_syntax_cat`].
//!
//! ## Quick start
//!
//! ```
//! # fn main() -> Result<(), ecma_lex_cat::error::Error> {
//! use ecma_lex_cat::lex;
//! use ecma_lex_cat::token::TokenKind;
//!
//! let tokens = lex("let x = 42;")?;
//! match tokens.first().map(|t| t.value()) {
//!     Some(TokenKind::KwLet) => {}
//!     other => panic!("expected let, got {other:?}"),
//! }
//! # Ok(())
//! # }
//! ```
//!
//! ## Coverage
//!
//! - All ES2024 keywords and punctuators.
//! - All numeric forms (decimal, hex, octal, binary, exponent, `BigInt`).
//! - String literals with full escape handling.
//! - Template literals with `${}` interpolation (tracked via an internal
//!   template-context stack).
//! - Regex literals with last-token-based disambiguation.
//! - Line and block comments (skipped, not tokenised).
//!
//! Deferred to v0.2: Unicode identifier characters beyond ASCII, numeric
//! separators (`1_000`), hashbang lines, legacy octal literals.

pub mod error;
pub mod keyword;
pub mod lexer;
pub mod number;
pub mod regex;
pub mod string;
pub mod template;
pub mod token;

pub use error::Error;
pub use lexer::lex;
pub use token::{Token, TokenKind};
