网易首页 > 网易号 > 正文 申请入驻

npx aicode2flow:一行命令,让任何代码瞬间变成架构图

0
分享至

当读代码的痛苦超过了写代码的快乐,说明你需要换个角度看世界。
痛点:你为什么需要这个工具?

想象一个场景:

你接手了一个三个月没人维护的项目。文档?不存在。架构图?上一任说"还没来得及画"。你打开 src/ 目录,里面有 47 个文件,你挨个打开,在脑子里拼图一样还原调用关系。

这种痛苦,每个开发者都经历过。

传统的解决方案是什么?

  1. 手绘架构图— 代码改了,图没改,两周就过期
  2. PlantUML / Graphviz— 需要写声明文件,维护成本不低
  3. 现有代码可视化工具— code2flow 停更了,js2flowchart 只支持 JS,而且都要求先安装

有没有一种方式,能做到零安装、零配置、一行命令出图

有。这就是我今天要分享的项目 ——aicode2flow

零安装体验:npx 即用

不卖关子,先看效果:

# 一行命令,零安装npx aicode2flow ./main.go

输出:

```mermaidflowchart TDmain(["⭐ main"])greet("greet")validate("validate")processUser("processUser")saveUser("saveUser")processUser --> greetprocessUser --> validateprocessUser --> saveUsermain --> processUser```


aicode2flow

把这段 Mermaid 粘贴到 GitHub 的 Markdown 里,自动渲染成流程图。

真正的零安装— 不需要 git clone,不需要 npm install,不需要 pip install。你的电脑只需要有 Node.js,其他什么都不用装。

# 扫描整个项目,自动分析所有文件npx aicode2flow ./# 指定语言范围npx aicode2flow ./ --language go# 输出为 SVG 图片npx aicode2flow ./main.go -o diagram.svg
支持 8 种语言,添加新语言不需要写代码

这是这个项目最核心的设计理念:语言差异 = 数据,不是代码

目前支持:

Go / Python / JavaScript / TypeScript / Rust / Java / C / C++

添加一门新语言需要几步?两步:

第一步:JSON 配置文件

