Annotating nodes for display 注释要显示的节点
Kythe 图中的语义节点可以代表具有复杂结构的对象,例如具有许多类型约束的多态函数。
在人类查看者的UI中表示这些节点通常很复杂。
仅显示源文本可能会忽略重要的上下文(如编译器推断的类型)。
另一方面,完全展开节点的内部表示可能会导致非常长且难以读取的字符串。
语义信息也可能丢失,就像程序员在C语言家族中使用透明的“ typedef ”一样。
模式提供了一个 code fact,当附加到KYTHE图中的任意语义节点时,指示客户端如何将该节点呈现给用户。
fact 的值是在 Common.Proto 中定义的序列化“ MarkedSource ”协议缓冲区消息。
与Kythe 图中的大多数事实不同,MarkedSource
是结构化消息,而不是普通字符串,因为客户端对其显示的详细程度和数量有不同的要求。
通过包含或排除此消息的各个部分,客户端可以根据其要求精确地格式化节点的表示。
该消息还提供了将子跨度链接到其他节点以及通过引用包含其他 nodes’code 的功能。
Kythe 索引器负责发出 MarkedSource
消息。
Experimenting with MarkedSource
尝试使用MarkedSource
Kythe 存储库包含一个用于呈现文档的示例实用程序,包括任何包含的 MarkedSource
消息。您可以使用以下内容构建它:
bazel build //kythe/cxx/doc
To run it in a mode that will accept and render a ASCII MarkedSource
message, use:
要在接受并呈现ASCII MarkedSource
消息的模式下运行它,请使用:
./bazel-bin/kythe/cxx/doc/doc --common_signatures
空消息将生成以下输出(显示在双引号之间,并对HTML特殊字符进行转义):
Output
RenderSimpleIdentifier: ""
RenderSimpleQualifiedName-ID: ""
RenderSimpleQualifiedName+ID: ""
Generating MarkedSource
MarkedSource
消息描述了源代码的简化解析树。
由MarkedSource
消息表示的解析树不需要精确地对应于语言的表面语法,而是旨在尽可能相似,以便熟悉该语言的读者将理解所表示的结构。
每个消息都是解析树中的一个节点。
消息具有应用于自身及其子节点的种类(distinct from the