( at, isKeyframes, isCounterStyle, isContainer )
| 3064 | * @returns {void} |
| 3065 | */ |
| 3066 | const markPureFromAtRulePrelude = ( |
| 3067 | at, |
| 3068 | isKeyframes, |
| 3069 | isCounterStyle, |
| 3070 | isContainer |
| 3071 | ) => { |
| 3072 | const acceptIdent = isKeyframes || isCounterStyle || isContainer; |
| 3073 | const acceptString = isKeyframes; |
| 3074 | for (const cv of A.prelude(at)) { |
| 3075 | const cvType = A.type(cv); |
| 3076 | if (cvType === NodeType.Whitespace) continue; |
| 3077 | if (cvType === NodeType.String) { |
| 3078 | if (acceptString) pure.markLocal(); |
| 3079 | break; |
| 3080 | } |
| 3081 | if (cvType === NodeType.Ident) { |
| 3082 | if (!acceptIdent) break; |
| 3083 | if ( |
| 3084 | isContainer && |
| 3085 | isContainerKeyword(source, A.start(cv), A.end(cv)) |
| 3086 | ) { |
| 3087 | continue; |
| 3088 | } |
| 3089 | pure.markLocal(); |
| 3090 | break; |
| 3091 | } |
| 3092 | if (cvType === NodeType.Function) { |
| 3093 | if (equalsLowerCase(A.unescapedName(cv), "local")) { |
| 3094 | pure.markLocal(); |
| 3095 | } |
| 3096 | break; |
| 3097 | } |
| 3098 | } |
| 3099 | }; |
| 3100 | |
| 3101 | // Drive the walk through SourceProcessor: structural enter / exit map to the `walkAst…Enter` / `…Exit` halves; value visitors handle url / ICSS / local-global. |
| 3102 | /** @type {VisitorMap} */ |
nothing calls this directly
no test coverage detected