{"name": "rust","extensions": [".rs"],"grammar": "tree-sitter-rust","entryPoints": [{ "pattern": "main", "match": "full" }],"nodeTypes": {"function": { "query": "function", "shape": "round" }}

第二步:Tree-sitter 查询文件

; 函数定义(function_itemname: (identifier) @namebody: (block) @body) @function; 函数调用(call_expressionfunction: (identifier) @callee) @call

就这两步。不需要改动一行 TypeScript 代码。

因为项目的分析引擎是配置驱动的 —— 它读取 JSON 配置,加载对应的 Tree-sitter 语法,执行 SCM 查询,提取函数定义和调用关系。语言之间的差异被完全抽象成了数据文件

这就是元编程(Metaprogramming)的实践:与其为每种语言写一遍分析逻辑,不如写一份通用的分析引擎,然后用数据描述每种语言的差异。

技术架构:为什么 Tree-sitter 是核心选择?

项目的技术栈非常精简:

源代码 → Tree-sitter AST → 配置驱动的查询引擎 → Mermaid 流程图

选择 Tree-sitter 而不是正则表达式或自定义解析器,原因有三:

1. 增量解析 + 容错能力

Tree-sitter 的核心优势是容错解析。即使代码有语法错误,它仍然能生成 AST。这对于快速原型和工具链开发来说至关重要。

相比如 python -m ast 或 clang -ast-dump,Tree-sitter 不需要编译、不需要完整的项目环境,直接解析源码文本。

2. 同一套 API 覆盖所有语言

// 伪代码:分析引擎的核心逻辑function analyze(source: string, config: LanguageConfig) {// 1. 加载语言对应的 Tree-sitter 语法const lang = loadGrammar(config.grammar)// 2. 解析源码为 ASTconst tree = parser.parse(source)// 3. 从配置文件读取 SCM 查询const query = new Query(lang, config.querySource)// 4. 在 AST 上执行查询,提取函数和调用const matches = query.matches(tree.rootNode)// 5. 输出结构化结果return { nodes, edges }}

不管你是 Go、Python 还是 Rust,核心逻辑一模一样。区别只在于 JSON 配置和 SCM 查询数据。

3. SCM 查询语言

Tree-sitter 的 SCM(S-expression Pattern Matching)是一种声明式的 AST 匹配语法:

; 匹配 Python 函数定义(function_definitionname: (identifier) @namebody: (block) @body) @function; 匹配 JavaScript 箭头函数(arrow_functionbody: (_) @body) @function

每个 @name、@body、@callee 都是捕获标记,引擎通过它们提取信息。

深入:调用链的跨文件合并

单文件分析不难,真正的挑战是全项目扫描

当用户执行 npx aicode2flow ./ 时,引擎实际上在做什么?

// 伪代码:全项目扫描的核心逻辑async function scanProject(dir: string) {// 1. 递归遍历目录,收集所有支持的文件const files = walkDirectory(dir, supportedExtensions)// 2. 逐个分析每个文件const results = []for (const file of files) {results.push(analyzeFile(file))// 3. 合并结果:去重 + 跨文件连接const merged = {// 同名函数合并,调用列表合并nodes: deduplicate(results.flatMap(r => r.nodes)),// 跨文件调用边:只要目标节点存在就连线edges: resolveCrossFileEdges(mergedNodes, allCalls)return merged}

关键细节:

  • 去重策略:同名函数(如 main)只保留一个节点,合并它的 calls 列表
  • 跨文件连接:文件 A 中调用了 validate(),如果文件 B 中定义了 validate,跨文件也能连线
  • 智能跳过:自动忽略 node_modules、.git、dist、__pycache__ 等目录
与现有方案的对比

特性

aicode2flow

code2flow

js2flowchart

零安装 npx

❌ pip install

❌ npm i -g

多语言

✅ 8种

✅ Python/JS

❌ JS only

Mermaid 输出

✅ GitHub原生

❌ Graphviz

❌ SVG only

全项目扫描

跨文件合并

SVG/PNG 输出

持续维护

✅ 活跃

⚠️ 2023停更

⚠️ 2022停更

AI 增强:下一步的想象空间

项目预留了 --ai 参数接口。当前的规划是:

不依赖 AI 时,流程图展示的是代码结构(谁调用了谁)。

启用 AI 后,流程图展示的是业务语义—— 比如 LLM 分析后告诉你:

  • validateEmail() → 不是"调用 validateEmail",而是"验证用户邮箱格式"
  • saveToDB() → 不是"调用 saveToDB",而是"持久化用户数据到 MySQL"
  • 整个流程从"函数调用图"变成"业务流程图"

这个功能的实现逻辑大致是:

// 伪代码:AI 语义增强async function aiEnhance(result: AnalysisResult): Promise {// 1. 收集函数源码上下文const contexts = result.nodes.map(n => extractSourceContext(n))// 2. 调用 LLM 生成语义标签const semanticLabels = await callLLM(contexts, {prompt: "用中文简短描述每个函数的核心业务逻辑"// 3. 替换节点标签return {...result,nodes: result.nodes.map((n, i) => ({...n,semanticLabel: semanticLabels[i]}
注意:AI 增强功能目前是 开发中,需要 API Key 支持。纯本地分析不需要网络。
项目架构回顾

整个项目的文件结构极其精简:

config/languages/    ← JSON 数据:每种语言的 AST 映射go.json / python.json / javascript.json / ...queries/             ← SCM 数据:AST 查询模式go.scm / python.scm / javascript.scm / ...src/engine/registry.ts        — 读取 JSON 配置analyzer.ts        — 通用分析引擎(配置驱动,无语言分支)template.ts        — Mermaid 模板渲染src/cli.ts           — CLI 入口,不到 200 行

核心哲学:加语言 = 加数据文件,不是加代码

aicode2flow 是一个还在快速迭代的项目,但它已经证明了几个事情:

  1. Tree-sitter 作为多语言代码分析基础设施的可行性— 同一套引擎覆盖 8 种语言,未来可以覆盖 20+ 种
  2. 配置驱动架构的价值— 语言扩展的成本降到了最低,社区贡献的门槛也降到了最低
  3. npx 生态的威力— 零安装体验让工具的传播成本趋近于零

如果你感兴趣,可以现在就体验:

npx aicode2flow ./你的项目目录

不需要安装任何东西。

项目地址:https://github.com/peterfei/aicode2flow

如果觉得有用,欢迎 Star、Fork、提 Issue。后续规划包括 VSCode 插件、在线 Playground、更多语言支持。

读代码不应该是件痛苦的事。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
亏光1亿后67亿“卖掉”公司,小杨哥这次能成功翻身吗?

亏光1亿后67亿“卖掉”公司,小杨哥这次能成功翻身吗?

青眼财经
2026-06-01 10:37:30
霍尔木兹海峡,突传大消息!特朗普,最新表态!伊朗警告美国!黄金,突变!

霍尔木兹海峡,突传大消息!特朗普,最新表态!伊朗警告美国!黄金,突变!

证券时报
2026-06-02 08:34:58
于谦被曝成老赖,坐拥北京 60 亩马场,巨额债务真相藏不住了

于谦被曝成老赖,坐拥北京 60 亩马场,巨额债务真相藏不住了

橙星文娱
2026-04-06 13:09:46
樊振东荣获“三冠王”,让一个人心里懊悔不已,另一个是后悔不已

樊振东荣获“三冠王”,让一个人心里懊悔不已,另一个是后悔不已

鸿印百合
2026-06-01 21:06:44
000586,跌停!控制权变更终止!

000586,跌停!控制权变更终止!

证券时报e公司
2026-06-01 12:37:50
世界第1,历史第2!吴宜泽夺冠,单赛季奖金榜领跑,赵心童第3!

世界第1,历史第2!吴宜泽夺冠,单赛季奖金榜领跑,赵心童第3!

刘姚尧的文字城堡
2026-05-07 08:34:26
我们为什么养出了一堆没有教养的“废物”?

我们为什么养出了一堆没有教养的“废物”?

教育人陈志文
2026-05-25 11:24:47
今年山茶油为啥卖不动?曾经的“油中黄金”,如今没人买单了?

今年山茶油为啥卖不动?曾经的“油中黄金”,如今没人买单了?

农夫也疯狂
2026-05-09 17:41:51
震惊!河南麦收“割分按亩”,网友调侃:不地道啊,坏了江湖规矩

震惊!河南麦收“割分按亩”,网友调侃:不地道啊,坏了江湖规矩

火山詩话
2026-06-01 06:43:31
国米心仪飞翼12年前效力蓝黑青训 签下他的障碍是前尤文巨头

国米心仪飞翼12年前效力蓝黑青训 签下他的障碍是前尤文巨头

国际足球冷雪
2026-06-02 07:02:22
陪睡只是入门!认干爹、舔手指,背地里的阴暗面完全藏不住了...

陪睡只是入门!认干爹、舔手指,背地里的阴暗面完全藏不住了...

芳华青年
2026-05-18 13:07:54
卫冕失败也不怕!挖出2大悍将,薪水仅700万,下赛季还是争冠热门

卫冕失败也不怕!挖出2大悍将,薪水仅700万,下赛季还是争冠热门

大卫的篮球故事
2026-06-02 08:45:18
南非体育部长:南非队全体球员均已获得签证,仅部分随行人员仍在办理

南非体育部长:南非队全体球员均已获得签证,仅部分随行人员仍在办理

懂球帝
2026-06-02 01:20:19
6.1官宣!19岁小勒布伦女朋友曝光,是迪亚兹的妹妹,长相绝美

6.1官宣!19岁小勒布伦女朋友曝光,是迪亚兹的妹妹,长相绝美

观察鉴娱
2026-06-02 08:23:19
战争目标一个都没达成!满盘皆输?俄罗斯已经到崩溃边缘了

战争目标一个都没达成!满盘皆输?俄罗斯已经到崩溃边缘了

阿芒娱乐说
2026-06-02 00:09:29
传闻有菲律宾政府团来中国采购小米手机 店员紧急调货

传闻有菲律宾政府团来中国采购小米手机 店员紧急调货

CNMO科技
2026-06-01 17:33:47
皇马复仇者联盟集结!队长耶罗归来,23年恩怨再度对峙弗洛伦蒂诺

皇马复仇者联盟集结!队长耶罗归来,23年恩怨再度对峙弗洛伦蒂诺

穆里尼奥主义者
2026-06-01 17:16:42
央视再曝新毒物!长期用会致癌,已流窜至全国,不少婴儿孕妇中招

央视再曝新毒物!长期用会致癌,已流窜至全国,不少婴儿孕妇中招

云舟史策
2026-06-01 19:31:57
延尚昊新片太猛了!全智贤战丧尸,10天破300万观影

延尚昊新片太猛了!全智贤战丧尸,10天破300万观影

娱圈观察员
2026-06-02 00:53:42
“小贷教父”落马、八部门连环出手!“小贷之都”为何一夜崩塌?

“小贷教父”落马、八部门连环出手!“小贷之都”为何一夜崩塌?

财经保探长
2026-05-27 21:19:10
2026-06-02 09:12:49
侃故事的阿庆
侃故事的阿庆
几分钟看完一部影视剧,诙谐幽默的娓娓道来
888文章数 8608关注度
往期回顾 全部

科技要闻

英伟达RTX Spark 很猛,但首批机型不便宜

头条要闻

牛弹琴:伊朗突然发飙 特朗普急了被迫打了一个电话

头条要闻

牛弹琴:伊朗突然发飙 特朗普急了被迫打了一个电话

体育要闻

杰威:如果我没受伤,我们能击败马刺

娱乐要闻

奚梦瑶婚礼现场图!一双儿女当花童

财经要闻

宇树过会,杭州赢麻了

汽车要闻

奇瑞集团5月销量24.8万辆 同比增长20.5% 出口18.2万辆再创新高

态度原创

艺术
旅游
数码
手机
公开课

艺术要闻

周杰伦花 1.36 亿拍下的这幅画

旅游要闻

“海南之夜”旅游专场欢迎活动举行 海外旅行商共赴海南之约

数码要闻

追觅MOVA TPEAK Open体验:开放声场耳机也能做「六边形战士」

手机要闻

苹果WWDC26下周开幕,新标语“全高光就位”暗指Siri将迎改版

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版