diff options
Diffstat (limited to 'crates/rebel-parse/src/lib.rs')
-rw-r--r-- | crates/rebel-parse/src/lib.rs | 68 |
1 files changed, 4 insertions, 64 deletions
diff --git a/crates/rebel-parse/src/lib.rs b/crates/rebel-parse/src/lib.rs index d9a59cf..8019d00 100644 --- a/crates/rebel-parse/src/lib.rs +++ b/crates/rebel-parse/src/lib.rs @@ -1,65 +1,5 @@ -use rebel_common::types::TaskIDRef; +pub mod ast; +mod grammar; -pub use rules::*; - -#[derive(Debug, Clone, Copy)] -pub struct TaskRef<'a> { - pub id: TaskIDRef<'a>, - pub args: TaskArgs<'a>, -} - -#[derive(Debug, Clone, Copy, Default)] -pub struct TaskArgs<'a> { - pub host: Option<&'a str>, - pub target: Option<&'a str>, -} - -#[derive(Debug, Clone, Copy)] -pub struct TaskFlags { - pub force_run: bool, -} - -peg::parser! { - grammar rules() for str { - pub rule task_ref_with_flags() -> (TaskRef<'input>, TaskFlags) - = task:task_ref() flags:task_flags() { (task, flags) } - - pub rule task_ref() -> TaskRef<'input> - = id:task_id() args:task_args() { - TaskRef { - id, - args, - } - } - - rule recipe_id() -> &'input str - = $(name() ("/" name())?) - - rule task_id() -> TaskIDRef<'input> - = recipe:recipe_id() "::" task:name() { - TaskIDRef { recipe, task } - } - - rule task_args() -> TaskArgs<'input> - = "@" host:name()? target:tagged(<":">, <name()>)? { - TaskArgs { - host, - target, - } - } - / { Default::default() } - - rule task_flags() -> TaskFlags - = force_run:force_run() { TaskFlags { force_run } } - - rule force_run() -> bool - = "+" { true } - / { false } - - rule name() -> &'input str - = $(['a'..='z' | 'A' ..='Z' | '0'..='9' | '_' | '-']+) - - rule tagged<T>(tag: rule<()>, value: rule<T>) -> T - = tag() v:value() { v } - } -} +pub use grammar::recipe; +pub use grammar::task_ref; |