Closed lynnux closed 7 months ago
另外这里记录下一些发现的问题:
lspce--connect: No valid server.
,发现是lspce--choose-server
的问题,这个只会返回nil,我用的是vertico,看代码你好像用的ivy,不知道是不是这个原因?我直接在lspce-server-programs
去掉一个python server解决。lspce-mode
,如xml文件打开lspce-mode,补全会报错:
Debugger entered--Lisp error: (wrong-type-argument hash-table-p nil)
gethash("completionProvider" nil)
lspce--server-capable("completionProvider")
(and t (lspce--server-capable "completionProvider"))
(let* ((completion-capability (and t (lspce--server-capable "completionProvider")))) (if completion-capability (let* ((trigger-chars (lspce--server-capable-chain "completionProvider" "triggerCharacters")) (bounds (bounds-of-thing-at-point 'symbol)) (bounds-start (lspce--completion-bounds-start (cl-first bounds) trigger-chars)) (sort-completions #'(lambda (completions) (cl-sort completions ... :key ...))) done? (cached-proxies :none) (proxies #'(lambda nil (let* ... ... ...))) (resolved (make-hash-table)) (resolve-maybe #'(lambda (lsp-item) (or ... ...)))) (list bounds-start (point) #'(lambda (probe pred action) (let (collection) (cond ... ... ... ... ...))) :annotation-function #'(lambda (proxy) (if lspce-completion-no-annotation nil (let* ... ... ... ...))) :company-require-match 'never :company-kind #'(lambda (proxy) (let* (... ...) (if kind ...))) :company-deprecated #'(lambda (proxy) (let (... tags deprecated) (progn ... ...) (or ... ...))) :company-doc-buffer #'(lambda (proxy) (let* (... ...) (if formatted ...))) :company-prefix-length (save-excursion (if (car bounds) (progn (goto-char ...))) (if (hash-table-p completion-capability) (progn (looking-back ... ...)))) :exit-function #'(lambda (proxy status) (if (memq status ...) (progn ...))))) nil))
lspce-completion-at-point()
corfu--capf-wrapper(lspce-completion-at-point)
run-hook-wrapped(corfu--capf-wrapper lspce-completion-at-point)
corfu--auto-complete-deferred((#<window 3 on xxx.xml> #<buffer xxx.xml> 232 871))
apply(corfu--auto-complete-deferred (#<window 3 on xxx.xml> #<buffer xxx.xml> 232 871))
timer-event-handler([t 26006 4541 696078 nil corfu--auto-complete-deferred ((#<window 3 on xxx.xml> #<buffer xxx.xml> 232 871)) nil 0 nil])
作者大大好,这个包很好,我很想拿它代替eglot,速度很快,不足的就是缺少format功能,是否有计划实现呢?
当时开始做lspce之前就大概确定了一个原则,Emacs本身已经有且足够好的功能,就不再实现lsp里同类的功能了,Emacs本身的indent我觉得足够满足我需要了,就没实现format。
当用python时会选择两个server,但选择其中之一后会提示:
lspce--connect: No valid server.
,发现是lspce--choose-server
的问题,这个只会返回nil,我用的是vertico,看代码你好像用的ivy,不知道是不是这个原因?我直接在lspce-server-programs
去掉一个python server解决。对没有server的文件开启
lspce-mode
,如xml文件打开lspce-mode,补全会报错:
这两个问题我再看一下(我先把这个issue打开了,省得忘了)。总体上来说,lspce比其它几个lsp客户端稳定性应该要稍差一些,有些问题在我的环境里不会出现,但因为用户少,就没爆出来了。
最后,感谢试用,感谢反馈。欢迎继续反馈问题 :)
当用python时会选择两个server,但选择其中之一后会提示:
lspce--connect: No valid server.
,发现是lspce--choose-server
的问题,这个只会返回nil,我用的是vertico,看代码你好像用的ivy,不知道是不是这个原因?我直接在lspce-server-programs
去掉一个python server解决。
- 对没有server的文件开启
lspce-mode
,如xml文件打开lspce-mode,补全会报错:
这两个问题我都尝试改了一下,你可以再试试。
谢谢,我测试最新的这两个问题已经都解决了。
还有个小问题就是如果server有问题,比如rust安装后有个rust-analyzer占位,但实际没有lsp功能,运行它会报错,这时lspce-mode开启会卡死emacs,查了下发现有个lspce-connect-server-timeout
可以控制卡死时间,也就是说lspce connect是同步的。不知道这个好改不,eglot好像connect也是同步的,但有个变量eglot-sync-connect
设置为nil就不卡了。这个小问题可以改也可以不改,已经有卡住经验了下次就知道去查server问题了。
改成完全非同步的工作量稍微大点,最近时间也不多,可能得过段时间才能再看。 有的server(譬如typescript的deno),shutdown也可能卡。我后面一起考虑下怎么改吧。暂时只能先忍受一下这个问题
这个issue我就先关闭了,后面如果需要再打开。
改成完全非同步的工作量稍微大点,最近时间也不多,可能得过段时间才能再看。 有的server(譬如typescript的deno),shutdown也可能卡。我后面一起考虑下怎么改吧。暂时只能先忍受一下这个问题
嗯嗯,对的,有个机子shutdown也卡了一次,但我工作的机子暂时没复现。
作者大大好,这个包很好,我很想拿它代替eglot,速度很快,不足的就是缺少format功能,是否有计划实现呢?