在1.18版本(增加了types.Config.GoVersion
)中,我们希望更好地支持使用最近版本的Go构建gopls来开发针对较旧版本Go运行的目标项目的工作流程。
#50688是必要的但不足以解决问题:设置types.Config.GoVersion
将无法捕获在较晚的Go版本中添加的标准库API的使用情况。我们需要为gopls添加额外的诊断信息。
正确的做法可能是通过具有配置目标语言版本标志的分析器来实现。这使得用户更容易在gopls之外利用此功能,或在gopls内部打开/关闭它。
总体思路:
- 添加一个新的分析器(最初在
x/tools/internal/lsp/analysis
中),报告在目标语言版本中不存在的标准库API的使用情况。它可以从GOROOT/api
中读取以构建接受的API列表。 - 从
go.mod
中推断包的目标语言版本,或者(更有可能的是)公开一个设置来配置它。与types.Config.GoVersion
不同,读取go.mod is probably not good enough here, because IIRC the Go command does not enforce restrictions on standard library API use, so we would disagree. Perhaps we should not have a
gopls特定的配置选项,而是公开一个更通用的配置分析器标志模式。
2条答案
按热度按时间jgwigjjp1#
Compare #46136 , which proposes a similar warning for
cmd/vet
.hof1towb2#
我认为我们不需要这样做。正确的解决方案是使用正确的版本
go
命令。转到我们的未计划的里程碑。