分页: 2 / 3
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 12:44
由 自由建客
fanhe 写了:asmwarrior 写了:厉害,你是个编程高手啊!!!
ollydbg from codeblocks forum
vim基本没办法直接调用二进制的库的,而clang的库的python绑定还没有,所以现在也仅仅是调用命令行的clang
但是最新版的输入可以直接从标准输入读取请求,不用保存一个临时文件,是比之前的版本快一些。
clang的命令行用户手册不全,文档也不全,我没法知道具体有哪些命令参数
我个人还是倾向codelite那样用sqlite保存符号信息,做几个索引,这样补全的时候比较快
我觉得codelite的准确度够满意的了,速度也不错
这是我下一步的工作,调试器最后再搞
另外,现在vimlite暂时不支持windows,只能在linux下测试
我就是愁不能调用二进制库,想该 vim 源码,增加个二进制接口,但
别的不说,怎么好多函数都是超长的,很难读。和我一个函数不超一屏完全不同。
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 12:51
由 asmwarrior
fanhe 写了:个人比较喜欢codelite的关于符号信息的存贮方式,这样比较独立,容易被其他程序使用
就是不知道具体剥离工作复杂度多少,那些代码我还没看
我之前想了解sqlite的东西,看了一下,感觉比较复杂,后放弃了,呵呵。
codeblocks其实存储token还是比较简单的,就一个TokensTree结构和一堆访问接口,其他也没有什么了。检索关键字一般来说就是字符串。
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:02
由 fanhe
asmwarrior 写了:fanhe 写了:个人比较喜欢codelite的关于符号信息的存贮方式,这样比较独立,容易被其他程序使用
就是不知道具体剥离工作复杂度多少,那些代码我还没看
我之前想了解sqlite的东西,看了一下,感觉比较复杂,后放弃了,呵呵。
codeblocks其实存储token还是比较简单的,就一个TokensTree结构和一堆访问接口,其他也没有什么了。检索关键字一般来说就是字符串。
貌似我搞错了
tags信息是源文件和头文件都保存的
测试,以下源代码
main.h
代码: 全选
template<typename T>
class MyTemplate {
public:
T t;
};
class Foo {
public:
char m_a;
short m_b;
int m_c;
void Func(void)
{
}
};
class Test {
public:
MyTemplate<Foo> m_foo;
void Func(void)
{
}
};
main.cpp
代码: 全选
#include "main.h"
int main(int argc, char **argv)
{
MyTemplate<Foo> foo;
foo.
return 0;
}
codelite居然罢工了,连MyTemplate都没法补全,codeblocks居然能补全
但是codelite的tags数据库是保存了信息的了啊
看来是codelite对自定义模版的支持有bug啊,codeblocks对stl的模版有bug
clang可以补全,只是不知道怎么在头文件里用

