spacemacs用meghanada打开java文件,跳转引用或者定义的xref需要自己生成etags文件才行吗?

image

java后端使用的meghanada, 使用M-.(跳转到定义)提示:wrong type argument: listp, “client connection not established”, 然后我安装了etags,再用etags生成TAGS文件,然后执行vist-tags-table, 再启用xref-etags-mode,M-.才生效,请问有更便捷的步骤吗?spacemacs develop分支,meghanada版本1.3.1

不明白lsp和etags有什么关系,难道你不安装启动lsp java server吗? https://langserver.org/

好久没用meghanada了,我记得上次用的时候 meghanada是需要启动一个meghanada-server才能正常运行,但跟lsp一点关系没有,什么时候成了lsp的java后端了,与etags好像也没有关系吧,不过meghanada和etags一起用,应该是可以的

描述错了,是java-backend

meghanada是能ping通的,就是xref跳转定义和引用我是单独用etags生成索引才能生效,meghanada我看官网描述是支持xref的跳转定义和引用的,意思是只是支持,配置还是需要自己搞是吗?

meghanada不熟。如果官方文档没讲哪后端TAGS需要自己生成。可以放在after-save-hook里。可能要加个timer控制生成TAGS不能太频繁。也许自己手动生成更好。

xref某种意义上也只是UI前端。实际生成tags的后端是可配置的。你可以用 GNU Global (gtags)做后端。

我了解java好像用GNU Global比较多。counsel-gtags, heml-gtags, ggtags用于代码导航。company-gtags用于自动完成。

meghanada在它的mode里已经注册了xref-backend-functions,可以在一个java的buffer里检查这个的值

不是很清楚meghanada的跳转定义,看描述meghanada的跳转定义是使用的xref,xref通常和etags一起用,但似乎也可以使用etags以外后端提供的候选项,etags的跳转不是很精确,如果要用etags的话,可以单独用,并不需要meghanada,我觉得meghanada应该有自己的跳转定义实现(比etags更精确)而不是用etags

java 建议使用 lsp

image meghanada我没有做什么配置,打开java文件也可以正常开启meghanada-mode,是不是需要做什么配置才能让meghanada的跳转生效? 我这边是需要加一条(add-hook 'meghanada-mode-hook 'xref-etags-mode)才能在java文件里让M-.生效, 但这个应该是用xref函数覆盖了meghanada的

meghanada的bug,有相关issue

我看github上的meghanada提交,显示1.3.1版本已经fix 了xref跳转和定义问题,但我用的就是1.3.1版本,这个大神有没有验证新的1.3.1release版本是否可行?

发现是在dev分支修复的,master分支还没有合并,多谢大神指点,master分支修复的是xref-backend的其他问题,dev分支2020年12月24的提交修了这个问题

我用dev的修复了这个问题的el文件覆盖了我.emacs.d里面meghanada.xxx目录里面的el文件,重新启动后,M-.确实是没有错误提示了,但是跳转还是不行,还是需要我手动生成TAGS文件,然后启动xref-etags-mode才能跳

没有用好用的(合适的)括号插件导致的bug。。。

这应该还是meghanada的问题,应该是server端实现不够完善(比如对于复杂的java模块组织支持不够)。

如果说对于一个最简单的项目如helloworld代码跳转是正常的话。

我就先用etags对付着用了,多谢大神回复,估计用spacemacs+meghanada开发Java的比较少,也没发现有人反馈这个问题