Skip to content

索引

概述

clice index 预先为工作区构建持久化符号索引,让编辑器会话热启动,而不是在你工作时才在后台建立索引。它用 worker 池运行与服务器相同的索引流程,两者共用 cache_dir 下的索引,每个构建配置各一份。

用法clice index [--workspace <dir>] [--configuration <tag>] [--workers <n>]

同一时刻只有一个进程为工作区写索引。编辑器会话打开着工作区时,这个角色由它的服务器担任,因此 clice index 会请服务器执行这轮索引并等待结果,而不是自己启动一个 worker 池;摘要中会说明这一点。若锁被一个无法请求的进程持有(另一个 clice index、另一个 clice 构建的服务器,或配置里关闭了后台索引的服务器),命令会失败并给出持有者——等那个进程结束后再重新运行。

索引构建可在中断后继续:按 Ctrl-C 中断会保存当前进度,下次执行时会从中断处继续。每五分钟也会保存一次进度,因此崩溃最多只会损失五分钟的工作。运行期间,无论日志级别如何,每十秒都会向 stderr 输出一行进度;最终在 stdout 输出的摘要会统计已建立索引的翻译单元数、生成的文件分片数和符号数,列出所有索引构建失败的翻译单元,并给出会话日志目录。索引完整时退出码为 0,部分翻译单元索引失败或部分索引无法持久化时为 1,中断时为 130。

查看索引

同一条命令也能读取已持久化的索引,而不改动它。所有查看模式都输出纯文本行,便于在终端查看或交给 grep 处理;即使编辑器会话正打开着索引,这些模式也能正常工作。

  • clice index --stats [--top <n>] 输出索引内容的统计信息:翻译单元和文件分片、分片各列及全局符号表的字节占用明细、符号按引用文件数和名称长度的分布、文件分片按变体数量的分布,以及最大的分片。--variants 会为每个文件分片追加一行以制表符分隔的记录,其中包含该分片的变体数量,便于比较两次运行的结果。
  • clice index --show-symbol <name> 输出索引中记录的符号信息:种类、名称和标志,拼出其限定名的父级链,规范声明所在的文件,以及各文件中定义、声明和引用的数量。名称按显示形式(Box<int>)或限定形式(ns::Box<int>)匹配;#<hash> 按符号标识指定符号,文件局部符号就是通过这种方式访问的。
  • clice index --show-file <path> 输出文件已持久化的数据行:构建这些行所依据的内容版本、每个变体及贡献它的翻译单元,按关系类型统计的行数,以及身份只存在于该文件中的文件局部符号。
  • clice index --show-tu <path> 输出翻译单元的清单:索引时间、它为哪些文件贡献了数据行,以及它的包含树。