#1330·gopherjs

建议: 更严格地检查原生覆盖

作者: grantnelson-wf创建于 2024年7月22日更新于 2024年7月25日

更严格的原生覆盖检查 ## 问题 目前,任何在原生覆盖中,如果没有指令说明相反,都会覆盖同一个包中具有相同标识符的任何内容。Go 仓库对导出类型、变量、常量、方法等的修改有严格的规则,但是非导出方法可能在每个修订版本中都会发生变化。由于许多覆盖都是针对非导出方法,因此在原生覆盖过时时写入警告会很有帮助。本问题提出了一组新的指令,这些指令将帮助贡献者跟踪 Go 中的变化。此次更改在将 GopherJS 版本升级到新版本的 Go 时将最有帮助。目标是帮助节省时间并生成更好的结果,以便进行版本升级。此次更改还将在进行任何修订版本内的更新时,对于改变原生覆盖的任何更新提供一些帮助。此次更改还将帮助贡献者了解之前的贡献者意图是覆盖代码还是辅助代码。 ## 建议的解决方案 我建议提供一款可按需运行的工具,该工具可遍历 Go 仓库中的每个包并运行构建过程。这将使我们能够检查 GopherJS 仓库中原生覆盖中的每个包。构建器应添加一个名为 strictOverrides 的标志,默认为 false。在将 strictOverrides 标志设置为 true 时,将输出以下所述的警告。在运行此新工具时,strictOverrides 将设置为 true,因此只有在贡献者正在处理版本升级时,这些新警告才会输出。此工具还可以作为 GHA CI 任务运行。对于在覆盖中找到的任何不存在于 Go 仓库中的包,应输出警告。这表明某个包已被删除或移动,并且覆盖代码也应被删除或移动。警告可能是类似于"警告:包 [包路径] 不再存在于 Go 仓库"的内容。为了使此功能正常工作,我们需要两个新指令:replacenew。这些名称只是本次提案的初步名称。这两个指令在不满足特定条件时输出警告(或错误)。由于一个整个包可能被移动、删除、重构等,因此应仅从任何包中输出前 N 个(可能为 5-10)警告。 ### replace 指令 replace 指令(//gopherjs:replace)将告诉构建器必须在被覆盖的同一个包中找到匹配的标识符,否则应输出警告。replace 指令检查被覆盖代码是否被重命名、迁移或从代码库中移除。输出的警告可能是类似于"警告:原生覆盖 [标识符] 在 [包中] 不再存在"的内容。

内容来源: gopherjs/gopherjs