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
- Write one simple selector per rule with a single {…} block
- 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.