- screenshot2.png (13.8 KiB) 查看 2859 次
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:10
由 fanhe
codelite又好了,估计是scope分析有点bug
反正这表明用sqlite保存ctags结果支持模版肯定没问题的
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:20
由 fanhe
自由建客 写了:fanhe 写了:asmwarrior 写了:厉害,你是个编程高手啊!!!
ollydbg from codeblocks forum
vim基本没办法直接调用二进制的库的,而clang的库的python绑定还没有,所以现在也仅仅是调用命令行的clang
但是最新版的输入可以直接从标准输入读取请求,不用保存一个临时文件,是比之前的版本快一些。
clang的命令行用户手册不全,文档也不全,我没法知道具体有哪些命令参数
我个人还是倾向codelite那样用sqlite保存符号信息,做几个索引,这样补全的时候比较快
我觉得codelite的准确度够满意的了,速度也不错
这是我下一步的工作,调试器最后再搞
另外,现在vimlite暂时不支持windows,只能在linux下测试
我就是愁不能调用二进制库,想该 vim 源码,增加个二进制接口,但
别的不说,怎么好多函数都是超长的,很难读。和我一个函数不超一屏完全不同。
用脚本扩展,如python, perl, lua等等
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:21
由 asmwarrior
@fanhe
你的18楼的帖子的图片是用什么工具查看得到的???
我想问的是:codelite是不是把整个工程的tag文件,全部放在一个sqlite的数据库,保存在硬盘上??
我看到你打开数据库里面的内容,每一个symbol的各个信息都是很正确的,赞啊。看起来模板的参数,是作为一个”pattern“的属性放置的,请问这个pattern是不是一个字符串类型?
其实codeblocks内部也是这么保存的symbol的,呵呵。只不过可能在进行模板的T和实际参数,例如wxString进行匹配的时候有一些问题,我感觉应该不是太严重,呵呵。
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:23
由 asmwarrior
fanhe 写了:screenshot4.png
codelite又好了,估计是scope分析有点bug
反正这表明用sqlite保存ctags结果支持模版肯定没问题的
确实应该没有问题,你上面的例子里面,T是一个可以被替换的参数,实际应该被替换成Foo,呵呵,Codeblocks里面也是这么干的,只不过可能哪里有bug,呵呵。
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:31
由 fanhe
asmwarrior 写了:@fanhe
你的18楼的帖子的图片是用什么工具查看得到的???
我想问的是:codelite是不是把整个工程的tag文件,全部放在一个sqlite的数据库,保存在硬盘上??
我看到你打开数据库里面的内容,每一个symbol的各个信息都是很正确的,赞啊。看起来模板的参数,是作为一个”pattern“的属性放置的,请问这个pattern是不是一个字符串类型?
其实codeblocks内部也是这么保存的symbol的,呵呵。只不过可能在进行模板的T和实际参数,例如wxString进行匹配的时候有一些问题,我感觉应该不是太严重,呵呵。
codelite是以一个工作空间为单位保存着符号信息的,一般文件就是 <工作空间名字>.tags,这其实是一个sqlite数据库文件,打开sqlite数据库的工具很多的,我这个是firefox的一个扩展,叫 SQLite Manager
codelite是不是把整个工程的tag文件,全部放在一个sqlite的数据库,保存在硬盘上??
是
看起来模板的参数,是作为一个”pattern“的属性放置的,请问这个pattern是不是一个字符串类型?
是,只有 ID 和 line 是整数
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:41
由 asmwarrior
谢谢楼上的提示。看起里保存tag/symbol的内容,其实codeblocks和codelite已经没有什么差别了,嘿嘿。现在缺乏的就是如何改进codeblocks的匹配算法了,其实就是一个scope一个scope的匹配,看起来简单,但是由于很多scope是需要展开的,例如
代码: 全选
typedef std::vector<int> Foo;
MyTemp<Foo> a;
这种情况,Foo就需要展开成std::vector<int> ,呵呵,我知道的是codelite对这类的展开处理的比较好。而codeblocks目前就我所知,只能是进行字符串的替换操作,还不具备展开复杂类型的能力,需要改进。
关于clang的命令行用法,我帮你找了一下我之前的帖子:
http://forums.codeblocks.org/index.php/ ... l#msg91440
注意上面的命令行:
代码: 全选
clang -w -fsyntax-only -Xclang -code-completion-at=E:\clang_win32\main.cpp:13:5 E:\clang_win32\main.cpp
前后两个文件可以不一样,前面一个只是指定在哪个文件的哪个位置进行代码提示,后面一个指定当前的clang是按照那个tanslation unit进行语法分析过程。
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 14:50
由 fanhe
asmwarrior 写了:谢谢楼上的提示。看起里保存tag/symbol的内容,其实codeblocks和codelite已经没有什么差别了,嘿嘿。现在缺乏的就是如何改进codeblocks的匹配算法了,其实就是一个scope一个scope的匹配,看起来简单,但是由于很多scope是需要展开的,例如
代码: 全选
typedef std::vector<int> Foo;
MyTemp<Foo> a;
这种情况,Foo就需要展开成std::vector<int> ,呵呵,我知道的是codelite对这类的展开处理的比较好。而codeblocks目前就我所知,只能是进行字符串的替换操作,还不具备展开复杂类型的能力,需要改进。
关于clang的命令行用法,我帮你找了一下我之前的帖子:
http://forums.codeblocks.org/index.php/ ... l#msg91440
注意上面的命令行:
代码: 全选
clang -w -fsyntax-only -Xclang -code-completion-at=E:\clang_win32\main.cpp:13:5 E:\clang_win32\main.cpp
前后两个文件可以不一样,前面一个只是指定在哪个文件的哪个位置进行代码提示,后面一个指定当前的clang是按照那个tanslation unit进行语法分析过程。
你这个帖子我搜索到过了,代码也是codelite源码里面的,这个方法是比较老的了
我在llvm上找到了个另外版本的,可以直接从标准输入读取源码的,不用再保存临时文件了
代码: 全选
cat <source> | clang -cc1 -code-completion-at=-:<row>:<col> -x c++ <addtions opts> -
我测试了一下,codeblocks对stl的容器的模版替换都有问题,map啊,vector啊之类的
我怀疑是不是parser解析的就错了
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 15:36
由 acer4740
支持支持,
vim的特性需求投票里面排第一的就是
ide feature
Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成
发表于 : 2011-04-27 19:46
由 asmwarrior
fanhe 写了:我怀疑是不是parser解析的就错了
呵呵,我感觉应该parser解析还是正确的,关于stl的解析,其实在去年的时候就差不多得到正确了,只不过最早的时候,对于模板参数,例如:
代码: 全选
MyTemplate<wxString,int> aaa;
对于这个变量symbol aaa的记录,最早的codeblocks是直接抛弃尖括号里面的所有内容,也就是说,记录的内容为:
SymbolName: aaa
typeName: MyTemplate
这样显然是不够的,去年的时候,经过codeblocks里面blueshake等人的努力,Symbol加入了一个map结构,用来存储 wxString 和 int ,但是我感觉这个机制不是很好。按照codelite的方法,还不如把 MyTemplate<wxString,int> 整个字符串作为类型保存下来比较合适,呵呵。
至于后期分析aaa,方法应该都是一样的。template<typename T1, typenameT2>, 这种情况下,需要用wxString去替换T1,同时需要用int去替换T2,这样以此类推。虽然复杂,但是方法还是有的。
我看看能不能在这方面对Codeblocks有所改进。

Re: VimLite 0.5_269 ( 可用版本 )
发表于 : 2011-06-22 22:21
由 fanhe
更新 0.5, 基本可用, 还差调试集成.
Re: VimLite 0.5_272
发表于 : 2011-08-28 22:54
由 guest
mark一下,稍候再看

Re: VimLite 0.5_272
发表于 : 2011-09-14 21:12
由 liliwang
楼主完成了一件我一直想完成缺没能力做的事情,佩服啊
对了,关于调试方面的内容,能放出吗?