t-comm
Version:
专业、稳定、纯粹的工具库
49 lines (48 loc) • 2.26 kB
TypeScript
export interface SearchReplaceResult {
content: string;
applied: boolean;
matchLevel: 'exact' | 'trimEnd' | 'indentNormalize' | 'none';
}
/**
* 通用「搜索-替换」工具
*
* 适用场景:AI Agent / Code Mod 需要根据"搜索-替换对"对源文件进行原地修改的场景。
*
* 提供两个函数:
* - cleanLineNumberPrefix:清理 AI 输出 search/replace 块时常带的行号前缀(如 "12| " "12 | ")
* - applySearchReplace:在源代码中查找 search 并替换为 replace,按 "精确 → 行级 → 子串" 三级策略匹配
*/
/**
* 清理 AI 输出 search/replace 块时常带的行号前缀
*
* AI 在生成搜索字符串时,有时会无意把行号也带上,导致与源文件无法精确匹配。
* 本函数支持 5 种常见格式:
* - "12| code" → "code"
* - "12 | code" → "code"
* - "12 code" → "code" (多空格分隔,仅当首行匹配且行号递增时才认为是行号)
* - "12: code" → "code"
* - "12. code" → "code"
*
* 为避免误删(如某些 markdown / 注释开头是数字),仅当:
* - 首行能匹配到行号格式
* - 后续行行号严格递增(差值为 1)
* 时才视为带行号前缀,全部清理。
*
* @param text 原始字符串(来自 AI 输出的 search/replace 块)
* @returns 清理后的字符串;不像行号前缀时原样返回
*/
export declare function cleanLineNumberPrefix(text: string): string;
/**
* 在源代码中查找 search 并替换为 replace,按 3 级策略匹配
*
* 策略:
* 1. 精确匹配:原样查找 search
* 2. 行级匹配:去除每行首尾空白后逐行对比(应对 AI 输出与源文件缩进不一致)
* 3. 子串匹配:查找首行 trim 后的子串位置,从该位置开始截取与 search 等长的范围替换
*
* @param source 源代码字符串
* @param search 要查找的字符串(可能被 AI 带了行号前缀,函数会自动清理)
* @param replace 替换为的新字符串(同上,自动清理行号前缀)
* @returns 替换后的字符串;查找失败返回 null
*/
export declare function applySearchReplace(fileContent: string, rawSearch: string, rawReplace: string): SearchReplaceResult;