Emacs C mode 的一个#if 代码高亮问题

我认为修改 font lock 不应该是首先考虑,解决问题思路应该是这样的:

  1. 先检查 lsp 是否安装&配置正确。

    如果 lsp 配置都不正确了,此时修改 font lock 就舍本求末了。

  2. 是否 ls 本身的 bug。

    如果 ls 安装&配置正确且已经启用, #if ... 条件成立,其包裹的代码是可以跳转和高亮的。

    我之前也遇到类似问题:#if 条件成立,代码仍然是灰色 -->> 幫忙改進 C++ LSP 體驗 #58,选用正确 libclang 重编之后就正常了 -->> 幫忙改進 C++ LSP 體驗 #63。 虽然不完全一样,但说明 ls 存在 bug 的可能性。

    按理说,只要修改源代码&存盘,ls 立即就会解析。可以编译 debug 版本,把 log 抓出来看看,ls 是否有立即响应代码变更。


APPEND 2018-09-06 18.40.43

把以前的测试代码翻出来,录了一组动图:

emacs-lsp-cquery-detect-if-macro-change