什么时候可以开发出一套国版IDEA 就好了
更新: 没有实现新lsp特性,但是重写了请求响应处理,rs侧接口改为异步+pull的模式,很大程度缓解了卡手的问题。
另外github上提交了一个我在manjaro上编译出来的.so文件,方便没有rust环境的朋友试用。
Edit: 补全时支持insertText/textEdit了,所以首帖里补全rs时会多(as Clone)的问题没有了。
慢慢来,至少现在有巨人的肩膀可以站,可以有越來越好的开发环境了。
感觉 跟eglot 体验差不多,丝滑度 还比 lsp-bridge 差一些, 昨晚 在家里的电脑上使用 感觉 内存占用 要多一些。 还是很期待的。
不跟lsp-bridge比丝滑度,比不过比不过。
目前还是以功能开发为主,计划好的功能实现之后再来优化。
再多说两句关于丝滑度的,我的目标是要比eglot好,争取不要比lsp-bridge差很多,但是因为要支持xref/capf这些现有生态,所以有些时候不以性能作为最优先考虑的。
哈哈哈,支持,试用一下
更新一波,庆祝论坛终于又回来了
- 支持code action
- 支持rename
- 补全支持auto import
- 缓解了一下补全窗口闪烁的问题
- 修复了用corfu补全的一个问题。修复前,如果用corfu前端,snippet不工作,而且只支持插入label,现在应该好了。 感谢 @Shadow-e190 反馈。
我自己需要的lsp特性基本都已经支持了,后续会以修复bug为重点,性能提高也会继续。新特性添加会比较谨慎,一是时间有限,更主要的是我自己用不到的特性就不容易发现bug。
想问下目前性能瓶颈主要是在什么地方呢?
没有做过性能测试,拍脑袋说两句。
从架构上来说,目前没有想到可继续提升的地方了,主要还是实现细节上,譬如减少序列化反序列化,或者在rs代码里对返回数据做一些预处理(目前rs只是中转,所有处理都在elisp里)。
以我自己的体验来看,性能还是可以的。后面在使用过程中继续体验和改进。
期待!把耗资源操作尽量都放到rs里性能会提高很多。
今天想试用一下,按照 readme 配置好后,打开任意一个 rust project 都会报下面的错:
user-error: lspce--connect: Do not support current buffer.
No project for file:///home/weiss/weiss/rust_test rustic-mode
eldoc error: (wrong-type-argument hash-table-p nil)
是我哪里配置的有问题吗?
另外 readme#installing-from-the-git-repository 里的第一行是不是应该是
git clone https://github.com/zbelial/lspce.git ~/.emacs.d/site-lisp/lspce
是我偷懒了,readme不完整。
需要配置这个(对于rust,默认配置了rust-mode)
(setq lspce-server-programs `(("rustic-mode" "rust-analyzer" "" lspce-ra-initializationOptions)
("python-mode" "pyright-langserver" "--stdio" lspce-pyright-initializationOptions)
))
其中每一项是一个列表,对应一个lsp server。以("rustic-mode" "rust-analyzer" "" lspce-ra-initializationOptions)
为例,第一项是lsp type,由一个函数确定,对于大部分文件类型来说,就是major-mode的字符串;第二项是lsp sever程序,可以配置成字符串,也可以是返回字符串的函数;第三项是server启动参数,同样既可以是字符串,也可以是函数;第四项可选,配置sever的启动选项。
lsp type由lspce-lsp-type-function
确定,默认的函数是
(defun lspce--lsp-type-default ()
"The return value is also used as language-id."
(let ((suffix ""))
(when buffer-file-name
(setq suffix (file-name-extension buffer-file-name)))
(cond
((member suffix '("c" "c++" "cpp" "h" "hpp" "cxx"))
"C")
(t
;; (string-remove-suffix "-mode" (symbol-name major-mode))
(symbol-name major-mode)
))))
是的,多谢指正。
我找时间整理一波readme。
好的谢谢,可以跑起来了,简单用了下还不错 ,想问下是计划只支持 flymake
吗?另外有类似 lsp-ui-flycheck-list
的函数吗,也即列出 project 中所有的错误。
目前只打算支持flymake,主要是我自己不用flycheck。欢迎提pr支持flycheck
列出所有错误我是用counsel-flymake,你如果用consult之类的,可以研究下看有没有类似命令。
好吧,谢谢了。
在rs中做事可以做更多的事情,emacs实现展示和编辑,这样应该会更好一点。
能支持多后端吗?比如前端需要在一个文件中有两个后端:一个 TypeScript 的支持,另外一个是 TailwindCSS 的支持。
是的,至少能提高性能,不过我自己现在用得挺满意了,没啥动力啊
目前是不支持的,稍微想了下,好像不太容易支持。最重要的问题是怎么跟server同步文档、怎么知道请求要发送到哪个server。vscode支持吗?