VimLite 0.5_272

Vim、Emacs配置和使用
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#16

帖子 自由建客 » 2011-04-27 12:44

fanhe 写了:
asmwarrior 写了:厉害,你是个编程高手啊!!!

ollydbg from codeblocks forum
vim基本没办法直接调用二进制的库的,而clang的库的python绑定还没有,所以现在也仅仅是调用命令行的clang
但是最新版的输入可以直接从标准输入读取请求,不用保存一个临时文件,是比之前的版本快一些。
clang的命令行用户手册不全,文档也不全,我没法知道具体有哪些命令参数

我个人还是倾向codelite那样用sqlite保存符号信息,做几个索引,这样补全的时候比较快
我觉得codelite的准确度够满意的了,速度也不错
这是我下一步的工作,调试器最后再搞

另外,现在vimlite暂时不支持windows,只能在linux下测试
我就是愁不能调用二进制库,想该 vim 源码,增加个二进制接口,但 :em20
别的不说,怎么好多函数都是超长的,很难读。和我一个函数不超一屏完全不同。
asmwarrior
帖子: 43
注册时间: 2009-06-07 9:58

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#17

帖子 asmwarrior » 2011-04-27 12:51

fanhe 写了:个人比较喜欢codelite的关于符号信息的存贮方式,这样比较独立,容易被其他程序使用
就是不知道具体剥离工作复杂度多少,那些代码我还没看
我之前想了解sqlite的东西,看了一下,感觉比较复杂,后放弃了,呵呵。

codeblocks其实存储token还是比较简单的,就一个TokensTree结构和一堆访问接口,其他也没有什么了。检索关键字一般来说就是字符串。
OpenCV & Codeblocks
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#18

帖子 fanhe » 2011-04-27 14:02

asmwarrior 写了:
fanhe 写了:个人比较喜欢codelite的关于符号信息的存贮方式,这样比较独立,容易被其他程序使用
就是不知道具体剥离工作复杂度多少,那些代码我还没看
我之前想了解sqlite的东西,看了一下,感觉比较复杂,后放弃了,呵呵。

codeblocks其实存储token还是比较简单的,就一个TokensTree结构和一堆访问接口,其他也没有什么了。检索关键字一般来说就是字符串。
貌似我搞错了
tags信息是源文件和头文件都保存的
screenshot5.png
测试,以下源代码
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
screenshot2.png (13.8 KiB) 查看 2856 次
上次由 fanhe 在 2011-04-27 14:17,总共编辑 2 次。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#19

帖子 fanhe » 2011-04-27 14:10

screenshot4.png
codelite又好了,估计是scope分析有点bug :em20
反正这表明用sqlite保存ctags结果支持模版肯定没问题的
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#20

帖子 fanhe » 2011-04-27 14:20

自由建客 写了:
fanhe 写了:
asmwarrior 写了:厉害,你是个编程高手啊!!!

ollydbg from codeblocks forum
vim基本没办法直接调用二进制的库的,而clang的库的python绑定还没有,所以现在也仅仅是调用命令行的clang
但是最新版的输入可以直接从标准输入读取请求,不用保存一个临时文件,是比之前的版本快一些。
clang的命令行用户手册不全,文档也不全,我没法知道具体有哪些命令参数

我个人还是倾向codelite那样用sqlite保存符号信息,做几个索引,这样补全的时候比较快
我觉得codelite的准确度够满意的了,速度也不错
这是我下一步的工作,调试器最后再搞

另外,现在vimlite暂时不支持windows,只能在linux下测试
我就是愁不能调用二进制库,想该 vim 源码,增加个二进制接口,但 :em20
别的不说,怎么好多函数都是超长的,很难读。和我一个函数不超一屏完全不同。
用脚本扩展,如python, perl, lua等等
asmwarrior
帖子: 43
注册时间: 2009-06-07 9:58

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#21

帖子 asmwarrior » 2011-04-27 14:21

