ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Repomix 代码压缩功能深度解析:用 `--compress` 在保留代码结构的同时大幅降低 Token 消耗

Repomix 代码压缩功能深度解析:用 `--compress` 在保留代码结构的同时大幅降低 Token 消耗 Repomix 代码压缩功能深度解析用--compress在保留代码结构的同时大幅降低 Token 消耗【免费下载链接】repomix Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.项目地址: https://gitcode.com/GitHub_Trending/rep/repomixRepomix 的代码压缩Code Compression是一项面向 LLM/AI 场景的实用功能它通过 Tree-sitter 语法解析从源码中智能提取函数签名、接口、类型与类结构等关键骨架同时剔除函数体、循环条件细节等实现代码从而在保留代码库结构性信息的前提下显著降低输出体积与 Token 数量。本文以 code-compress.md德文指南为核心结合 Repomix 仓库中 parseFile.ts、languageConfig.ts 等源码实现系统讲解--compress的用法、原理、配置与适用场景。读完本文你将掌握如何用一行命令把大型代码库压缩成骨架级的 AI 友好输入并能理解其底层工作机制与降级策略。[!NOTE] 代码压缩目前是实验性功能Repomix 团队将根据用户反馈和实际使用持续改进见原文档中的声明。基本用法一行命令启用压缩在命令行中启用代码压缩只需添加--compress标志repomix --compress该选项也可以与远程仓库打包组合使用直接对 GitHub 仓库user/repo格式或完整 URL执行压缩repomix --remote user/repo --compress在 Befehlszeilenoptionen 参考 中--compress的官方定义是Extract essential code structure (classes, functions, interfaces) using Tree-sitter parsing使用 Tree-sitter 解析提取类、函数、接口等核心代码结构。从源码看CLI 标志在 defaultAction.ts 中被映射为配置项cliConfig.output { ...cliConfig.output, compress: options.compress }即命令行标志最终写入output.compress配置与配置文件走同一条处理链路。工作原理Tree-sitter 解析 结构提取压缩算法的核心流程在 parseFile.ts 中实现可概括为四条主线语言识别根据文件扩展名猜测语言guessTheLang若该语言不受支持则静默返回未压缩内容AST 构建使用web-tree-sitterWASM 运行时将文件内容解析为抽象语法树AST查询捕获对 AST 运行该语言对应的 Tree-sitter 查询捕获导入、注释、类、函数、方法、接口、类型、枚举等结构节点后处理组装对捕获的代码块执行去重、相邻合并最后用分隔符⋮----源码中定义为CHUNK_SEPARATOR连接成压缩结果。压缩保留与移除的内容压缩算法保留的结构元素包括函数与方法签名Function and method signatures接口与类型定义Interface and type definitions类结构与属性Class structures and properties其他关键结构性元素Important structural elements同时移除的内容包括函数与方法实现体Function and method implementations循环与条件逻辑细节Loop and conditional logic details内部变量声明Internal variable declarations实现相关的特定代码Implementation-specific code为什么选择 WASM 版 Tree-sitterparseFile.ts 的头部注释给出了明确的技术选型理由相比 node-tree-sitter原生绑定web-tree-sitterWASM跨平台表现一致、无需 Python/C 编译器与 node-gyp 等构建工具链npm install即可在任何环境安装、所有语言解析器统一打包在单个repomix/tree-sitter-wasms包中而非 15 个独立原生包且规避了部分 Node.js 版本如 v23对原生模块的兼容性问题。WASM 带来的性能开销对压缩功能的使用场景而言是可以接受的。支持的编程语言从 languageConfig.ts 的LANGUAGE_CONFIGS注册表可见压缩功能目前覆盖16 种语言含扩展名映射语言扩展名解析策略JavaScriptjs, jsx, cjs, mjs, mjsxTypeScriptParseStrategy复用TypeScriptts, tsx, mts, mtsx, ctsTypeScriptParseStrategyPythonpyPythonParseStrategyGogoGoParseStrategyCSScssCssParseStrategyVuevueVueParseStrategyRust / Java / C# / Ruby / PHP / Swift / C / C / Solidity / Dartrs / java / cs / rb / php / swift / c,h / cpp,hpp / sol / dartDefaultParseStrategy每个语言配置还绑定了一段 Tree-sitter 查询如 queryTypescript.ts例如import_statement捕获为definition.import、function_declaration/lexical_declaration箭头函数捕获为definition.function、interface_declaration捕获为definition.interface、class_declaration捕获为definition.class等。comment节点单独捕获为comment并保留。压缩示例以一个 TypeScript 购物车结算函数为例压缩前的原始代码如下import { ShoppingItem } from ./shopping-item; /** * Calculate the total price of shopping items */ const calculateTotal ( items: ShoppingItem[] ) { let total 0; for (const item of items) { total item.price * item.quantity; } return total; } // Shopping item interface interface Item { name: string; price: number; quantity: number; }压缩后的输出如下import语句、函数签名含 JSDoc 注释与interface定义被完整保留而函数体中的let total 0、for循环和return等实现细节被移除并用⋮----分隔线标记被裁掉的部分import { ShoppingItem } from ./shopping-item; ⋮---- /** * Calculate the total price of shopping items */ const calculateTotal ( items: ShoppingItem[] ) { ⋮---- // Shopping item interface interface Item { name: string; price: number; quantity: number; }源码级的实现细节签名截取TypeScriptParseStrategy.ts 中的findSignatureEnd会逐行寻找以)结尾且紧随{、或;的行将其定位为签名结束行cleanFunctionSignature会把签名行中{或之后的部分裁掉从而只保留签名本身。类定义精简parseClassDefinition只保留类声明首行若第二行包含extends或implements则一并保留然后去掉{之后的全部内容。去重机制parseFile.ts中的filterDuplicatedChunks按起始行分组、每组只保留内容最长的块因为同名捕获会命中多条查询规则BaseParseStrategy.checkAndAddToProcessed则用Set对已处理的签名/块做全局去重避免重复输出。相邻块合并mergeAdjacentChunks会将行号相邻endRow 1 current.startRow的块拼接为一段中间的缝隙才插入⋮----分隔符。尽力而为best-effort降级parseFile的函数签名保证永不抛异常——语言不支持、解析失败或 WASM 运行时中止时返回undefined调用方 fileProcessContent.ts 会自动回退到未压缩的原始内容并打印 trace/warn 日志。这意味着个别异常文件不会导致整个打包任务崩溃。配置文件启用压缩除命令行外还可以在配置文件默认为repomix.config.json中持久化启用压缩{ output: { compress: true } }对应配置模式定义在 configSchema.ts 的repomixConfigBaseSchema中output.compress为可选的布尔值默认值为false见 repomixConfigDefaultSchema。值得注意的是配置系统还提供了按文件粒度覆盖的能力outputPatternSchemaoutput.patterns数组中的每个条目可以按 glob 匹配特定文件并单独设置compress第一个匹配生效若同时设置了directoryStructureOnly则文件仅出现在目录结构中、内容块完全不输出其优先级高于compress。这种机制让全局压缩 个别文件保留完整实现成为可能适合对关键算法文件做精细控制。典型应用场景代码压缩在以下场景中尤其有价值分析代码结构与架构只保留骨架即可快速把握模块划分、类层次与依赖关系降低 LLM 处理的 Token 数量实现代码通常占据源码体积的绝大部分压缩后可显著削减输入成本生成高层级文档以签名 结构为输入让 LLM 聚焦于 API 面与设计意图理解代码模式与签名快速浏览函数/方法的入参、出参与类型约束分享 API 与接口设计无需暴露内部实现即可对外描述模块契约。与其他选项的组合使用压缩可以和其他输出优化选项叠加进一步削减体积--remove-comments移除代码注释与压缩配合可进一步降低 Token详见 Kommentarentfernung 指南--remove-empty-lines移除空行--output-show-line-numbers为输出中的每一行添加行号。三者对应配置项分别为output.removeComments、output.removeEmptyLines与output.showLineNumbers均在 configSchema.ts 中定义默认值false。需要留意处理顺序压缩发生在parseFile层注释与空行处理属于文件内容预处理阶段合理组合可获得骨架级 无注释 紧凑排版的最精简输出。相关资源Kommentarentfernung —— 移除注释以进一步降低 TokenKonfiguration —— 在配置文件中设置output.compress的完整说明Befehlszeilenoptionen —— 全部 CLI 选项参考含--compress与--output-show-line-numbers等压缩实现源码parseFile.ts、languageConfig.ts、TypeScriptParseStrategy.ts、fileProcessContent.ts压缩调用与降级验证可参考测试用例 parseFile.typescript.test.ts 与 parseFile.errorHandling.test.ts。【免费下载链接】repomix Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude, ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.项目地址: https://gitcode.com/GitHub_Trending/rep/repomix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表