syn-powered parser for JSX-like TokenStreams, aka RSX. The parsed result is a nested Node
structure, similar to the browser DOM, where node name and value are syn expressions to support building proc macros.
```rust use quote::quote; use syn_rsx::parse2;
let tokens = quote! {
let nodes = parse2(tokens).unwrap(); asserteq!(nodes[0].nameasstring().unwrap(), "hello"); asserteq!(nodes[0].attributes[0].nameasstring().unwrap(), "world"); asserteq!(nodes[0].children[0].valueas_string().unwrap(), "hi"); ```
Not opinionated
Every tag or attribute name is valid
html
<hello world />
Text nodes
```html
```
Support for [unquoted text is planned]
Node names separated by dash, colon or double colon
html
<tag-name attribute-key="value" />
<tag:name attribute:key="value" />
<tag::name attribute::key="value" />
Node names with reserved keywords
html
<input type="submit" />
Attribute values can be any valid syn expression without requiring braces
html
<div key=some::value() />
Braced blocks are parsed as arbitrary Rust code
```html
Helpful error reporting out of the box
rust,no-run
error: open tag has no corresponding close tag and is not self-closing
--> examples/html-to-string-macro/tests/lib.rs:5:24
|
5 | html_to_string! { <div> };
| ^^^
Customization
A ParserConfig
to customize parsing behavior is available, so if you have
slightly different requirements for parsing and it's not yet customizable
feel free to open an issue or pull request to extend the configuration.