首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一起看看VIM著名补全插件YouCompleteMe的架构和实现

(3)因为用了高版本libclang,其头文件与YouCompleteMe中引入的不同,导致补全和语法提示出现一些奇奇怪怪的问题,比如无法识别复杂类型的函数参数等。...这个translation_unit代表了一个编译单元,承担了直接和libclang打交道的任务,且这里开始由C++代码进行处理。...6. libclang根据上下文实现了语义补全,至于如何实现的,就与YCM关系不大了,这里暂时没有再深入研究libclang源码。...4.2 回包过程 image.png 详细说明: 7. libclang处理后,返回语义补全结果到上层。 8....但从本质上来说,ycmd自身做的工作并不复杂,从上面的两个流程图可以看出,都是一条直线处理的逻辑,其实就是接受请求,协议转换,调用libclang,回包而已,最困难的语法解析和语义补全已经都交给libclang

4K21

ClangSharp依赖的动态库编译

ClangSharp本身依赖了llvm, 以及自己的一个libClangSharp的库, windows和linux下需要编译一下llvm和这个库, 一般来说系统没变的情况下, 直接使用已经编译好的libclang.so...关于LLVM的编译 因为我们并不直接使用clang编译代码, 而只是使用libclang来生成AST, 所以此处我们需要的产物其实是libclang.so/dll....libClangSharp, build, 即可完成相关的编译操作. 2.3 结语 以lura-tool为例 , 我们其实需要的是如下图所示的so/dll: 这里处理的是windows版, 所以是libclang.dll...和libClangSharp.dll, 两个文件的目录分别在: libclang.dll: llvm\llvm-project\artifacts\install\bin\libclang.dll libClangSharp.dll...: llvm11/llvm-project/artifacts/install/lib/libclang.so (实际是libclang.so.11.1的软链) libClangSharp.so:

1.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

轻松掌握C++ AST的处理方法 - CppAst.Net使用介绍

要使用这种方式, 我们先来简单的了解一下libclang. 2.1 libclang 和它带来的改变 libclang是llvm工具链中的一部分, 整个llvm的工作过程简单来说可以看成下图所示:...像上面介绍的 CE 的方案一样, 基于 libclang 和二次编译, 我们可以在设计层面整理出一个很简洁的离线代码生成工具的流程, 但基于libclang离线工具的实际实现过程中依然还是会碰到种种问题...除了上面列的这些问题, 还有以下这些 libclang 和 C++ 复杂度本身带来的问题: 2.2 libclang 本身的 Cursor 机制带来的限制 libclang 本身是以 Cursor...所以曾经在 G6 的时候, 我们是通过 C# 来访问 libclang 的(使用 ClangSharp ), 当时我们就尝试自己在 C# 层中完整的保存了一份来自 libclang 的数据层, 当然,...这个数据层肯定也是通过 libclang 原生的回调方式一次性获取的, 这样离线工具与 libclang 的原生 AST就解耦了, 也不会有 libclang 回调和多次获取数据不便的问题了.

35320
领券