Commit Graph
5 Commits
Author SHA1 Message Date
Claude 0ac3a473d4 Replace .unwrap() with proper proc macro error handling in codegen
The generated proc macro code was using .unwrap() for parse failures,
causing panics instead of emitting proper Rust compile errors. Replace
both unwrap calls with match expressions that call
e.into_compile_error().into() to surface parse failures as compiler
diagnostics in the generated proc macros.

https://claude.ai/code/session_01D2g6zGJsBeUEzxBb7AvFDt
2026-03-08 09:11:41 +00:00
Claude 36c85500bd Add unit tests for parser and codegen
29 tests covering:
- Parser: binding kinds, variadic patterns, literal tokens, ident
  constructs, spread-for detection, escape/template output blocks,
  multi-macro files, comment skipping, error reporting (line/col)
- Codegen: proc_macro fn emission, single/structural/variadic patterns,
  escape blocks, ident construction, keyword vs non-keyword tokens,
  and round-trip tests for the hello and derive_getters examples

https://claude.ai/code/session_01Tppkab4eLsL21asHGjQJoF
2026-03-07 23:36:18 +00:00
Claude e8d835e196 Add misses-rt crate, component example, README, and fix codegen for non-keyword literal tokens
- misses-rt: add Buffer/Markup HTML helpers, name/type helpers, parse_sections/parse_kv, and template AST
- codegen: add is_syn_keyword() — non-keyword idents in patterns now generate parse+compare instead of syn::Token![…]
- parser: split punct vs ident chars in literal pattern tokens so `props:` becomes two tokens
- examples: add component.mrs/.rs demonstrating named literal tokens and tt capture
- README: comprehensive guide covering .mrs syntax, running the compiler, misses-rt helpers, and examples

https://claude.ai/code/session_01Tppkab4eLsL21asHGjQJoF
2026-03-07 19:23:53 +00:00
Claude f90953a3bb Add examples with cargo run --example support
- Move .mrs files into misses-compiler/examples/ alongside .rs runners
- Add lib.rs exposing parse/codegen for use by example binaries and main.rs
- Fix parser: #[attr] vs #[a => b] disambiguation (look for => before ])
- Fix parser: `for` keyword in `impl Foo for Bar` no longer triggers spread
  (is_spread_for lookahead: must match `for <ident> in $<ident> =>`)
- Add derive_getters.mrs: getter methods via spread iteration
- Add make_id_type.mrs: newtype u64 wrapper with From impls, derive attrs

Run with: cargo run --example hello|derive_builder|declare_table|derive_getters|make_id_type

https://claude.ai/code/session_01Tppkab4eLsL21asHGjQJoF
2026-03-07 15:35:01 +00:00
Claude ed62264870 Implement Misses DSL compiler (parser + codegen)
- ast.rs: Full AST for .mrs files (MacroDef, Pattern, OutputBody, TemplateItem)
- parser.rs: Hand-written recursive descent parser with line/col error reporting
- codegen.rs: Transforms AST to Rust proc macro code using syn/quote/proc_macro2
- main.rs: CLI reads .mrs file, runs parse→codegen, writes to stdout or file
- Cargo.toml: Workspace with syn, quote, proc-macro2, prettyplease deps
- examples/: hello.mrs, derive_builder.mrs, declare_table.mrs reference examples

All three reference examples parse and produce prettyplease-formatted Rust output.
Generated code uses syn::parse::Parser closures for structural patterns, quote!
for token templates, spread iteration via .iter().map().collect(), and
format_ident! for identifier construction.

https://claude.ai/code/session_01Tppkab4eLsL21asHGjQJoF
2026-03-07 11:37:58 +00:00