# omena-parser

`omena-parser` is the parser track for the Omena CSS engine.

It owns the stable public parser surface, tokenizer, CST builder, recovery vocabulary, style-fact extraction, and dialect-extension seams used by the product query, bridge, LSP, and transform consumers.

Current scope:

- `ParseResult` over a `cstree` green root.
- `ParserCstEquivalenceSummaryV0` verifies that parser CST nodes and tokens use
  the shared `omena-syntax` `SyntaxKind` contract with source-text round-trip
  and typed-wrapper evidence.
- `LexResult` exposes token kind, original range, and token text for
  differential token checks.
- `omena-parser-summary` exposes the parser-owned parity-lite summary used by
  the public parser lane for selectors, CSS Modules values, keyframes, and
  structural CSS-family counts.
- `omena-parser-css-modules-intermediate` exposes the parser-owned
  CSS Modules intermediate index summary used by the parser index-bridge gate,
  including values, custom properties, Sass symbols, wrappers, keyframes,
  composes, and nested BEM selector metadata.
- `omena-parser-canonical-candidate`, `omena-parser-evaluator-candidates`, and
  `omena-parser-canonical-producer` expose the parser-owned wrapper summaries
  used by the parser public-product lane.
- Recursive-descent parser core coverage is explicit: stylesheet/rule/
  declaration entry points, Selectors L4 CST slices, registered at-rule
  preludes, CSS nesting, SCSS/Sass/Less dialect statements, Bogus recovery, and
  style-fact extraction are ready. The complete external CSS-family spec mirror
  remains a separate conformance target.
- Typed CST wrapper accessors for the current stylesheet, rule, selector,
  declaration, value, component-value, component-value-list, simple-block,
  custom-property-value, and at-rule nodes.
- Typed Bogus-node wrapper accessors for recovery-aware consumers.
- CSS Syntax entry points for rule lists, component values, component-value
  lists, comma-separated component-value lists, and simple blocks.
- CSS custom property declarations parse values as arbitrary component-value lists.
- Pratt value parser core coverage is explicit: unary `+`/`-`, additive and
  multiplicative precedence, parenthesized expressions, function argument
  lists, specialized CSS value function families, and value-level recovery are
  ready. The product cutover gate is ready, while the full CSS property-value
  grammar registry remains a separate conformance-depth target.
- Functional pseudo-classes that carry selector lists (`:is`, `:where`,
  `:has`, `:not`, `:local`, `:global`) now surface nested selector-list CST
  nodes and isolate malformed selector-list items as Bogus selectors.
- `:nth-child()`, `:nth-last-child()`, `:nth-of-type()`, and
  `:nth-last-of-type()` expose formula arguments, including `of
<selector-list>`, as structured CST nodes.
- `:has()` arguments are represented as relative selector lists, preserving
  leading combinators for downstream selector semantics.
- `:lang()` and `:dir()` expose dedicated argument CST nodes for linguistic
  selector semantics.
- Attribute selectors expose dedicated name, matcher, value, and modifier
  nodes, including Selectors L4 case-sensitivity flags.
- Missing block-close recovery markers represented as `BogusTrivia`.
- Panic-free tokenizer for CSS-family source slices using char-boundary-safe cursor movement.
- Initial dialect classification for CSS, SCSS, Sass, and Less tokens.
- `TokenSet` recovery scaffolding and parser boundary summary.
- Product consumers default to `omena-parser` through the parser cutover gate;
  the legacy parser is confined to oracle, benchmark, and split compatibility
  paths.
