我希望这是一个有效的问题:VS2008 中智能感知如何工作?我想要了解它用于查找建议的算法、它何时弹出(“.”只是一个明显的触发器)、如果可能的话如何修改其行为等等。

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

欢迎所有信息。

有帮助吗?

解决方案

在CodeProject上查看 DIY Intellisense文章

其他提示

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

  • 你需要找出感兴趣的词
  • 你需要找到可能的选择
  • 你需要展示它们

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

第二步意味着您需要一个可以有效搜索部分单词并获取具有该前缀的所有单词的数据结构。你可以 使用正则表达式,但这不是很有效。用于此类搜索的有效数据结构是 trie,对此进行了讨论 这里就这样 .

一旦你有了可能性清单,你只需将其呈现出来即可。您可能希望保留对可能性树的根的引用,以便在有人输入更多字母时可以实时搜索它们。

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

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

请参阅DSL(ironpython)示例及其实施此处

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

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

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

你也许可以用它作为你想要实现的目标的基础。我成功地将 ISense 与几种没有这样的东西的语言一起使用,比如 声音 甚至批处理脚本。可以将其扩展为使用输入监视与反射相结合来支持 C#。

无论如何,使用 AHK,您甚至可以通过“获取”它呈现的项目列表并对其进行过滤或类似的操作来控制 VS intelissense。您可能会遇到一些进程边界的小问题,但没有什么是无法修复的。

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

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

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

最后,要了解幕后流程,请查看这篇博客文章

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top