本文件采用以下基本术语:
An anchor
(锚)表示文件的区域。例如,在kcd.go
中,Reader
类型/接口有许多锚点:
type Reader interface {
Revisions(_ context.Context, filter *RevisionsFilter, f func(Revision) error) error
^^^^^^^^^
}
例如,将有一个锚点(上面用^标记表示)覆盖来自kcd.go
的标识符Revisions
(修订)。
锚点的范围
是包含感兴趣的实体的文件区域。
语义节点表示可以与文件直接关联或不直接关联的抽象实体。
语义节点通过与锚相关联来获得位置。
从上面的同一个例子中,我们可以把修订看作是属于类型阅读器的语义节点(函数)的定义位置。
它在kcd.go中有一个锚,用于定义它在文件中的位置。
在memdb.go中还有另一个锚点,其中为该文件中的(具体)数据库类型实现了修订函数。
fact是与节点关联的命名字节字符串值。
Kythe schema定义了各种事实的名称和预期格式,
例如,doc/uri
fact 通常用于将对某些外部文档的引用附加到图中的节点。
边是两个节点之间的有向标记关系。
在上面的示例中,我们将绘制从修订点处的锚点到函数语义节点的define/binding
(定义/绑定)边。
这表明锚点是函数的“定义”(具体来说,是将其绑定到标识符的定义)。
Note
在下图中,并未显示所有可能的锚点、语义节点、事实或边。
在可能的情况下,我们将继续参考相同的 kcd.go
文件。
现在,我们将解释您将在Kythe模式中看到的一些基本边和节点。
Jump-to-definition allows navigating from a usage of some entity (e.g., a variable or function) to its definition. To support this, the indexer must, at minimum, emit an anchor for a definition site, a semantic node to represent the entity that is defined, and an anchor for the usage site. In this example, we see one definition and two references for a variable named matchRevision (from kcd.go):
跳转到定义允许从某个实体(例如,变量或函数)的使用导航到其定义。
为了支持这一点,索引器必须
至少发出一个定义站点的锚、一个表示所定义的实体的语义节点和一个使用站点的锚。
在此示例中,我们看到名为matchRevision
的变量的一个定义和两个引用from kcd.go):
func (rf *RevisionsFilter