用途:该技能为 R 文件提供代码智能,作为理解 R 代码库的“传感器阵列”,无需通读整个文件即可检索文档、导航定义和分析调用图。查找符号定义、调用点、调用者或调用层级时,应优先使用 LSP 操作而非 Grep,因为文本搜索会在注释、roxygen 行、字符串字面量和无关标识符中误匹配,无法区分定义与调用;Grep 仍适用于自由文本模式搜索。
主要能力:hover 获取文档;goToDefinition 跳转到定义;findReferences 查找全部用法;documentSymbol 列出文件符号;workspaceSymbol 搜索全部符号;incomingCalls 查看谁调用了该函数;outgoingCalls 查看该函数调用了什么;prepareCallHierarchy 初始化调用树。goToImplementation 未实现,请改用 goToDefinition。
使用方式:所有操作需提供 filePath(R 文件绝对路径)、line(从 1 开始的行号)、character(从 1 开始的字符偏移)。光标必须精确置于符号上,这是操作失败最常见的原因;若返回“no definition found”或“no hover information”,先调整字符位置。典型工作流包括:读文件前先用 documentSymbol 获取符号清单再按 offset/limit 定向读取;hover 查看外部包函数文档;改签名前用 incomingCalls 评估影响范围;用 outgoingCalls 理清执行流;用 findReferences 跨文件导航。workspaceSymbol 会忽略查询串并返回全部索引符号,大项目上输出巨大,应优先 documentSymbol 或 goToDefinition,仅在小型项目或毫无线索时使用。
限制:LSP 读取工作区源码而非已安装包;goToDefinition 解析到外部包时指向临时文件路径。诊断由 languageserver 推送,无法主动请求;无项目自身 .lintr 时仅启用正确性类 linter。air 格式化钩子会在编辑后重写磁盘文件,但语言服务器视图滞后一轮,编辑后重新 Read 文件再信任行号。部分操作需文件先被索引。