请教一下libclang、clangd、lsp、compilation database的关系

在clang官网上有这么一句话:

To bring basic IDE-like features to text editor you need 2 things:

  1. text editor plugin which integrates libclang
  2. a compilation database, to feed to libclang

就Emacs+lsp-mode用法而言,libclang分析语法是在clangd内部完成的吗,lsp-mode只是配合compilation-db做了一个转发的功能?

libclang 是 clang 提供的一套 API,使用 libclang 可以完成对 C/C++ 语言的词法、语法解析。

clangd 是 clang 基于内部 API (通常 libclang 是指 C 的版本) 实现的,因此相对于 C 版本的 libclang 来说可以获得信息会更多。

compile_commands.json 文件主要是辅助提供编译时选项,主要是那些 include path、宏定义,以避免在解析文件时头文件找不到导致的解析文件失败。

您好,那lsp-mode本身更多起到的是转发、与用户交互方面控制的功能是吗

对的, lsp-mode 是一个 client, 只是把对应的请求发送至 clangd。