求助,eglot在snippets场景下的一个疑似bug

版本信息:

eglot (20220123.1406)
Java语言服务器:jdt (jdt-language-server-1.9.0-202202050201)
Emacs 版本:27.2 (29.0也能复现)

现象:

1)开启yas-minor-mode,输入sys,提示可以补全System.out.println(类型提示是Snippet),按回车选中候选,上屏的是sysSystem.out.println(0);

2)关闭yas-minor-mode,输入Sys(第一个S大写),也可以补全System.out.println(看类型提示也是Snippet),按回车之后是: SysSystem.out.println(${0}); 而且光标在分号的后面。

排查(可能有点帮助):

现象1,经过git bisect来看,是 76d8f49cd41f394cc602433ba79b5d18a163517f这个commit引入的,所以我临时将下图的标红代码注释掉了,现象恢复正常。但eglot的开发者认为可能不是eglot的问题(#836)。由于才疏学浅,实在不能做更多的debug,所以求助于大家。我接下来也做更多的对比测试。

现象2,一筹莫展。

一些辅助截图:

给各位鞠躬致谢!

初步测试,现象2在lsp-mode里面也存在;但现象1在lsp-mode中不存在。

关闭了 yas-minor-mode , 现象2对于 lsp-mode 来讲是正常现象,可以将 lsp-enable-snippet 设置成 nil 关闭这种行为

1 个赞

非常感谢!!