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

Function number_precedes_length

crates/csskit_spec_generator/src/codegen.rs:546–591  ·  view source on GitHub ↗

Recursively check if ` ` precedes ` ` in any defs.

(def: &Def)

Source from the content-addressed store, hash-verified

544
545/// Recursively check if `<number>` precedes `<length>` in any defs.
546fn number_precedes_length(def: &Def) -> bool {
547 match def {
548 Def::Combinator(children, DefCombinatorStyle::Alternatives) => {
549 let mut number_pos = None;
550 let mut length_pos = None;
551
552 for (i, child) in children.iter().enumerate() {
553 match child {
554 Def::Type(def_type) => {
555 let ident = def_type.ident_str();
556 if (ident == "Number" || ident == "Integer") && number_pos.is_none() {
557 number_pos = Some(i);
558 } else if (ident == "Length" || ident == "LengthPercentage" || ident == "LengthPercentageAuto")
559 && length_pos.is_none()
560 {
561 length_pos = Some(i);
562 }
563 }
564 // Recursively check nested definitions
565 _ => {
566 if number_precedes_length(child) {
567 return true;
568 }
569 }
570 }
571 }
572
573 // If we found both and number comes first, flag it
574 if let (Some(num_pos), Some(len_pos)) = (number_pos, length_pos)
575 && num_pos < len_pos
576 {
577 return true;
578 }
579
580 false
581 }
582 Def::Combinator(children, _) => children.iter().any(number_precedes_length),
583 Def::Group(inner, _) => number_precedes_length(inner),
584 Def::Optional(inner) => number_precedes_length(inner),
585 Def::Multiplier(inner, _, _) => number_precedes_length(inner),
586 Def::Function(_, inner) => number_precedes_length(inner),
587 Def::AutoOr(inner) | Def::NoneOr(inner) | Def::AutoNoneOr(inner) => number_precedes_length(inner),
588 // Leaf nodes don't contain the pattern
589 _ => false,
590 }
591}
592
593/// Determine which portion(s) of the box model a property affects based on its name
594fn determine_box_portion(property_name: &str) -> Option<TokenStream> {

Callers 1

Calls 2

iterMethod · 0.80
ident_strMethod · 0.80

Tested by

no test coverage detected