mcpField
U
using-typescript-lsp

using-typescript-lsp

github.com/mhagrelius开发50 次安装
代码仓库

关于 using-typescript-lsp

为 Claude Code 提供 TypeScript LSP 使用指南,帮助编码 Agent 对 TypeScript 和 JavaScript 代码进行语义分析。内容涵盖符号导航、重构与类型检查,并说明 LSP 不可用时如何回退到文本搜索。

主要功能

  1. 01查找符号引用
  2. 02跳转到定义
  3. 03查看推断类型
  4. 04检查文件诊断
  5. 05列出文档符号
  6. 06选择 LSP 或文本搜索

适用场景

  1. 01重构前查找所有用法
  2. 02确认符号的类型
  3. 03检查变更文件的类型错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mhagrelius/dotfiles --skill using-typescript-lsp

安装后在 Claude Code 中输入/using-typescript-lsp确认已加载。

详细介绍

使用 TypeScript LSP

概述

typescript-lsp 插件为 TypeScript 和 JavaScript 提供语义代码智能。需要确保语义准确时,请使用 LSP 工具,而不是 grep/read——LSP 能理解 TypeScript 的类型系统、继承、接口和符号关系。

何时使用 LSP,何时使用文本搜索

digraph lsp_decision {
    "Need code info?" [shape=diamond];
    "Semantic accuracy needed?" [shape=diamond];
    "Use LSP tool" [shape=box];
    "Use Grep/Read" [shape=box];

    "Need code info?" -> "Semantic accuracy needed?" [label="yes"];
    "Need code info?" -> "Use Grep/Read" [label="no - text patterns"];
    "Semantic accuracy needed?" -> "Use LSP tool" [label="yes"];
    "Semantic accuracy needed?" -> "Use Grep/Read" [label="no"];
}

适合使用 LSP 的场景:

  • 重构前查找所有用法
  • 获取类型信息(推断类型或显式类型)
  • 跳转到定义处(包括 node_modules)
  • 检查类型错误
  • 了解接口的实现情况

适合使用 Grep 的场景:

  • 搜索文本模式(注释、字符串、配置文件)
  • 跨语言搜索
  • JSON、YAML、markdown 内容
  • LSP 不可用时

LSP 操作速查表

任务LSP 操作替代方式
查找函数的所有调用处findReferences搜索函数名
获取函数/变量的类型hover读取文件并解析
跳转到定义处goToDefinitionGrep + Read
检查类型错误getDiagnostics运行 tsc CLI
查看文件结构documentSymbol读取整个文件

关键模式

重构前:查找所有引用

错误做法:

Grep for "formatDuration" -> may miss renamed imports, get false positives from comments

正确做法:

LSP findReferences on symbol -> gets ALL semantic usages, no false positives
获取类型信息

错误做法:

Read file -> find function -> manually trace type inference

正确做法:

LSP hover on symbol -> instant type signature with inferred types resolved
验证类型正确性

错误做法:

Bash: npx tsc --noEmit (slow, external process)

正确做法:

LSP getDiagnostics on changed files -> instant, no subprocess
查找接口实现

错误做法:

Grep for "implements InterfaceName" -> misses duck-typed objects

正确做法:

LSP findReferences on interface -> finds all implementations including structural matches

常见错误

错误错误原因修正方法
重命名前用 Grep 搜索符号文本搜索会漏掉别名导入和重新导出使用 findReferences
为了查一个类型而读取整个文件浪费上下文,速度慢使用 hover
每次更改后都运行 tsc速度慢,还需使用外部工具使用 getDiagnostics
用 Grep 查找定义可能找到错误匹配项(同名但属于不同模块)使用 goToDefinition
用 Grep 搜索接口用法会漏掉结构化类型或鸭子类型使用 findReferences

LSP 工具的工作方式

LSP 是 Claude Code 内置工具,不是 bash 命令。启用 typescript-lsp 插件后,Claude Code 会自动提供以下操作:

  • goToDefinition - 跳转到符号定义处
  • findReferences - 查找符号的所有用法
  • hover - 获取类型签名和文档
  • getDiagnostics - 获取文件的类型错误
  • documentSymbol - 列出文件中的所有符号

这些操作通过 Claude 的工具系统调用,而不是通过 bash。 如果 LSP 不可用,请改用 grep/read,但要说明这一限制。

支持的文件类型

.ts、.tsx、.js、.jsx、.mts、.cts、.mjs、.cjs

先决条件

  1. 已启用插件: ~/.claude/settings.json 中包含 typescript-lsp@claude-plugins-official
  2. 已安装语言服务器: npm install -g typescript-language-server typescript
  3. 已配置项目: 存在 tsconfig.json 或 jsconfig.json(建议配置,以提高准确性)

检查 LSP 是否可用

始终优先尝试使用 LSP。 如果 LSP 工具不可用,它们会返回错误。不要仅仅因为不确定就提前改用 grep。

1. Attempt LSP operation (e.g., findReferences)
2. If tool error → fall back to grep/read with documented limitation
3. If success → use the semantic results

后备方案

如果 LSP 不可用(未找到工具或服务器未运行):

  1. 说明限制 - 明确指出:“LSP 不可用,改用文本搜索作为后备方案”
  2. 谨慎使用 Grep - 注意它可能会漏掉别名导入或重新导出
  3. 手动验证 - 对于重构,仔细检查结果在语义上是否合理
  4. 建议修复 - 提醒用户确保已安装 typescript-language-server 并启用插件

绝不要悄悄改用后备方案。 使用文本搜索而不是 LSP 时,务必告知用户,让他们了解其中的限制。

警示信号——停止并使用 LSP

如果出现以下想法,说明你应该使用 LSP,而不是 grep:

想法实际情况
“让我 grep 一下这个函数”如果它是一个符号,请使用 findReferences
“我来读一下文件,找出类型”使用 hover 即可即时获取类型信息
“我来运行 tsc 检查”使用 getDiagnostics——速度更快,无需启动子进程
“我来搜索一下它的定义位置”使用 goToDefinition——语义准确性更高
“快速搜索的话,Grep 更快”LSP 执行语义查询更快
“我需要找出所有实现”使用 findReferences——还能捕获结构性匹配

LSP 无法提供帮助的情况

  • 未安装 typescript-language-server 二进制文件
  • 使用不带 jsconfig.json 的纯 JavaScript(类型推断能力有限)
  • 跨语言引用(例如,TypeScript 通过 WASM 调用 Rust)
  • 搜索注释或字符串字面量
  • 配置文件(JSON、YAML 等)
  • 尚未安装 Node 模块(需先运行 npm install)

评论

支持 Markdown