关于 find-similar-functions
find-similar-functions 是帮助 JavaScript 和 TypeScript 开发者查找可复用代码的技能。它通过 truffler 搜索相近符号,并要求检查实现与调用点后再决定复用或新增。
主要功能
- 01按行为生成搜索查询
- 02使用 truffler 模糊搜索符号
- 03从窄目录逐步扩大搜索
- 04检查匹配项的实现和调用
- 05依据行为契约判断是否复用
- 06提供搜索结果报告模板
适用场景
- 01编写新代码前检查是否已有辅助函数
- 02评估是否扩展现有模块而非重复实现
- 03在缺少 truffler 时使用其他搜索工具
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ millionco/ react-doctor --skill find-similar-functions安装后在 Claude Code 中输入/find-similar-functions确认已加载。
详细介绍
类似功能查找器
在编写可能与现有辅助代码重叠的 JavaScript 或 TypeScript 代码之前,使用此技能。目标是尽早发现相关函数、方法、常量、类型和接口,以便复用或扩展它们,而不是创建重复的行为。
truffler 是模糊符号搜索工具。请将它视为发现工具:它会为你指出可能相关的符号,但在决定是否可以复用之前,你仍需检查代码。
工作流
- 用几句话说明你即将实现的行为。
- 根据预期行为推导出 3-6 个搜索查询:
- 提议的函数或类名
- 领域名词,例如
symbol、path、file、route、token或config - 动词,例如
parse、normalize、discover、scan、format、rank、score、resolve或validate - 常见缩写和同义词,例如用
btn表示button,或用cfg表示config
- 先在范围最窄且有用的根目录下运行
truffler,必要时再扩大范围。 - 编辑前,使用常规代码阅读工具检查最匹配的结果。
- 如果现有代码的行为基本匹配,优先复用、扩展或移动现有代码。只有搜索结果表明不存在合适的现有符号时,才创建新代码。
- 在最终回复中简要说明你发现了什么,以及你是复用了现有代码还是有意新增了实现。
命令示例
在目标项目中安装了 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