IDE从哪里获得完成候选人?

时间:2014-04-26 20:09:05

标签: autocomplete ide

在哪儿?有人可以在这些流行语言的IDE中给我一些源检索方法的例子:

  • C / C ++(Visual Studio,Eclipse):他们是否使用静态分析(内置于IDE中) - 基于项目根(包含配置文件,即包含路径)来检索候选者?或者他们是否使用编译器后端来获取源代码,即clang?像Visual Studio这样的IDE如何像Window API一样获得完整的候选系统,并且这么快就完成了?
  • Java(Netbean,Eclipse):同样,他们在JDK中使用任何java二进制文件(java,javac ...)还是内置的静态解析器?
  • Javascript:与上面相同

1 个答案:

答案 0 :(得分:5)

主要的IDE,如Visual Studio,Eclipse和IntelliJ Idea使用索引方法:解析所有项目文件并存储可能的完成符号(即方法名称)。因此,当用户按Ctrl + Space调用完成列表时,编辑器会查找存储的符号以过滤最合适的候选者。

这些源代码解析器名为" incremental parsers"它们通过两个特征与普通解析器区分开来:

  1. 增量解析器不断工作。它必须始终与源代码的语法保持联系。因此,完成符号候选者的索引始终是最新的。
  2. 最终用户对源代码所做的小而频繁的更改应编入索引,不会有任何明显的时间延迟。
  3. 增量解析器通过使用某种形式的缓存来实现这些目标。这个视觉演示简要说明了它们的工作原理:Incremental JSON parser。我建议你试一试。

    您也可能有兴趣阅读这些来源:

    1. 有关IntelliJ Idea中的源代码索引体系结构的文章:Language plugins in IntelliJ Idea
    2. Eclipse内置Java增量解析器:Eclipse JDT
    3. 不幸的是,实际上缺乏构建自己的增量解析器的工具。大多数IDE的核心解析器都是硬编码的,并且它们不共享任何常用方法。我上面提到的演示是使用不同增量解析器库的罕见异常之一 - Papa Carlo,用于在Java,Scala和JavaScript中构建解析器。另一个例子是Parsley - Clojure语言的增量解析库。