From b15f709a8397f9d265bbac2d76182d70874041a5 Mon Sep 17 00:00:00 2001 From: Navid Qaragozlou Date: Fri, 6 Sep 2024 14:15:27 -0700 Subject: [PATCH] buck2: tsets: expose `children` Summary: TSIA. Reviewed By: cjhopman Differential Revision: D62312933 fbshipit-source-id: 9affe99c6379d476e45c123dcd3a8a4b95f94bef --- .../rule_defs/transitive_set/transitive_set.rs | 4 ++++ .../src/interpreter/transitive_set/tests.rs | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/buck2_build_api/src/interpreter/rule_defs/transitive_set/transitive_set.rs b/app/buck2_build_api/src/interpreter/rule_defs/transitive_set/transitive_set.rs index 7f7b510c04507..1012cd21394c1 100644 --- a/app/buck2_build_api/src/interpreter/rule_defs/transitive_set/transitive_set.rs +++ b/app/buck2_build_api/src/interpreter/rule_defs/transitive_set/transitive_set.rs @@ -578,4 +578,8 @@ fn transitive_set_methods(builder: &mut MethodsBuilder) { None => Value::new_none(), }) } + #[starlark(attribute)] + fn children<'v>(this: ValueOf<'v, &'v TransitiveSet<'v>>) -> anyhow::Result>> { + Ok(this.typed.children.to_vec()) + } } diff --git a/app/buck2_build_api_tests/src/interpreter/transitive_set/tests.rs b/app/buck2_build_api_tests/src/interpreter/transitive_set/tests.rs index bab5f92b12736..b02327c9c1ffe 100644 --- a/app/buck2_build_api_tests/src/interpreter/transitive_set/tests.rs +++ b/app/buck2_build_api_tests/src/interpreter/transitive_set/tests.rs @@ -687,7 +687,23 @@ fn test_accessors() -> anyhow::Result<()> { s2 = make_tset(FooSet, value = 1) assert_eq(s2.value, 1) - "# + + f4 = make_tset(FooSet, value = "baz") + assert_eq([], f4.children) + assert_eq([], [x.value for x in f4.children]) + + f3 = make_tset(FooSet, value = "bar", children = [f4]) + assert_eq([f4], f3.children) + assert_eq(["baz"], [x.value for x in f3.children]) + + f2 = make_tset(FooSet, children = [f4, f3]) + assert_eq([f4, f3], f2.children) + assert_eq(["baz", "bar"], [x.value for x in f2.children]) + + f1 = make_tset(FooSet, children = [f4, f3, f2]) + assert_eq([f4, f3, f2], f1.children) + assert_eq(["baz", "bar"], filter(None, [x.value for x in f1.children])) + "# ))?; Ok(())