当只有一个文件被索引时,`clangd`如何知道函数定义在哪里?

当只有一个文件被索引时,`clangd`如何知道函数定义在哪里?,clang,llvm,language-server-protocol,clangd,Clang,Llvm,Language Server Protocol,Clangd,当通过LSP(语言服务器协议)消息为一个文件编制索引时,clangd如何知道函数定义在哪里 这个问题基于这样的假设,即没有compile_commands.json文件供clangd使用 据我所知,clangd在工作区(?)中没有compile_commands.json文件的情况下,当clangd接收到LSP消息textDocument/didOpen时,clangd将部分索引(?)给定的文件 因此,被部分索引的文件的索引将只驻留在内存中 那么clangd在不知道任何外部文件的情况下,如何知道

当通过LSP(语言服务器协议)消息为一个文件编制索引时,
clangd
如何知道函数定义在哪里

这个问题基于这样的假设,即没有
compile_commands.json
文件供
clangd
使用

据我所知,
clangd
在工作区(?)中没有
compile_commands.json
文件的情况下,当
clangd
接收到LSP消息
textDocument/didOpen
时,
clangd
将部分索引(?)给定的文件

因此,被部分索引的文件的索引将只驻留在内存中

那么
clangd
在不知道任何外部文件的情况下,如何知道部分索引文件之外的定义呢

或者它意识到了吗


或者,它是否通过某种启发式方法了解到了其他文件,这些启发式方法查看了相对路径或仅位于目录
根项目目录/src
及其类似目录中的include(
#include”“
),因为没有很好的文档记录,最好的方法可能是在源代码中进行调试。我对LSP和Clangd folk都有过了解。Clangd从磁盘打开文件,即使它没有收到专门针对include文件的DidOpen调用。它这样做是为了编译源代码,如果没有头文件,这是不可能的。所以,是的,它知道的远不止DidOpen。也就是说,我不确定它是如何计算工作区的,以及如何计算包含路径的。它要么通过消息发送到客户端,要么在客户端计算出来,然后发送到服务器。因为这没有很好的文档记录,最好的方法可能是调试到源代码中。我对LSP和Clangd folk都有过了解。Clangd从磁盘打开文件,即使它没有收到专门针对include文件的DidOpen调用。它这样做是为了编译源代码,如果没有头文件,这是不可能的。所以,是的,它知道的远不止DidOpen。也就是说,我不确定它是如何计算工作区的,以及如何计算包含路径的。它要么通过消息发送到客户端,要么在客户端计算出来,然后发送到服务器。