对于 Gazelle,如何让它使用 WORKSPACE 中定义的 go_repository?
For Gazelle, how can I make it use go_repository defined in the WORKSPACE?
在我的 WORKSPACE 中,我为 importpath golang 定义了 go_repostitory。org/x/net。
go_repository(
name = "org_golang_x_net",
commit = "5ccada7d0a7ba9aeb5d3aca8d3501b4c2a509fec",
importpath = "golang.org/x/net",
)
但是我运行瞪羚的时候,BUILD.Bazel添加的依赖不是@org_golang_x_net//context:go_default_library。相反,它是以下内容://golang.org/x/net/context:go_default_library
为什么gazelle会忽略定义的go_repository?有没有办法让它考虑在 WORKSPACE 中定义的 deps?
我从你的 猜测这是因为你使用了空前缀。
Gazelle 通过几个步骤解析 Go 导入到 Bazel 标签:
- 如果您的工作区中有
go_library
且匹配 importpath
,Gazelle 将使用该库的名称。
- 如果导入路径低于存储库的顶级前缀,则导入将被视为 "local",因此您将获得类似
//golang.org/x/net/content:go_default_library
的标签。
- 由于您在顶层使用了空前缀,因此此捕获将捕获每个未知的导入。
- 这应该改进。 Gazelle 的解析器应该知道在不同目录中定义的前缀(目前,那些仅用于确定生成规则的
importpath
属性)。我已经提交 bazelbuild/bazel-gazelle#101 来解决这个问题。
- 如果导入不被认为是本地的,Gazelle 将根据外部模式为外部存储库或供应商目录生成标签。
现在,您可能想要向顶级构建文件添加一个指令,例如:
# gazelle:prefix __do_not_match__
这将基本上禁用第二种情况,因为不会从那里开始任何导入。你的 src 目录中仍然会有一个空前缀(在 src/BUILD.bazel 中设置 # gazelle:prefix
),所以你的库仍然会有正确的 importpath
指令。不过,您可能希望将其设置为更具体的子目录。
在我的 WORKSPACE 中,我为 importpath golang 定义了 go_repostitory。org/x/net。
go_repository(
name = "org_golang_x_net",
commit = "5ccada7d0a7ba9aeb5d3aca8d3501b4c2a509fec",
importpath = "golang.org/x/net",
)
但是我运行瞪羚的时候,BUILD.Bazel添加的依赖不是@org_golang_x_net//context:go_default_library。相反,它是以下内容://golang.org/x/net/context:go_default_library
为什么gazelle会忽略定义的go_repository?有没有办法让它考虑在 WORKSPACE 中定义的 deps?
我从你的
Gazelle 通过几个步骤解析 Go 导入到 Bazel 标签:
- 如果您的工作区中有
go_library
且匹配importpath
,Gazelle 将使用该库的名称。 - 如果导入路径低于存储库的顶级前缀,则导入将被视为 "local",因此您将获得类似
//golang.org/x/net/content:go_default_library
的标签。- 由于您在顶层使用了空前缀,因此此捕获将捕获每个未知的导入。
- 这应该改进。 Gazelle 的解析器应该知道在不同目录中定义的前缀(目前,那些仅用于确定生成规则的
importpath
属性)。我已经提交 bazelbuild/bazel-gazelle#101 来解决这个问题。
- 如果导入不被认为是本地的,Gazelle 将根据外部模式为外部存储库或供应商目录生成标签。
现在,您可能想要向顶级构建文件添加一个指令,例如:
# gazelle:prefix __do_not_match__
这将基本上禁用第二种情况,因为不会从那里开始任何导入。你的 src 目录中仍然会有一个空前缀(在 src/BUILD.bazel 中设置 # gazelle:prefix
),所以你的库仍然会有正确的 importpath
指令。不过,您可能希望将其设置为更具体的子目录。