Allow evaluating justfiles with no recipes (#794)
This commit is contained in:
parent
dd578d141c
commit
da97f8d7dd
@ -61,23 +61,6 @@ impl<'src> Justfile<'src> {
|
|||||||
overrides: &'run BTreeMap<String, String>,
|
overrides: &'run BTreeMap<String, String>,
|
||||||
arguments: &'run [String],
|
arguments: &'run [String],
|
||||||
) -> RunResult<'run, ()> {
|
) -> RunResult<'run, ()> {
|
||||||
let argvec: Vec<&str> = if !arguments.is_empty() {
|
|
||||||
arguments.iter().map(String::as_str).collect()
|
|
||||||
} else if let Some(recipe) = self.first() {
|
|
||||||
let min_arguments = recipe.min_arguments();
|
|
||||||
if min_arguments > 0 {
|
|
||||||
return Err(RuntimeError::DefaultRecipeRequiresArguments {
|
|
||||||
recipe: recipe.name.lexeme(),
|
|
||||||
min_arguments,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
vec![recipe.name()]
|
|
||||||
} else {
|
|
||||||
return Err(RuntimeError::NoRecipes);
|
|
||||||
};
|
|
||||||
|
|
||||||
let arguments = argvec.as_slice();
|
|
||||||
|
|
||||||
let unknown_overrides = overrides
|
let unknown_overrides = overrides
|
||||||
.keys()
|
.keys()
|
||||||
.filter(|name| !self.assignments.contains_key(name.as_str()))
|
.filter(|name| !self.assignments.contains_key(name.as_str()))
|
||||||
@ -142,6 +125,23 @@ impl<'src> Justfile<'src> {
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let argvec: Vec<&str> = if !arguments.is_empty() {
|
||||||
|
arguments.iter().map(String::as_str).collect()
|
||||||
|
} else if let Some(recipe) = self.first() {
|
||||||
|
let min_arguments = recipe.min_arguments();
|
||||||
|
if min_arguments > 0 {
|
||||||
|
return Err(RuntimeError::DefaultRecipeRequiresArguments {
|
||||||
|
recipe: recipe.name.lexeme(),
|
||||||
|
min_arguments,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
vec![recipe.name()]
|
||||||
|
} else {
|
||||||
|
return Err(RuntimeError::NoRecipes);
|
||||||
|
};
|
||||||
|
|
||||||
|
let arguments = argvec.as_slice();
|
||||||
|
|
||||||
let mut missing = vec![];
|
let mut missing = vec![];
|
||||||
let mut grouped = vec![];
|
let mut grouped = vec![];
|
||||||
let mut rest = arguments;
|
let mut rest = arguments;
|
||||||
|
29
tests/evaluate.rs
Normal file
29
tests/evaluate.rs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
test! {
|
||||||
|
name: evaluate,
|
||||||
|
justfile: r#"
|
||||||
|
foo := "a\t"
|
||||||
|
hello := "c"
|
||||||
|
bar := "b\t"
|
||||||
|
ab := foo + bar + hello
|
||||||
|
|
||||||
|
wut:
|
||||||
|
touch /this/is/not/a/file
|
||||||
|
"#,
|
||||||
|
args: ("--evaluate"),
|
||||||
|
stdout: r#"ab := "a b c"
|
||||||
|
bar := "b "
|
||||||
|
foo := "a "
|
||||||
|
hello := "c"
|
||||||
|
"#,
|
||||||
|
}
|
||||||
|
|
||||||
|
test! {
|
||||||
|
name: evaluate_empty,
|
||||||
|
justfile: "
|
||||||
|
a := 'foo'
|
||||||
|
",
|
||||||
|
args: ("--evaluate"),
|
||||||
|
stdout: r#"
|
||||||
|
a := "foo"
|
||||||
|
"#,
|
||||||
|
}
|
@ -10,6 +10,7 @@ mod delimiters;
|
|||||||
mod dotenv;
|
mod dotenv;
|
||||||
mod edit;
|
mod edit;
|
||||||
mod error_messages;
|
mod error_messages;
|
||||||
|
mod evaluate;
|
||||||
mod examples;
|
mod examples;
|
||||||
mod export;
|
mod export;
|
||||||
mod init;
|
mod init;
|
||||||
|
@ -569,25 +569,6 @@ echo `echo command interpolation`
|
|||||||
",
|
",
|
||||||
}
|
}
|
||||||
|
|
||||||
test! {
|
|
||||||
name: evaluate,
|
|
||||||
justfile: r#"
|
|
||||||
foo := "a\t"
|
|
||||||
hello := "c"
|
|
||||||
bar := "b\t"
|
|
||||||
ab := foo + bar + hello
|
|
||||||
|
|
||||||
wut:
|
|
||||||
touch /this/is/not/a/file
|
|
||||||
"#,
|
|
||||||
args: ("--evaluate"),
|
|
||||||
stdout: r#"ab := "a b c"
|
|
||||||
bar := "b "
|
|
||||||
foo := "a "
|
|
||||||
hello := "c"
|
|
||||||
"#,
|
|
||||||
}
|
|
||||||
|
|
||||||
test! {
|
test! {
|
||||||
name: line_error_spacing,
|
name: line_error_spacing,
|
||||||
justfile: r#"
|
justfile: r#"
|
||||||
|
Loading…
Reference in New Issue
Block a user