mcpField
F
find-similar-functions

find-similar-functions

github.com/millionco开发15.1k457 次安装2 周前更新
代码仓库

关于 find-similar-functions

find-similar-functions 是帮助 JavaScript 和 TypeScript 开发者查找可复用代码的技能。它通过 truffler 搜索相近符号,并要求检查实现与调用点后再决定复用或新增。

主要功能

  1. 01按行为生成搜索查询
  2. 02使用 truffler 模糊搜索符号
  3. 03从窄目录逐步扩大搜索
  4. 04检查匹配项的实现和调用
  5. 05依据行为契约判断是否复用
  6. 06提供搜索结果报告模板

适用场景

  1. 01编写新代码前检查是否已有辅助函数
  2. 02评估是否扩展现有模块而非重复实现
  3. 03在缺少 truffler 时使用其他搜索工具

安装

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

$npx skills add https://github.com/millionco/react-doctor --skill find-similar-functions

安装后在 Claude Code 中输入/find-similar-functions确认已加载。

详细介绍

类似功能查找器

在编写可能与现有辅助代码重叠的 JavaScript 或 TypeScript 代码之前,使用此技能。目标是尽早发现相关函数、方法、常量、类型和接口,以便复用或扩展它们,而不是创建重复的行为。

truffler 是模糊符号搜索工具。请将它视为发现工具:它会为你指出可能相关的符号,但在决定是否可以复用之前,你仍需检查代码。

工作流

  1. 用几句话说明你即将实现的行为。
  2. 根据预期行为推导出 3-6 个搜索查询:
    • 提议的函数或类名
    • 领域名词,例如 symbol、path、file、route、token 或 config
    • 动词,例如 parse、normalize、discover、scan、format、rank、score、resolve 或 validate
    • 常见缩写和同义词,例如用 btn 表示 button,或用 cfg 表示 config
  3. 先在范围最窄且有用的根目录下运行 truffler,必要时再扩大范围。
  4. 编辑前,使用常规代码阅读工具检查最匹配的结果。
  5. 如果现有代码的行为基本匹配,优先复用、扩展或移动现有代码。只有搜索结果表明不存在合适的现有符号时,才创建新代码。
  6. 在最终回复中简要说明你发现了什么,以及你是复用了现有代码还是有意新增了实现。

命令示例

在目标项目中安装了 truffler 时:

truffler "normalize path" src --kind function,method,constant,type --limit 20
truffler "score" src --kind function,method --format json --limit 15

在此 truffler 仓库中工作时:

bun src/cli.ts "discover file" src --kind function,method,constant,type --limit 20
bun src/cli.ts "format result" src --kind function,method --format json --limit 15

如果项目没有安装二进制文件,且不应添加依赖项,那么在环境允许联网或执行软件包的情况下使用 bunx:

bunx @rayhanadev/truffler "parse config" src --kind function,method,type --limit 20

如果无法运行 truffler,请说明这一点,并改用仓库中可用的搜索工具。仍需遵循相同的去重原则:先搜索,再实现。

搜索策略

从最有可能表示可复用行为的符号开始:

truffler "<query>" <root> --kind function,method,constant,type,interface --limit 20

需要用于排序、位置、签名或自动化的结构化字段时,使用 JSON 输出:

truffler "<query>" <root> --format json --limit 20

有计划地扩大搜索范围:

  • 如果精确的函数名没有匹配结果,分别搜索领域名词和动词。
  • 如果工具函数可能位于 src/ 之外,尝试已知的库、软件包、应用或测试根目录。
  • 如果匹配结果很多,请限制 --kind 并缩小根目录范围,而不是浏览无关结果。
  • 如果最匹配的结果看起来接近,请阅读实现以及相关测试或调用点,再作决定。

复用决策指南

如果现有符号已处理相同的输入形式、副作用、错误行为和返回形式,或者只需稍作扩展就能保持其现有契约,则可考虑复用。

不要仅仅因为名称相近就复用某个符号。模糊匹配可能会找到无关代码。修改之前,请检查签名、实现、调用方和测试。

如果不存在合适的符号,请将新实现放在最相关的模块附近,并遵循该模块的命名、错误处理和测试风格。

报告模板

当搜索结果影响了你的实现时,使用类似这样的简短说明:

I checked for existing symbols with `truffler` using queries like `normalize`, `path`, and `resolve`. The closest match was `normalizePath` in `src/files.ts`, so I reused that behavior instead of adding a separate helper.

如果没有找到相关内容:

I searched with `truffler` for `parse`, `config`, and `loadConfig` across `src/`; the matches were unrelated, so I added a new helper in the nearest module.

评论

支持 Markdown