如何在方面之间传播

How to propagate between aspects

我正在应用方面,但不知何故似乎做错了什么。 成像著名的参考图片。

在我的例子中 A 是:

deps_aspect = aspect(
    implementation = _deps_aspect_impl,
    attr_aspects = ["resource_deps"],
    attrs = {
    },
)

对于A(W), _deps_aspect_impl returns:

    return struct(
        dep_files = set(),
    )

现在,如果我正确理解文档,我应该能够通过 中的 resource_deps 访问 A(W) dep_files ]A(Y).

如果 A(Y)_deps_aspect_impl 我会:

print("DIR: %s" % dir(ctx.rule.attr))

没有 resource_deps 打印(我无法访问它)。

我是不是理解错了或者这应该如何工作?

所以问题是我没有抓住各种细微差别。

  1. attr_aspects 是递归的。这意味着一旦您应用,它们就会向下传播到图表中。因此,对于那个应用来说,属性是全局的。也许能够用 kind -> attr 映射指定字典会更好。

  2. 由于1.你真的需要看看kind,所以你有不同的代码路径(我做对的一件事)。

  3. 数据可以不能通过阴影图传播。我以前是这样想象的。您只能在 "solid" 规则 attrs.

  4. 上传播