我的C项目具有以下结构。这是大型项目的结构,我无法更改结构。我想使用YouCompleteMe完成该项目的语义代码。
main/ // folder for C file to be compiled
|- module1.c // module main C file.
|- module2.c
|- .....
module1/
|- mod1_func1.c // function file to be included in main module C file.
|- mod1_func2.c
|- mod2_func3.c
module2/
|- mod2_func1.c
|- mod2_func2.c
|- mod2_func3.c
的内容moduleX.c
,将包括所有相关的头文件和与模块相关的C文件。
#include "header1.h"
#include "header2.h"
...
#include "modX_func1.c"
#include "modX_func2.c"
的内容modX_funcX.c
具有一个或几个功能定义。没有标题
// no header file included here
int modX_funcX(void) {.....}
因为没有包含相关的标头,所以clang
必须解析moduleX.c
以便在上完成代码modX_funcX.c
,我已尝试clang
从命令行进行代码完成。下面的命令有效
clang -x c -fsyntax-only -code-completion-at mod1_func1.c:4:11 module1.c
所以我的问题是:如何在编辑modX_funcX.c
文件时配置YouCompleteMe以完成代码?
我猜想可能需要对YouCompleteMe源进行修改才能完成此工作。我当前的想法是添加具有以下格式的文件映射数据库:
path_of_file_to_complete:path_of_file_for_clang_to_parse
因此,在发送代码完成请求之前,请path_of_file_for_clang_to_parse
基于当前缓冲区名称从数据库中获取该文件名,并将其传递给libclang
。
我的想法可行吗?如果是,则在何处添加此文件映射功能?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句