要是把 3. 让 lsp-bridge 支持远程部署
做完了,怕不是成 Emacs 大杀器了,现在 Tramp 的体验实在难受,lsp 配套也跟不上,公司环境还有 ssh 限制,要实现远程开发太难了
等明年吧,今年太忙了。
即使农历年,距离明年也就一个月了
肯定不会那么快的,不要期待过高。
哈哈,就是开个玩笑,Tramp 的问题难了这么多年了,也不期待几个月能解决这个问题,只是看到 lsp-bridge 的设计和你的计划,感觉有盼头了
更新最新版后需要重启emacs
多谢大佬,终于在doom emacs里用上了
可以用下面的代码跟gd命令整合
(set-lookup-handlers! 'rustic-mode :async t
:definition #'lsp-bridge-find-def
:implementations #'lsp-bridge-find-impl)
这个 --cancellationReceive 选项加了, pyright 就不会吐出诊断信息了, 奇怪, 我研究一下。
引入这个选项会导致不发送诊断信息, 我 copy 了一个 pyright-background-analysis.json, 大佬在意性能, 可以把 lsp-bridge-python-lsp-server
设置成 pyright-background-analysis
就可以了。
当然正确的做法是微软应该去掉这种私货选项, pyright 的一些高级功能已经违背了微软自己建立的 LSP 标准。
懒猫是否方便给一个 lsp-bridge-get-project-path-by-filepath
的例子,Emacs lisp 水平有限,写来写去总碰壁,要不就不好使
主要就是给一个路径列表,然后匹配到这个路径的文件就用这个路径当 project root
这个函数很好写啊, 它就只有一个参数 filepath, lsp-bridge 打开 filepath 这个文件的时候就传递给 lsp-bridge-get-project-path-by-filepath
(defun get-project-path (filepath)
"/home/user/project")
就这么简答, 只不过你要自己写上面函数的逻辑, 匹配的就返回一个字符串, 不匹配就返回 nil 就好了。
lsp-bridge 发现 lsp-bridge-get-project-path-by-filepath 返回 nil 的时候就会继续查找 git 命令的查询结果。
(setq lsp-bridge-get-project-path-by-filepath
(lambda (filepath)
(save-match-data
(and (string-match "/home/xinyifly/git/foo/\\([^/]*\\)" filepath)
(match-string 0 filepath)))))
我的场景是 monorepo,匹配到 foo 之后用 foo 里面的一级子目录作为 lsp-bridge 的项目目录。
需要注意的是 defcustom
和 defun
的名称空间不同。
有个关键的问题没弄懂,怎么跳出循环呢?
我是直接给出一个预期的路径列表,匹配了就返回,一开始用 dolist 执行的,但是一直不知道怎么在匹配之后不执行后面的迭代,后来改成 while,特别丑陋。。。
(setq lsp-bridge-get-project-path-by-filepath
(lambda (path)
(let ((found nil)
(whitelist '("/path1"
"/path2")))
(while (and (not found)
whitelist)
(setq project (car whitelist))
(setq whitelist (cdr whitelist))
(if (string-prefix-p project path)
(setq found t)))
(if found
project
nil))))
cl-return
改成 cl-dolist 和 cl-return 可以了,之前试过 cl-return,没注意要用 cl-dolist 才行
今天提送了一个补丁, 使得 TypeScript 的补全耗时从 300ms ~ 5000ms 降低到 30ms ~ 1000ms , 补全性能提升 5~10倍, 感谢 @vritser 大佬的反馈。
这好像有个小bug,调用了 cl-return
所以这是不是需要改成 cl-dolist
? 现在调用这个函数会报错
我用手机打了个补丁,应该没问题。
感谢反馈。
感谢!遇到另外一个问题。当buffer里有2个diagnostic error,使用lsp-bridge-diagnostic-jump-next
只能跳到第一个error。原因是我用了这个hydra插件,当我按 ,
或 SPC 呼出hydra menu的时候就会触发lsp-bridge-monitor-post-command
,进而调用lsp-bridge-hide-diagnostic-tooltip函数,这导致lsp-bridge-in-diagnostic-overlay-area-p
总返回nil
(因为lsp-bridge-diagnostic-frame
总是nil
)
请问有什么workaround吗?