return const values from scope variables (#14577)

Fixes #14542

# User-Facing Changes

Constant values are no longer missing from `scope variables` output
when the IR evaluator is enabled:

```diff
const foo = 1
scope variables | where name == "$foo" | get value.0 | to nuon
-null
+int
```
This commit is contained in:
Solomon 2024-12-13 15:23:17 -07:00 committed by GitHub
parent cbf5fa6684
commit cc0616b753
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 19 additions and 11 deletions

View file

@ -56,11 +56,12 @@ impl<'e, 's> ScopeData<'e, 's> {
let var_type = Value::string(var.ty.to_string(), span); let var_type = Value::string(var.ty.to_string(), span);
let is_const = Value::bool(var.const_val.is_some(), span); let is_const = Value::bool(var.const_val.is_some(), span);
let var_value = if let Ok(val) = self.stack.get_var(**var_id, span) { let var_value = self
val .stack
} else { .get_var(**var_id, span)
Value::nothing(span) .ok()
}; .or(var.const_val.clone())
.unwrap_or(Value::nothing(span));
let var_id_val = Value::int(var_id.get() as i64, span); let var_id_val = Value::int(var_id.get() as i64, span);

View file

@ -90,12 +90,19 @@ fn help_works_with_missing_requirements() -> TestResult {
run_test(r#"each --help | lines | length"#, "72") run_test(r#"each --help | lines | length"#, "72")
} }
#[test] #[rstest]
fn scope_variable() -> TestResult { #[case("let x = 3", "$x", "int", "3")]
run_test( #[case("const x = 3", "$x", "int", "3")]
r#"let x = 3; scope variables | where name == "$x" | get type.0"#, fn scope_variable(
"int", #[case] var_decl: &str,
) #[case] exp_name: &str,
#[case] exp_type: &str,
#[case] exp_value: &str,
) -> TestResult {
let get_var_info =
format!(r#"{var_decl}; scope variables | where name == "{exp_name}" | first"#);
run_test(&format!(r#"{get_var_info} | get type"#), exp_type)?;
run_test(&format!(r#"{get_var_info} | get value"#), exp_value)
} }
#[rstest] #[rstest]