又有人给emacs开发了一个lsp客户端

没有看出“集中”在哪里,这些代码放在用户配置里,也不会造成不集中。何况作者想要把它提交为内置包,我不认为 Emacs 开发者能接受这种把某个特定 ls 的配置写进基础包的做法。

不能这么看。验证核心功的时侯可以写得简洁一点,要达到可用的程度,处理各种枝末细节的问题,代码自然就多了,然后开始抽象/复用。。也少不了会用到宏。

lsp-mode 现在 1100 多次提交,代码 2500 多行,注释近 500 行,测试近 300 行,似乎也没有很臃肿。


一些函数不能跳转,确实有点烦,不过在 lsp-mode 中没那么严重吧,大家还是对 spacemacs 吐槽比较多。

不能跳转也不是因为它是宏,而是因为没有实现相应的查找规则。宏没什么特别的 (最常用的 defun 就是宏),都是文本查找而已:

  • find-function-regexp

    "^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|ine\\(?:-global\\)?-minor-mode\\|ine-compilation-mode\\|un-cvs-mode\\|foo\\|\\(?:[^icfgv]\\|g[^r]\\)\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|menu-bar-make-toggle\\)\\(?:\\s-\\|
    \\|;.*
    \\)+\\('\\|(quote \\)?%s\\(\\s-\\|$\\|[()]\\)"
    
  • find-function-regexp-alist

    ((define-mode-local-override . xref-mode-local-find-override)
     (define-overloadable-function . xref-mode-local-find-overloadable-regexp)
     (flycheck-checker . flycheck-find-checker-regexp)
     (define-type . cl--typedef-regexp)
     (cl-defgeneric . cl--generic-find-defgeneric-regexp)
     (cl-defmethod . cl--generic-search-method)
     (nil . find-function-regexp)
     (defvar . find-variable-regexp)
     (defface . find-face-regexp)
     (feature . find-feature-regexp)
     (defalias . find-alias-regexp))