@fanhe
你的18楼的帖子的图片是用什么工具查看得到的???
我想问的是:codelite是不是把整个工程的tag文件,全部放在一个sqlite的数据库,保存在硬盘上??
我看到你打开数据库里面的内容,每一个symbol的各个信息都是很正确的,赞啊。看起来模板的参数,是作为一个”pattern“的属性放置的,请问这个pattern是不是一个字符串类型?

其实codeblocks内部也是这么保存的symbol的,呵呵。只不过可能在进行模板的T和实际参数,例如wxString进行匹配的时候有一些问题,我感觉应该不是太严重,呵呵。
OpenCV & Codeblocks
asmwarrior
帖子: 43
注册时间: 2009-06-07 9:58

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#22

帖子 asmwarrior » 2011-04-27 14:23

fanhe 写了:
screenshot4.png
codelite又好了,估计是scope分析有点bug :em20
反正这表明用sqlite保存ctags结果支持模版肯定没问题的
确实应该没有问题,你上面的例子里面,T是一个可以被替换的参数,实际应该被替换成Foo,呵呵,Codeblocks里面也是这么干的,只不过可能哪里有bug,呵呵。
OpenCV & Codeblocks
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#23

帖子 fanhe » 2011-04-27 14:31

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 是整数
asmwarrior
帖子: 43
注册时间: 2009-06-07 9:58

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#24

帖子 asmwarrior » 2011-04-27 14:41

谢谢楼上的提示。看起里保存tag/symbol的内容,其实codeblocks和codelite已经没有什么差别了,嘿嘿。现在缺乏的就是如何改进codeblocks的匹配算法了,其实就是一个scope一个scope的匹配,看起来简单,但是由于很多scope是需要展开的,例如

代码: 全选

typedef std::vector<int> Foo;
MyTemp<Foo> a;
这种情况,Foo就需要展开成std::vector<int> ,呵呵,我知道的是codelite对这类的展开处理的比较好。而codeblocks目前就我所知,只能是进行字符串的替换操作,还不具备展开复杂类型的能力,需要改进。 :em01

关于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进行语法分析过程。
OpenCV & Codeblocks
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#25

帖子 fanhe » 2011-04-27 14:50

asmwarrior 写了:谢谢楼上的提示。看起里保存tag/symbol的内容,其实codeblocks和codelite已经没有什么差别了,嘿嘿。现在缺乏的就是如何改进codeblocks的匹配算法了,其实就是一个scope一个scope的匹配,看起来简单,但是由于很多scope是需要展开的,例如

代码: 全选

typedef std::vector<int> Foo;
MyTemp<Foo> a;
这种情况,Foo就需要展开成std::vector<int> ,呵呵,我知道的是codelite对这类的展开处理的比较好。而codeblocks目前就我所知,只能是进行字符串的替换操作,还不具备展开复杂类型的能力,需要改进。 :em01

关于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解析的就错了
头像
acer4740
帖子: 1405
注册时间: 2010-09-13 19:04
来自: 0xFF00EE

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#26

帖子 acer4740 » 2011-04-27 15:36

支持支持, :em11

vim的特性需求投票里面排第一的就是
ide feature
asmwarrior
帖子: 43
注册时间: 2009-06-07 9:58

Re: VimLite 0.3.5_20110424,基于clang的自动完成基本完成

#27

帖子 asmwarrior » 2011-04-27 19:46

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有所改进。 :em01
OpenCV & Codeblocks
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: VimLite 0.5_269 ( 可用版本 )

#28

帖子 fanhe » 2011-06-22 22:21

更新 0.5, 基本可用, 还差调试集成.
guest
帖子: 11
注册时间: 2007-10-21 18:30

Re: VimLite 0.5_272

#29

帖子 guest » 2011-08-28 22:54

mark一下,稍候再看 :em11
liliwang
帖子: 41
注册时间: 2007-10-08 1:05

Re: VimLite 0.5_272

#30

帖子 liliwang » 2011-09-14 21:12

楼主完成了一件我一直想完成缺没能力做的事情,佩服啊
对了,关于调试方面的内容,能放出吗?
回复