summaryrefslogtreecommitdiffstats
path: root/crates/rebel-parse/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rebel-parse/src/lib.rs')
-rw-r--r--crates/rebel-parse/src/lib.rs68
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;