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

Autocomplete IDE从哪里获得完成候选人?,autocomplete,ide,Autocomplete,Ide,在哪里?有人能给我举一个在这些流行语言的IDE中使用源检索方法的例子吗: C/C++(Visual Studio,Eclipse):他们是否使用内置于IDE中的基于项目根(带有配置文件,即包含路径)的静态分析来检索候选对象?或者他们是否使用编译器后端来获取源代码,即clang?像VisualStudio这样的IDE是如何在系统范围内像WindowAPI一样快速完成任务的 Java(Netbean,Eclipse):同样,他们在JDK或内置静态解析器中使用任何Java二进制文件(Java,jav

在哪里?有人能给我举一个在这些流行语言的IDE中使用源检索方法的例子吗:

  • C/C++(Visual Studio,Eclipse):他们是否使用内置于IDE中的基于项目根(带有配置文件,即包含路径)的静态分析来检索候选对象?或者他们是否使用编译器后端来获取源代码,即clang?像VisualStudio这样的IDE是如何在系统范围内像WindowAPI一样快速完成任务的
  • Java(Netbean,Eclipse):同样,他们在JDK或内置静态解析器中使用任何Java二进制文件(Java,javac…)吗
  • Javascript:同上

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

这些名为“”的源代码解析器与普通解析器的区别在于两个特性:

  • 增量解析器持续工作。它必须始终与源代码的语法保持联系。因此,完成符号候选的索引始终是最新的
  • 最终用户对源代码进行的小而频繁的更改应该在没有任何明显时间延迟的情况下编制索引
  • 增量解析器通过利用某种形式的缓存来实现这些目标。此可视化演示简要说明了它们的工作原理:。我建议你试试

    此外,您可能有兴趣阅读以下资料:

  • 一篇关于IntelliJ Idea中的源代码索引体系结构的文章:
  • Eclipse内置Java增量解析器:

  • 不幸的是,真正缺乏构建自己的增量解析器的工具。大多数IDE的核心解析器都是硬编码的,它们没有任何共同的方法。我上面提到的演示是使用不同的增量解析器库(用于在Java、Scala和JavaScript中构建解析器)的罕见例外之一。另一个例子是-Clojure语言的增量解析库。

    对于Java,源代码完成候选项来自项目定义的类路径。您为什么要问(例如:好奇、想要语言语法、实现自己的、自动完成API调用等)?一个更具体的问题可能会给你带来更多有用的答案。出于好奇,我希望在将来实现我自己的问题,这样我就可以帮助改进现有的工具。我只是想知道他们如何快速地从完成源中检索,并且具有上下文感知能力。我只需要一个高效实现的想法,所以我有一些合理的依据。