Skip to main content

Crate kiutils_sexpr

Crate kiutils_sexpr 

Source
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.
ParseError
Parse and CST data model. Parse failures.
ParseMode
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.