没有看出“集中”在哪里,这些代码放在用户配置里,也不会造成不集中。何况作者想要把它提交为内置包,我不认为 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))