SuperAPI AI 工具集

typescript-lsp

编程与开发

查看项目

更新于 10-16 02:06

技能介绍

用途

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 文档标准)。