Skip to content

Commit

Permalink
Allow recipe parameters to shadow variables (#1480)
Browse files Browse the repository at this point in the history
  • Loading branch information
casey committed Jan 10, 2023
1 parent 9b6b0b7 commit af54daf
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 42 deletions.
20 changes: 0 additions & 20 deletions src/analyzer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,16 +97,6 @@ impl<'src> Analyzer<'src> {

let recipes = RecipeResolver::resolve_recipes(self.recipes, &assignments)?;

for recipe in recipes.values() {
for parameter in &recipe.parameters {
if assignments.contains_key(parameter.name.lexeme()) {
return Err(parameter.name.token().error(ParameterShadowsVariable {
parameter: parameter.name.lexeme(),
}));
}
}
}

let mut aliases = Table::new();
while let Some(alias) = self.aliases.pop() {
aliases.insert(Self::resolve_alias(&recipes, alias)?);
Expand Down Expand Up @@ -316,16 +306,6 @@ mod tests {
kind: DuplicateParameter{recipe: "a", parameter: "b"},
}

analysis_error! {
name: parameter_shadows_variable,
input: "foo := \"h\"\na foo:",
offset: 13,
line: 1,
column: 2,
width: 3,
kind: ParameterShadowsVariable{parameter: "foo"},
}

analysis_error! {
name: duplicate_recipe,
input: "a:\nb:\na:",
Expand Down
6 changes: 0 additions & 6 deletions src/compile_error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -226,12 +226,6 @@ impl Display for CompileError<'_> {
ParameterFollowsVariadicParameter { parameter } => {
write!(f, "Parameter `{parameter}` follows variadic parameter")?;
}
ParameterShadowsVariable { parameter } => {
write!(
f,
"Parameter `{parameter}` shadows variable of the same name",
)?;
}
ParsingRecursionDepthExceeded => {
write!(f, "Parsing recursion depth exceeded")?;
}
Expand Down
3 changes: 0 additions & 3 deletions src/compile_error_kind.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,6 @@ pub(crate) enum CompileErrorKind<'src> {
ParameterFollowsVariadicParameter {
parameter: &'src str,
},
ParameterShadowsVariable {
parameter: &'src str,
},
ParsingRecursionDepthExceeded,
RequiredParameterFollowsDefaultParameter {
parameter: &'src str,
Expand Down
1 change: 1 addition & 0 deletions tests/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ mod recursion_limit;
mod regexes;
mod run;
mod search;
mod shadowing_parameters;
mod shebang;
mod shell;
mod show;
Expand Down
13 changes: 0 additions & 13 deletions tests/misc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1151,19 +1151,6 @@ c: b a
stdout: "",
}

test! {
name: parameter_shadows_variable,
justfile: "FOO := 'hello'\na FOO:",
args: ("a"),
stdout: "",
stderr: "error: Parameter `FOO` shadows variable of the same name
|
2 | a FOO:
| ^^^
",
status: EXIT_FAILURE,
}

test! {
name: unknown_function_in_assignment,
justfile: r#"foo := foo() + "hello"
Expand Down
23 changes: 23 additions & 0 deletions tests/shadowing_parameters.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
test! {
name: parameter_may_shadow_variable,
justfile: "FOO := 'hello'\na FOO:\n echo {{FOO}}\n",
args: ("a", "bar"),
stdout: "bar\n",
stderr: "echo bar\n",
}

test! {
name: shadowing_parameters_do_not_change_environment,
justfile: "export FOO := 'hello'\na FOO:\n echo $FOO\n",
args: ("a", "bar"),
stdout: "hello\n",
stderr: "echo $FOO\n",
}

test! {
name: exporting_shadowing_parameters_does_change_environment,
justfile: "export FOO := 'hello'\na $FOO:\n echo $FOO\n",
args: ("a", "bar"),
stdout: "bar\n",
stderr: "echo $FOO\n",
}

0 comments on commit af54daf

Please sign in to comment.