From af54dafa77f3f7c4ea0c6a519c252cd38704b588 Mon Sep 17 00:00:00 2001 From: Casey Rodarmor Date: Mon, 9 Jan 2023 16:59:02 -0800 Subject: [PATCH] Allow recipe parameters to shadow variables (#1480) --- src/analyzer.rs | 20 -------------------- src/compile_error.rs | 6 ------ src/compile_error_kind.rs | 3 --- tests/lib.rs | 1 + tests/misc.rs | 13 ------------- tests/shadowing_parameters.rs | 23 +++++++++++++++++++++++ 6 files changed, 24 insertions(+), 42 deletions(-) create mode 100644 tests/shadowing_parameters.rs diff --git a/src/analyzer.rs b/src/analyzer.rs index 53247bb..c8ee53e 100644 --- a/src/analyzer.rs +++ b/src/analyzer.rs @@ -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)?); @@ -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:", diff --git a/src/compile_error.rs b/src/compile_error.rs index c7dcbdf..5a90b52 100644 --- a/src/compile_error.rs +++ b/src/compile_error.rs @@ -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")?; } diff --git a/src/compile_error_kind.rs b/src/compile_error_kind.rs index 8c1fcdf..acd8b2f 100644 --- a/src/compile_error_kind.rs +++ b/src/compile_error_kind.rs @@ -79,9 +79,6 @@ pub(crate) enum CompileErrorKind<'src> { ParameterFollowsVariadicParameter { parameter: &'src str, }, - ParameterShadowsVariable { - parameter: &'src str, - }, ParsingRecursionDepthExceeded, RequiredParameterFollowsDefaultParameter { parameter: &'src str, diff --git a/tests/lib.rs b/tests/lib.rs index ce24668..cceacc8 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -72,6 +72,7 @@ mod recursion_limit; mod regexes; mod run; mod search; +mod shadowing_parameters; mod shebang; mod shell; mod show; diff --git a/tests/misc.rs b/tests/misc.rs index 4a903bc..6c2fb93 100644 --- a/tests/misc.rs +++ b/tests/misc.rs @@ -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" diff --git a/tests/shadowing_parameters.rs b/tests/shadowing_parameters.rs new file mode 100644 index 0000000..3778996 --- /dev/null +++ b/tests/shadowing_parameters.rs @@ -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", +}