用途
TypeScript LSP 技能为探索和理解 TypeScript/JavaScript 代码库提供 TypeScript Language Server Protocol 集成。在处理 .ts、.tsx、.js、.jsx 文件时,官方建议优先使用 LSP 工具而非 Grep/Glob,因为 LSP 提供类型感知的结果,能够理解导入、导出和符号关系。
该技能主要用于:探索代码库(查找符号、理解模块结构、发现实现);查找引用(跨整个代码库进行类型感知搜索,优于对符号使用 grep);理解类型(获取完整类型签名、泛型和文档);编辑前验证(在修改或删除导出前检查所有用法);代码导航(跳转到定义、查找实现)。
主要能力
技能提供以下工具:
- Glob:按模式查找文件
- Grep:搜索文本内容
- lsp-find:搜索 TypeScript 符号
- lsp-hover:获取类型信息与 TSDoc 文档
- lsp-refs:查找符号的所有引用
- lsp-analyze:批量分析文件结构
LSP 与 Grep/Glob 的适用场景对比:查找函数/类型的所有用法应使用 lsp-refs(Grep/Glob 会遗漏重导出和别名);按名称搜索符号应使用 lsp-find(Grep/Glob 会匹配字符串和注释);获取类型签名与 TSDoc 应使用 lsp-hover(Grep/Glob 无法做到);理解文件导出应使用 lsp-analyze --exports(Grep/Glob 无法解析重导出);按模式查找文件应使用 Glob;搜索非 TS 文件(md、json)应使用 Grep;搜索注释/字符串中的文本应使用 Grep。
使用方式
所有脚本通过 bunx @plaited/development-skills 调用。路径解析支持三种类型:绝对路径(如 /Users/name/project/src/file.ts)、相对路径(如 ./src/file.ts 或 ../other/file.ts)、包导出路径(如 my-package/src/module.ts,通过 Bun.resolve() 解析)。官方推荐使用包导出路径,以便于移植并与包的 exports 字段保持一致。
各脚本用法:
lsp-hover:获取指定位置的类型信息。
bunx @plaited/development-skills lsp-hover <file> <line> <char>
参数:file 为 TypeScript/JavaScript 文件路径;line 为行号(从 0 开始);char 为字符位置(从 0 开始)。示例:
bunx @plaited/development-skills lsp-hover src/utils/parser.ts 42 10
lsp-symbols:列出文件中的所有符号。
bunx @plaited/development-skills lsp-symbols <file>
示例:
bunx @plaited/development-skills lsp-symbols src/utils/parser.ts
lsp-references:查找符号的所有引用。
bunx @plaited/development-skills lsp-refs <file> <line> <char>
示例:
bunx @plaited/development-skills lsp-refs src/utils/parser.ts 42 10
lsp-find:跨工作区搜索符号。
bunx @plaited/development-skills lsp-find <query> [context-file]
参数:query 为符号名称或部分名称;context-file 为可选,用于打开以提供项目上下文的文件。示例:
bunx @plaited/development-skills lsp-find parseConfig
bunx @plaited/development-skills lsp-find validateInput src/lib/validator.ts
lsp-analyze:在单个会话中执行多项分析以提高效率。
bunx @plaited/development-skills lsp-analyze <file> [options]
选项:--symbols, -s 列出所有符号;--exports, -e 仅列出导出的符号;--hover line:char 获取类型信息(可重复);--refs line:char 查找引用(可重复);--all 运行 symbols + exports 分析。示例:
# 获取文件概览
bunx @plaited/development-skills lsp-analyze src/utils/parser.ts --all
# 检查多个位置
bunx @plaited/development-skills lsp-analyze src/utils/parser.ts --hover 50:10 --hover 75:5
# 重构前:查找所有引用
bunx @plaited/development-skills lsp-analyze src/utils/parser.ts --refs 42:10
适用场景
探索代码时(优先使用 LSP):运行 lsp-find 跨工作区搜索符号;运行 lsp-symbols 获取文件结构概览;运行 lsp-analyze --exports 查看模块提供的内容。
编辑代码前:运行 lsp-references 查找计划修改的符号的所有用法;运行 lsp-hover 验证当前类型签名。
编写代码前:运行 lsp-find 搜索类似模式或相关符号;对计划使用的 API 运行 lsp-hover。
常见工作流包括:理解文件(先获取导出概览,再对感兴趣的符号悬停获取类型信息);修改导出前(先查找所有引用,再审查输出以了解影响);查找模式(搜索类似实现);实现前验证(在使用 API 前验证其签名)。
输出格式与性能
所有脚本将 JSON 输出到 stdout,错误输出到 stderr。hover 输出包含 contents(kind 为 markdown,value 为类型签名代码块)和 range;symbols 输出为包含 name、kind、range 的数组;analyze 输出包含 file 和 exports(含 name、kind、line)。
性能方面,每次脚本调用会启动 TypeScript Language Server(约 300-500ms)、初始化 LSP 连接、打开文档、执行查询、关闭并停止。对同一文件的多个查询,建议使用 lsp-analyze 在单个会话中批量操作。
限制
资料未提供该技能的收费、价格、平台支持范围等具体信息。相关技能为 code-documentation(TSDoc 文档标准)。