feat(validators): unused param warning
Params being unused were being incorrectly reported. This was because params need to be initialized at a scope above both the validator functions. This manifested when using a multi-validator where one of the params was not used in both validators. The easy fix was to add a field called `is_validator_param` to `ArgName`. Then when infering a function we don't initialize args that are validator params. We now handle this in a scope that is created before in the match branch for validator in the `infer_definition` function. In there we call `.in_new_scope` and initialize params for usage detection.
This commit is contained in:
@@ -113,6 +113,47 @@ fn validator_in_lib_warning() {
|
||||
))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn multi_validator() {
|
||||
let source_code = r#"
|
||||
validator(foo: ByteArray, bar: Int) {
|
||||
fn spend(_d, _r, _c) {
|
||||
foo == #"aabb"
|
||||
}
|
||||
|
||||
fn mint(_r, _c) {
|
||||
bar == 0
|
||||
}
|
||||
}
|
||||
"#;
|
||||
|
||||
let (warnings, _) = check_validator(parse(source_code)).unwrap();
|
||||
|
||||
assert_eq!(warnings.len(), 0)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn multi_validator_warning() {
|
||||
let source_code = r#"
|
||||
validator(foo: ByteArray, bar: Int) {
|
||||
fn spend(_d, _r, _c) {
|
||||
foo == #"aabb"
|
||||
}
|
||||
|
||||
fn mint(_r, _c) {
|
||||
True
|
||||
}
|
||||
}
|
||||
"#;
|
||||
|
||||
let (warnings, _) = check_validator(parse(source_code)).unwrap();
|
||||
|
||||
assert!(matches!(
|
||||
warnings[0],
|
||||
Warning::UnusedVariable { ref name, .. } if name == "bar"
|
||||
))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn if_scoping() {
|
||||
let source_code = r#"
|
||||
|
||||
Reference in New Issue
Block a user