Skip to content

Commit 85bbdd2

Browse files
authored
Don't evaluate unused assertions
1 parent ff6dda3 commit 85bbdd2

2 files changed

Lines changed: 36 additions & 4 deletions

File tree

src/evaluator.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,26 @@ impl<'src, 'run> Evaluator<'src, 'run> {
3434
scope: scope.child(),
3535
};
3636

37+
let variable_references = sets
38+
.values()
39+
.flat_map(|set| set.value.expressions())
40+
.flat_map(|expression| expression.references())
41+
.filter_map(|reference| {
42+
if let Reference::Variable(variable) = reference {
43+
Some(variable.lexeme())
44+
} else {
45+
None
46+
}
47+
})
48+
.collect::<BTreeSet<&str>>();
49+
3750
for assignment in assignments.values() {
38-
match evaluator.evaluate_assignment(assignment) {
39-
Err(Error::Const { .. }) => evaluator.non_const_assignments.insert(assignment.name),
40-
Err(err) => return Err(err),
41-
Ok(_) => {}
51+
if variable_references.contains(assignment.name.lexeme()) {
52+
match evaluator.evaluate_assignment(assignment) {
53+
Err(Error::Const { .. }) => evaluator.non_const_assignments.insert(assignment.name),
54+
Err(err) => return Err(err),
55+
Ok(_) => {}
56+
}
4257
}
4358
}
4459

tests/lazy.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,23 @@ fn submodule_lazy_is_respected() {
296296
.success();
297297
}
298298

299+
#[test]
300+
fn unused_assert_not_evaluated() {
301+
Test::new()
302+
.justfile(
303+
"
304+
set lazy
305+
306+
x := assert('foo' == 'bar', 'fail')
307+
308+
foo:
309+
@echo foo
310+
",
311+
)
312+
.stdout("foo\n")
313+
.success();
314+
}
315+
299316
#[test]
300317
fn eager_assignments_are_evaluated() {
301318
Test::new()

0 commit comments

Comments
 (0)