你正在使用的Go版本、VS Code和VS Code Go扩展的版本是什么?
- 运行
go version
以获取Go的版本 - go version go1.14.3 darwin/amd64
- 运行
code -v
或code-insiders -v
以获取VS Code或VS Code Insiders的版本 - 1.46.0
- a5d1cc28bb5da32ec67e86cc50f84c67cc690321
- x64
- 检查已安装的扩展以获取VS Code Go扩展的版本
- 0.14.4
完整代码:
package main
import "fmt"
type result struct {
value interface{}
err error
}
func getResult() (interface{}, error) {
return "test", nil
}
func main() {
var res result
res.value, res.err = getResult()
fmt.Println(res)
}
当我输入"res."时,我希望出现"err"。
但现在代码补全停止工作了,我不得不手动输入"err"。
请修复这个bug,谢谢。
7条答案
按热度按时间vnjpjtjt1#
另一个问题:当我在这里输入tab时,我希望出现"getResult()",但现在只出现了"getResult"。
8yparm6h2#
感谢您的报错报告。
您能否运行
Preferences: Open Settings (JSON)
命令和Preferences: Open Workspace Settings (JSON)
,并与go.
、["go"]
或gopls
前缀共享所有设置?elcex8rz3#
a0zr77ik4#
koaltpgm5#
感谢@kzhui125!
/cc @stamblerre 你能帮忙看一下并在gopls问题追踪器中进行分类吗?这个问题讨论了两个症状,我想底层问题与#38600相似。
"usePlaceholders": true
,但仍然缺失()
。anhgbhbe6#
刚刚看了一下。与其他许多可以通过改进解析器错误恢复来解决的完成问题不同,我认为这不能仅靠go/parser来实现。没有明显的方法将这种(无效)语法表示为有效的语法树。
也许我们可以有一些基本的回退机制,在标识符上查找前一个选择器,然后在适当的范围内评估该标识符。我不确定这种技术能推广到多大程度,所以我不确定它是否值得去做。
mwyxok5s7#
我预计这种情况非常常见,因此在gopl的附加恢复(fixAST)中值得特别处理。在上面的示例中,序列[period, newline, "outdent"]是一个很好的迹象,表明当前行不完整。它可以修复为
SelectorExpr(Ident("res"), Ident(""))
。