对于Gazelle,我如何使用WORKSPACE中定义的go_repository?

时间:2018-01-24 13:28:18

标签: go bazel

在我的WORKSPACE中,我为importpath golang.org/x/net定义了go_repostitory。

go_repository(
   name = "org_golang_x_net",
   commit = "5ccada7d0a7ba9aeb5d3aca8d3501b4c2a509fec",
   importpath = "golang.org/x/net",
)

但是当我运行gazelle时,添加到BUILD.Bazel的依赖项不是@ org_golang_x_net // context:go_default_library。相反,它是以下内容://golang.org/x/net/context:go_default_library

为什么gazelle忽略定义的go_repository?有没有办法考虑在WORKSPACE中定义的deps?

1 个答案:

答案 0 :(得分:1)

我猜测你previous question这是因为你使用的是空前缀。

瞪羚通过几个步骤解决了Go进口到Bazel标签的问题:

  1. 如果您的工作区中有go_library且匹配importpath,则Gazelle将使用该库的名称。
  2. 如果导入路径低于存储库的顶级前缀,则导入将被视为" local",因此您将获得类似//golang.org/x/net/content:go_default_library的标签。
    • 由于您在顶层使用空前缀,因此此捕获将捕获每个未知的导入。
    • 这应该改进。 Gazelle的解析器应该知道在不同目录中定义的前缀(目前,这些前缀只用于确定生成规则的importpath属性)。我已提交bazelbuild/bazel-gazelle#101来解决此问题。
  3. 如果导入不被视为本地导入,Gazelle将为外部存储库或供应商目录生成标签,具体取决于外部模式。
  4. 目前,您可能希望向顶级构建文件添加指令,如:

    # gazelle:prefix __do_not_match__
    

    这基本上会禁用第二种情况,因为不会从那开始导入。您的src目录中仍然有一个空前缀(在src / BUILD.bazel中设置为# gazelle:prefix),因此您的库仍将具有正确的importpath指令。您可能希望将其设置为更具体的子目录。