Parse raw elements, attributes, and web components in rsx (#2655)

* parse raw elements and attributes in rsx

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit is contained in:
Evan AlmloffandJonathan Kelley authored and GitHub committed 2024-07-23 16:48:40 -07:00
1 parent fa4e5dbf62
commit 3bb9a535d8
6 files changed
+42 -9

No files matched your search

+4 -3
View File
@@ -5,6 +5,7 @@ use crate::innerlude::*;
use proc_macro2::{Span, TokenStream as TokenStream2};
use quote::ToTokens;
use syn::{
ext::IdentExt,
parse::{Parse, ParseStream},
spanned::Spanned,
token::{self},
@@ -72,7 +73,7 @@ impl Parse for BodyNode {
// If there's an ident immediately followed by a dash, it's a web component
// Web components support no namespacing, so just parse it as an element directly
if stream.peek(Ident) && stream.peek2(Token![-]) {
if stream.peek(Ident::peek_any) && stream.peek2(Token![-]) {
return Ok(BodyNode::Element(stream.parse::<Element>()?));
}
@@ -86,8 +87,8 @@ impl Parse for BodyNode {
//
// example:
// div {}
if stream.peek(Ident) && !stream.peek2(Token![::]) {
let ident = stream.fork().parse::<Ident>().unwrap();
if stream.peek(Ident::peek_any) && !stream.peek2(Token![::]) {
let ident = parse_raw_ident(&stream.fork()).unwrap();
let el_name = ident.to_string();
let first_char = el_name.chars().next().unwrap();