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
好久没用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
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的修复了这个问题的el文件覆盖了我.emacs.d里面meghanada.xxx目录里面的el文件,重新启动后,M-.确实是没有错误提示了,但是跳转还是不行,还是需要我手动生成TAGS文件,然后启动xref-etags-mode才能跳
没有用好用的(合适的)括号插件导致的bug。。。
这应该还是meghanada的问题,应该是server端实现不够完善(比如对于复杂的java模块组织支持不够)。
如果说对于一个最简单的项目如helloworld代码跳转是正常的话。
我就先用etags对付着用了,多谢大神回复,估计用spacemacs+meghanada开发Java的比较少,也没发现有人反馈这个问题