summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2024-04-19 23:32:57 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2024-04-20 17:12:02 +0200
commit801f049969be0ca907b74e53597bec33cba97af4 (patch)
tree5d3c0f5103d605c9b92aee198f4511e4b418abee
parent334f764cbffa8d591a007f0fec962f58cf0efde4 (diff)
downloadrebel-801f049969be0ca907b74e53597bec33cba97af4.tar
rebel-801f049969be0ca907b74e53597bec33cba97af4.zip
driver: parse: improve some rule and type names, order from high-level to low-level
-rw-r--r--crates/rebel-parse/src/lib.rs47
-rw-r--r--crates/rebel-resolve/src/context.rs2
2 files changed, 23 insertions, 26 deletions
diff --git a/crates/rebel-parse/src/lib.rs b/crates/rebel-parse/src/lib.rs
index 5857efb..fa72b42 100644
--- a/crates/rebel-parse/src/lib.rs
+++ b/crates/rebel-parse/src/lib.rs
@@ -1,4 +1,10 @@
#[derive(Debug, Clone, Copy)]
+pub struct TaskRef<'a> {
+ pub id: TaskID<'a>,
+ pub args: TaskArgs<'a>,
+}
+
+#[derive(Debug, Clone, Copy)]
pub struct TaskID<'a> {
pub recipe: &'a str,
pub task: &'a str,
@@ -11,26 +17,22 @@ pub struct TaskArgs<'a> {
}
#[derive(Debug, Clone, Copy)]
-pub struct Task<'a> {
- pub id: TaskID<'a>,
- pub args: TaskArgs<'a>,
-}
-
-#[derive(Debug, Clone, Copy)]
pub struct TaskFlags {
pub force_run: bool,
}
peg::parser! {
grammar rules() for str {
- rule t<T>(tag: rule<()>, value: rule<T>) -> T
- = tag() v:value() { v }
-
- rule name_char()
- = ['a'..='z' | 'A' ..='Z' | '0'..='9' | '_' | '-']
+ pub rule task_ref_with_flags() -> (TaskRef<'input>, TaskFlags)
+ = task:task_ref() flags:task_flags() { (task, flags) }
- rule name() -> &'input str
- = $(name_char()+)
+ pub rule task_ref() -> TaskRef<'input>
+ = id:task_id() args:task_args() {
+ TaskRef {
+ id,
+ args,
+ }
+ }
rule recipe_id() -> &'input str
= $(name() ("/" name())?)
@@ -41,7 +43,7 @@ peg::parser! {
}
rule task_args() -> TaskArgs<'input>
- = "@" host:name()? target:t(<":">, <name()>)? {
+ = "@" host:name()? target:tagged(<":">, <name()>)? {
TaskArgs {
host,
target,
@@ -49,23 +51,18 @@ peg::parser! {
}
/ { Default::default() }
- pub rule task() -> Task<'input>
- = id:task_id() args:task_args() {
- Task {
- id,
- args,
- }
- }
+ rule task_flags() -> TaskFlags
+ = force_run:force_run() { TaskFlags { force_run } }
rule force_run() -> bool
= "+" { true }
/ { false }
- rule task_flags() -> TaskFlags
- = force_run:force_run() { TaskFlags { force_run } }
+ rule name() -> &'input str
+ = $(['a'..='z' | 'A' ..='Z' | '0'..='9' | '_' | '-']+)
- pub rule task_with_flags() -> (Task<'input>, TaskFlags)
- = task:task() flags:task_flags() { (task, flags) }
+ rule tagged<T>(tag: rule<()>, value: rule<T>) -> T
+ = tag() v:value() { v }
}
}
diff --git a/crates/rebel-resolve/src/context.rs b/crates/rebel-resolve/src/context.rs
index b8090d1..88d5deb 100644
--- a/crates/rebel-resolve/src/context.rs
+++ b/crates/rebel-resolve/src/context.rs
@@ -363,7 +363,7 @@ impl Context {
}
pub fn parse(&self, s: &str) -> error::Result<(TaskRef, TaskFlags)> {
- let (parsed, flags) = parse::task_with_flags(s)
+ let (parsed, flags) = parse::task_ref_with_flags(s)
.ok()
.context("Invalid task syntax")?;