MCPcopy Create free account
hub / github.com/csskit/csskit / hoisted_preloop

Method hoisted_preloop

crates/csskit_derives/src/parse.rs:764–801  ·  view source on GitHub ↗
(&self, wc: &mut WhereCollector)

Source from the content-addressed store, hash-verified

762 }
763
764 fn hoisted_preloop(&self, wc: &mut WhereCollector) -> TokenStream {
765 let atom_preloop = match self.shared_fields.as_slice() {
766 [] => TokenStream::new(),
767 [field] => {
768 let inner = field.atom_parse_if_peek();
769 quote! { { let c = p.peek_n(1); #inner } }
770 }
771 _ => {
772 let parse_steps: TokenStream = self.shared_fields.iter().map(|f| f.atom_match_arm()).collect();
773 quote! {
774 loop {
775 let c = p.peek_n(1);
776 #parse_steps
777 break;
778 }
779 }
780 }
781 };
782
783 let type_preloop = if self.shared_type_fields.is_empty() {
784 TokenStream::new()
785 } else {
786 let parse_steps: TokenStream = self
787 .shared_type_fields
788 .iter()
789 .map(|f| f.parse_normal_tokens(FieldParseMode::OneMustOccur, wc))
790 .collect();
791 quote! {
792 loop {
793 let c = p.peek_n(1);
794 #parse_steps
795 break;
796 }
797 }
798 };
799
800 quote! { #atom_preloop #type_preloop }
801 }
802}
803
804/// Shared-prefix plan: variants in a `PeekedFallback` group all start with the

Callers 1

renderMethod · 0.80

Calls 6

atom_parse_if_peekMethod · 0.80
collectMethod · 0.80
iterMethod · 0.80
atom_match_armMethod · 0.80
parse_normal_tokensMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected