From 0de0e2c0568d84d7a866c437cd0193b289065462 Mon Sep 17 00:00:00 2001 From: harehare Date: Fri, 3 Apr 2026 20:00:34 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20task=20selector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/mq-lang/src/eval/builtin.rs | 4 ++++ crates/mq-lang/src/selector.rs | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/crates/mq-lang/src/eval/builtin.rs b/crates/mq-lang/src/eval/builtin.rs index 4d2931ab4..06bf94fc2 100644 --- a/crates/mq-lang/src/eval/builtin.rs +++ b/crates/mq-lang/src/eval/builtin.rs @@ -4429,6 +4429,10 @@ pub fn eval_selector(node: &mq_markdown::Node, selector: &Selector) -> RuntimeVa (_, mq_markdown::Node::List(mq_markdown::List { .. })) => true, _ => false, }, + Selector::Task => matches!( + node, + mq_markdown::Node::List(mq_markdown::List { checked: Some(_), .. }) + ), Selector::MdxJsEsm => node.is_mdx_js_esm(), Selector::Text => node.is_text(), Selector::Toml => node.is_toml(), diff --git a/crates/mq-lang/src/selector.rs b/crates/mq-lang/src/selector.rs index e3744826f..e3b2c517c 100644 --- a/crates/mq-lang/src/selector.rs +++ b/crates/mq-lang/src/selector.rs @@ -131,6 +131,8 @@ pub enum Selector { MdxJsxFlowElement, /// Matches recursively all child nodes. Recursive, + /// Matches task list markdown node. + Task, /// Matches a specific attribute of a markdown node. Attr(AttrKind), } @@ -291,6 +293,9 @@ impl TryFrom<&Token> for Selector { // List ".[]" | ".list" => Ok(Selector::List(None, None)), + // Task List + ".task" => Ok(Selector::Task), + // TOML ".toml" => Ok(Selector::Toml), @@ -417,6 +422,7 @@ impl Display for Selector { Selector::MdxJsEsm => write!(f, ".mdx_js_esm"), Selector::MdxJsxFlowElement => write!(f, ".mdx_jsx_flow_element"), Selector::Recursive => write!(f, ".."), + Selector::Task => write!(f, ".task"), Selector::Attr(attr) => write!(f, "{}", attr), } } @@ -498,6 +504,8 @@ mod tests { #[case::list(".list", Selector::List(None, None), ".list")] #[case::list_bracket(".[]", Selector::List(None, None), ".list")] #[case::list_with_index(".[1]", Selector::List(Some(1), None), ".[1]")] + // Task List + #[case::task(".task", Selector::Task, ".task")] // TOML #[case::toml(".toml", Selector::Toml, ".toml")] // Strong