随笔-341  评论-2670  文章-0  trackbacks-0
    时隔一个月,终于在Vczh Library++ 3.0的IDE工程里实现了用户自定义类型变绿(抄C#的娃哈哈)鼠标移动到对象上会出tooltip、显示函数参数提示和Code snippet的功能了。由于我的语法树的每一个节点都包含了它在源代码中的位置,所以鼠标指向一个字符的时候,可以计算出他在语法树的位置,从而可以查到他的声明的语法树节点,再用声明节点的位置就可以把声明的代码复制出来显示在tooltip上面了:

    同样的方法可以用来实现显示函数参数。这个比tooltip要复杂一点,因为要吧语法树的声明重新组织成代码才能显示出来,而且还有模板函数的类型问题。不过现在有两个小功能还没实现,第一个是在没输入的时候移动光标不会更新参数,这只是个小问题。另一个是对一个函数指针调用的时候做提示,这个还要进一步考虑。下图显示的是对一个模板函数做参数提示的时候,参数的类型会自动特化:

    接下来就是code snippet了。Code snippet是一个强大的功能,可以让你免除一些无谓的手指的劳动。Visual Studio里面提供了大量的code snippet,不过在这里我暂时只提供for和forr两种,用来输入for循环。下面是使用code snippet输入一个for循环的全过程:











    Code snippet是一个比较复杂的功能,在这里我只实现了上下文无关的一些特性。Visual Studio里面的就更为高级了,他在插入一个类名的时候,可以根据上下文来判断是否需要出现完整的namespace。当然由于现在我用来做intellisense的语言还没有这么复杂的元素,所以也就无从做起了。

    所有的代码可以在Vczh Library++ 3.0里面找到。这篇文章的代码跟(十)的时候的代码已经大为不同了。经过一系列的重构,intellisense功能最终被做成一个灵活的插件形式,所有的细节都可以更改,甚至连code snippet那个黄色的输入位置都可以再往上画东西。因为在开发intellisense的时候发现了NativeX语言语法上一个二义性,因此NativeX的语法也做了一处小修改。而且我趁着这个时候重构了所有NativeX的测试用例,把在C++里面构造语法树改成了用一系列make file和反射函数并运行的方式直接使用NativeXProvider编译、运行main函数并与记录在index文件中的结果进行比较的方法。

    接下来可以做的事情就比较多了。首先我要开始完成NativeX的调试功能,其次我要拿Microsoft SQL Server那个超级复杂的T-SQL来研究一个从文法产生intellisense代码(是的,你没看错,是intellisense代码)的方法,最后要在intellisense上实现NativeX的重构。对于那个自动生成intellisense代码的算法,目前还仅仅出于YY阶段,当然生成出来的也只能是上下文无关的intellisense。譬如说帮你列出数据库里面的所有表啦,或者帮你列出前面声明过的变量啦,不属于自动生成的范围。不过自动生成的intellisense还是会告诉你“现在需要弹出变量列表,需要提供内容”的这样一种信息来让你可以往里面添加一些不能自动生成的东西。当然做不做得出来那是另外一回事了,先研究研究。
posted on 2010-12-05 10:59 陈梓瀚(vczh) 阅读(9615) 评论(16)  编辑 收藏 引用 所属分类: 开发自己的IDE

评论:
# re: 开发自己的IDE(十二) 2010-12-05 11:35 | 空明流转
V5  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-05 14:05 | ArthasLee
又跑过来纯支持vczh滴blog文,要继续连载,咔咔!  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-05 17:56 | 陈昱(CY)
继续膜拜  回复  更多评论
  
# re: 开发自己的IDE(十二)[未登录] 2010-12-06 10:00 | zhaoyg
跪拜  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-06 11:59 | Iloveprogramming
我也是来膜拜的。  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-06 13:07 | Skill
你总发这些也不开源或提供点编程思想有什么用,没什么值得佩服的  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-06 14:18 | pansunyou
Skill, 典型的回帖不看贴类型,哇哈哈。。。  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-06 15:17 | 陈梓瀚(vczh)
@Skill
开了啊,Vczh Library++3.0的链接你点啊  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-06 21:29 | Vanlin
膜拜,加顶一个.  回复  更多评论
  
# re: 开发自己的IDE(十二)[未登录] 2010-12-07 22:35 | foxtail
这个功能哥最喜欢 哈哈  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-12 15:01 | mm
super star !  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-18 13:45 | 千暮(zblc)
@Skill
- -bnr 你在吃屎  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-18 18:43 | SOS
你果然今天更新长门流程序员胜利的日子了- -

ide v5  回复  更多评论
  
# re: 开发自己的IDE(十二) 2010-12-18 19:28 | 陈梓瀚(vczh)
@SOS
哇哈哈,必须更新  回复  更多评论
  
# re: 开发自己的IDE(十二) 2011-01-19 17:34 | iSunjin
我也在开发一个IDE, 看了你的prototype, 做的很不错。 不知道你为啥要重新新一个IDE, 为什么不用Visual studio 的SDK 开发呢? 有标准的方法, 只需要专注语法词法语义逻辑就可。 联系: isunjin@gmail.com, MSN; v-jisu@live.com  回复  更多评论
  
# re: 开发自己的IDE(十二) 2011-01-19 23:21 | 陈梓瀚(vczh)
@iSunjin
因为VSSDK的API不符合我的审美观,所以就不用了。  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理