intellisense如何在Visual Studio中工作?

时间:2009-05-07 16:22:13

标签: visual-studio intellisense

我希望这是一个有效的问题:intellisense如何在VS2008中运行?我正在了解它用于查找建议的算法,当它正好弹出时(“。”只是一个明显的触发器),如果可能的话如何修改它的行为等等。

将此问题置于上下文中:我要解决的主要问题是如何在编辑器屏幕的某些部分激活和停用智能感知以及如何修改其搜索位置以填充建议框。

欢迎所有信息。

7 个答案:

答案 0 :(得分:10)

在CodeProject上查看此DIY Intellisense article

答案 1 :(得分:7)

然而,对它进行逆向工程更有趣。让我们考虑一下这个问题:

  • 您需要识别感兴趣的字词
  • 您需要找到可能的选项
  • 你需要介绍它们

现在,第一步意味着您必须解析代码。您已经获得了C / C **关键字,您预先解析了各种函数和类声明,并将它们加载到某种数据结构中。然后解析代码并存储类,变量等名称并将它们放在相同的数据结构中。

第二步意味着您需要一种能够有效搜索部分单词并获取具有该前缀的所有单词的数据结构。您可以使用正则表达式执行,但效率不高。这种搜索的有效数据结构是一个特里,讨论here on SO

获得可能性列表后,您只需出示即可。您可能希望保留对可能树的根的引用,以便您可以在有人输入更多字母时实时搜索它们。

答案 2 :(得分:0)

Eclipse也有这个功能,它是一个开源项目。为什么不通过实际查看代码来查看Eclipse是如何做到的?

答案 3 :(得分:0)

这个问题太宽泛了。由于有许多不同的语言,VS IDE支持开箱即用,并且有N个DSL和IDE增强功能支持备用智能感知,这意味着许多答案。如果您具体谈论C#,请参阅工具|选项|文字编辑器| C#|智能感知区域,查看完成选项的可用选项。就算法[s]而言,您将寻找程序集的元数据,类型成员的大量缓存,为特定类型选择的最后成员的MRU列表等。如果您有更具体的问题,我建议你澄清了。

请参阅DSL(ironpython)示例及其实现here

答案 4 :(得分:0)

我还没有在VS中看到任何限制IntelliSense出现的文本编辑器。这是所有语言特定的。如果您的光标位于IntelliSense可能对有效令牌有贡献的位置,那么它就会被使用。

我相信与正在使用的项目系统有一些互动,但据我所知。我也相信Visual Studio SDK中有一个示例项目系统,可能会给你一个想法。

答案 5 :(得分:0)

对于这种情况,当我想要特定行为时,我有时会使用我为AutoHotKey开发的我自己的InteliSense版本。这个脚本的要点是它可以用于任何编辑器,或基本上任何接受文本的控件。它的工作原理是记录文本输入并在语法文件中解释它。

您也许可以将它作为您想要实现的事物的基础。我使用ISense成功地使用了几种没有这种东西的语言,比如Csound甚至批处理脚本。可以使用输入监视和反射来扩展它以支持C#。

无论如何,使用AHK,您甚至可以通过“获取”它呈现的项目列表并过滤它或类似的东西来控制VS intelissense。您可能在流程边界上遇到一些小问题,但没有任何问题无法解决。

通常使用不同的方法实现智能感知,AFAIK。我读到Delphi非常快,它通过在每个令牌上重新编译项目来实现isense,这就是C ++ Builder没有isense的原因,因为它的编译非常慢。

答案 6 :(得分:0)

关于你如何改变它看起来问题的地方,简短的回答是,你做不到。 Intellisense大部分是通过反映项目中包含的程序集(以及其他一些C ++技巧)提供的。您获得的是VS处理所有已包含的程序集以及GAC的所有程序集。

也就是说,如果您想从正在处理的项目中提供明确的智能感知结果,请查看IVsContextualIntellisenseFilterProvider

最后,要了解幕后流程,请查看this blog post