如何从 Bazel 规则中查询兄弟规则

问题描述

我希望能够在 Bazel BUILD 文件中执行以下操作:

alpha(
  name = "hello world",color = "blue"
)

beta(
  name = "hello again"
)

其中 alphabeta自定义规则。我希望 beta 能够访问 color 规则的 alpha 属性无需添加标签属性。在 Bazel 查询中,我可以这样做:

bazel query 'kind(beta,siblings(kind(alpha,//...)))'

它给了我与 beta 并排的 alpha。我可以在 beta 规则的实现函数中以某种方式实现相同的功能吗?

def _beta_rule_impl(ctx):
  # This does not exist,I wish it did: ctx.siblings(kind='alpha')

我见过用这样的标签完成的

beta(
  name = "hello again",alpha_link = ":hello world" # explicitly linking
)

但我觉得这有点冗长,尤其是因为有兄弟查询支持

解决方法

问题的表述方式,答案是否定的。这是不可能的。

Bazel 的设计理念是明确目标依赖性。 Providers mechanism 旨在在分析阶段提供对依赖关系图信息的访问。

很难说实际用例是什么。使用 Aspects 可能是答案。