Bazel构建文件内省

Bazel构建文件内省,bazel,Bazel,是否有任何工具可用于内省Bazel构建文件集合,以便对代码库运行查询?我正在考虑一个简单的案例,收集代码库中使用的所有已定义标记。某种bazel元查询功能,它可以让我通过大量的构建文件在repo中确定约定和用法 能够根据它们的集合标记对cc\u test和py\u test规则进行交叉制表,这将是一件好事。理想情况下,应该有一个python客户端来内省bazel文件。bazel query使用一种高度表达的查询语言提供有关目标依赖关系图的信息。它可以输出为各种格式,如点、XML、Protobuf

是否有任何工具可用于内省Bazel构建文件集合,以便对代码库运行查询?我正在考虑一个简单的案例,收集代码库中使用的所有已定义标记。某种bazel元查询功能,它可以让我通过大量的构建文件在repo中确定约定和用法


能够根据它们的集合标记对
cc\u test
py\u test
规则进行交叉制表,这将是一件好事。理想情况下,应该有一个python客户端来内省bazel文件。

bazel query
使用一种高度表达的查询语言提供有关目标依赖关系图的信息。它可以输出为各种格式,如点、XML、Protobuf和扩展构建文件本身的文本表示(如果有宏)以进行后处理。见:

bazel cquery
执行与
query
相同的操作,但也执行分析阶段,该阶段计算目标依赖关系图上的配置信息(例如CPU、API级别)。这需要稍长的时间,但可以更准确地表示Bazel在执行阶段带来的图形。请参阅:

bazel aquery
与构建文件内省没有直接关系,因为它提供了有关可执行操作的信息,这是构建文件解析和分析后的几层计算。见:

query
cquery
aquery
不会对生成文件的语法进行操作。如果您想使用Starlark语法/AST,请查看存储库中的
buildozer
buildifier
工具


如果无法使用这些机制检索有关构建图的信息,请在Bazel GitHub项目上提交一个功能请求。

这里有Bazel查询功能:这个想法是否类似于graphql查询,我从查询中提取所有逐项点击,然后由我将数据汇总成更具说明性的内容?这可能是站得住脚的,因为我可以以startark/bazel语法中的任意构造为目标,从快速浏览的角度来看,根据可能的查询集,它似乎覆盖了大部分的基。我还不完全熟悉bazel,还没有想到一个我无法查询的bazel文件中定义的反例。也许另一种方式是找到跳转到starlark会话的方法,并使用
type
dir
命令进行操作,就像Python加载模块和戳一样围绕我不确定加载构建文件的类似入口点是什么,但这是一个有趣的想法;例如,查找所有加载特定符号的构建文件,类似于这些代码。非常有趣,看起来所有这些
构建工具
都主要是在
go
中编写的,而且buildizer和buildozer确实提供了构建中定义的基本starlark词法分析功能的很好示例。看起来要做我的构建文件分析,我需要学习一些
go
技能。找到了这个小金块,当我在buildtools下搜索starlark导入时,我发现了这个美丽。这里有一个很棒的docstring…使用go.starlark.net/syntax中的AST。这将为我们提供更精确的AST,并允许我们与Skylark解释器共享代码。最终目标是构建一系列能够解析、分析、格式化、重构和评估Skylark代码的工具。