Expand description
セレクタが動的疑似クラス(:hover / :focus / :active)を参照しているかの判定。
仕様は spec/dynamic_pseudo_states.md。
§なぜ必要か
cascade.rs はノード 1 個につきカスケードを 4 回走らせている
(通常 / :hover / :focus / :active の事前計算)。
実測で style_tree のノード走査は 358 ノードで約 600 tick かかっており、
セレクタ照合は索引で既に 2.0% まで落ちている(照合はボトルネックではない)。
残っているのはこの 4 倍の固定コスト。
候補ルールが該当の状態を一切参照していなければ、そのパスは走らせなくてよい。
§方針(不変条件 D-1〜D-4)
- D-1: 結果は従来と完全一致。差分が原理的に生じ得ない場合のみスキップ
- D-2: 判定対象は候補ルール集合(全ルールへのフォールバック時も同じ)
- D-3: セレクタの構文だけを見る。DOM 状態には依存しない
- D-4: 迷ったら「参照している」とみなす(false negative を出さない)
Functions§
- matches_
state 🔒 :focusの判定に含めるべき別名。- rule_
uses_ state - ルールのいずれかのセレクタが
stateを参照しているか。 計算量: O(Sel × Steps × P) — Sel はルール内のセレクタ数。 - selector_
uses_ state - セレクタ全体(チェーンなら全ステップ)が
stateを参照しているか。 - simple_
uses_ state - 単純セレクタ(コンパウンド 1 個)が
stateを参照しているか。