Expand description
§kiutils-sexpr
Lossless S-expression CST parser/printer used by kiutils-kicad.
§Design goals
- Preserve original bytes for exact lossless writes (
CstDocument::to_lossless_string) - Offer deterministic normalized output (
CstDocument::to_canonical_string) - Keep explicit byte spans for diagnostics and precise edits
- Support both single-root and rootless multi-form inputs
§Quickstart
use kiutils_sexpr::{parse_one, Node};
let doc = parse_one("(kicad_pcb (version 20260101))").unwrap();
let Node::List { items, .. } = &doc.nodes[0] else { unreachable!() };
assert_eq!(items.len(), 2);
assert_eq!(doc.to_lossless_string(), "(kicad_pcb (version 20260101))");Rootless mode for multi-form files (for example, .kicad_dru style snippets):
use kiutils_sexpr::parse_rootless;
let doc = parse_rootless("(version 1)\n(rule \"x\")\n").unwrap();
assert_eq!(doc.nodes.len(), 2);Structs§
- CstDocument
- Parse and CST data model. Parsed CST document plus the original source buffer.
- Span
- Parse and CST data model. Byte-span in the original input.
Enums§
- Atom
- Parse and CST data model. Atom value in an S-expression node.
- Node
- Parse and CST data model. CST node (list or atom) with source span.
- Parse
Error - Parse and CST data model. Parse failures.
- Parse
Mode - Parse and CST data model. Parsing mode for top-level form expectations.
Functions§
- parse_
one - Parse and CST data model. Parses exactly one top-level S-expression root.
- parse_
rootless - Parse and CST data model. Parses rootless/multi-form S-expression input.