【咨询】转向LSP-BRIDGE以后,如何阅读大型项目的源代码?

经过一番折腾以后,我再次转回 Emacs 阵营,因为:

  1. Emacs 提供了一种整体的美感,尽管感觉不如 VSCODE 那么“专业”,但是它提供了一种“立刻写代码”的快感
  2. 我以后的主力开发语言应该就是 C语言,因为我计划以后从事 PostgreSQL 相关的数据库开发工作(纯C),再不需要什么复杂的东西
  3. 还是舍不得 Emacs China 这么好的社区(哈哈哈哈)

然后我刚刚再次安装了 Emacs 并且启动了配置,现在我下载了一套 PostgreSQL 的数据库源代码,并安装了 Lsp-Bridge 进行源代码解析。 但是,我发现 Lsp-Bridge 似乎“不能理解整个项目”的代码逻辑关系(因为我并不清楚怎么为Lsp-Bridge指定“一个项目的代码解析”)(它在单文件工作下很好)。 有没有一个解决方案呢?还是说我只能如之前那样,手动生成TAGS文件呢?

1 个赞
  1. 检测到 .git 目录时(通过命令 git rev-parse --is-inside-work-tree 来判断), lsp-bridge 会扫描整个目录文件来提供补全
  2. 没有检测到 .git 目录时, lsp-bridge 只会对打开的文件提供单文件补全
  3. 自定义 lsp-bridge-get-project-path-by-filepath 函数, 输入参数是打开文件的路径字符串, 输出参数是项目目录路径, lsp-bridge 会根据输出目录路径来提供补全

我确实注意到了开发文档的这些话语,但是这东西还是工作有问题,因为 postgres_fe.h 也在项目文件夹里边。

现在就是想知道这个问题怎么得解决。

有没有生成 compile_commands.json?

没有,没有看到这个文件。

我检查了一下PostgreSQL的文件目录,确实是存在.git 文件的

这是要你自己提供的,否则 LSP server 不知道编译参数。

不行,没得用,不知道为什么就是死活找不到postgres_fe.h

行的,有得用。你再自查一下吧。

1 个赞

OK,我会去试一试,谢谢你!

你是不是没有安装C语言的LSP Server, 可以装个CCLS 或者Clang 试试

安装了,而且阅读我自己的项目完全没有问题。

lsp bridge 只能 global 开启或者加到对应的 hook 中,对于单个文件开启后跳转到其他文件的时候就没有 lsp bridge mode 了(即使在同一项目下

如果是CCLS的话, 可以类似这样 (setq ccls-args '("--log-file=/home/user/tmp/ccls.log")) 设定个log输出文件, 然后去看这个log 到底少分析了哪些文件, 或者看看 lsp-bridge , lsp 的相关buffer有没有错误信息

我是 clangd

(setq lsp-bridge-enable-log t), 然后看看 *lsp-bridge* 报啥错或者 clangd 输出了啥?

找到问题再把上面选项关闭了, 打开日志严重影响性能。

后面我看了一下,问题应该出在lsp自己上面

VSCODE 也找不出来

感觉没有解决思路

其实我认为 C 因为语法和规则太简单了,完全不需要 lsp,Emacs 自带的 xref-find-definitions 和 etags 就可以解决,也不需要 flymake,一边编译一边修错误就可以了。没必要折腾 lsp 啥的。

1 个赞