BigPizzaV3/CodexPlusPlus · error

theme.css 选择器或规则语法无效

Error message

theme.css 选择器或规则语法无效

What it means

Grammar guard in parse_safe_css: a rule has no '{', an empty selector, a selector containing ',' '@' ';' or '}', or a nested '{' before the rule's closing '}'. Only simple single-selector blocks without nesting are accepted.

Source

Thrown at crates/codex-plus-core/src/dream_skin_package.rs:321

    let mut rest = css;
    loop {
        rest = rest.trim_start_matches(|character: char| {
            character.is_ascii_whitespace() || character == '\u{000c}'
        });
        if rest.is_empty() {
            break;
        }
        let open = rest.find('{').context("theme.css 规则缺少开始括号")?;
        let selector = rest[..open].trim();
        if selector.is_empty()
            || selector.contains([',', '@', ';', '}'])
            || rest[open + 1..].find('{').is_some_and(|nested| {
                rest[open + 1..]
                    .find('}')
                    .is_none_or(|close| nested < close)
            })
        {
            bail!("theme.css 选择器或规则语法无效");
        }
        let close = open
            + 1
            + rest[open + 1..]
                .find('}')
                .context("theme.css 规则缺少结束括号")?;
        let Some(after_prefix) = selector.strip_prefix("[data-ds-part=\"") else {
            bail!("theme.css 只能选择 Skin API 注册的 data-ds-part");
        };
        let (part, suffix) = after_prefix
            .split_once("\"]")
            .context("theme.css data-ds-part 语法无效")?;
        if !allowed_parts.contains(&part)
            || (!suffix.is_empty() && suffix != ":hover" && suffix != ":focus-visible")
        {
            bail!("theme.css 使用了未注册的 Skin API part 或状态");
        }

View on GitHub (pinned to f2074595a2)

Solutions

  1. Write one simple selector per rule with a single {…} block
  2. Remove commas, at-rules, and nested braces from theme.css
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/codex-plus-core/src/dream_skin_package.rs:321 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of BigPizzaV3/CodexPlusPlus@f2074595a2 (2026-08-23). Data as JSON: /api/errors/d470c90d2dbabef0. Report an issue: GitHub.