JetBrains的GoLand是如何找到接口的实现的?

问题描述 投票:-2回答:1

据我所知,它是基于vim-go的Guru来查找实现或用法,这需要编译整个项目作为前提。否则,GoLand就不需要这样做,但怎么做呢?

go vim editor jetbrains-ide goland
1个回答
1
投票

虽然这个任务看起来相当琐碎,但GoLand使用了一些技巧来更高效地执行它。让我们一步步去探索它的工作原理。

  1. 当人们第一次打开一个项目时,IDE会执行所谓的索引。特别是,它存储了所有的方法和方法规范名称以及它们的参数数量。
  2. 在搜索开始时,GoLand会对接口的方法规格进行检索,并找到参数数量最多的方法。这是一种性能优化。它背后的想法是,参数多的方法在代码中出现的频率较低,所以IDE只需要检查其中的几个方法。
  3. 现在是使用索引的时候了。对于选择的方法规范,IDE会找到所有对应的方法。考虑到范围的问题,所以对于私有接口,比如说,它的范围就会小很多。
  4. 对于每个方法,GoLand都会解析其类型,并检查其是否实现了接口。这时候,所有接口的方法规范都会被考虑进去。
  5. 不仅结构体可以实现接口,其他接口也可以实现。作为下一步,IDE会查找所有对应的方法规范,也就是名称和参数数量相同的方法规范。有一个单独的索引负责这个工作。
  6. 对于每一个方法规范,都会取其接口并进行检查。这次不涉及解析,因为只要遍历一棵语法树上去找到一个任意方法规范的接口就可以了。

基本上就是这样的算法。还有一些实现上的细节,让它的工作速度更快,但并不影响结果。


1
投票

GoLand依靠的是 IntelliJ平台 和一套自定义编写的工具,捆绑为 自定义语言插件 在它之上处理索引、解析、导航和编辑代码。

© www.soinside.com 2019 - 2024. All rights reserved.