ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

graphify affected 实战:重构前如何查询一次代码改动的波及范围

graphify affected 实战:重构前如何查询一次代码改动的波及范围 graphify affected 实战重构前如何查询一次代码改动的波及范围【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify准备重构一个函数、类或模块之前先回答一个问题改动它之后哪些代码会被波及graphify 把代码库解析成知识图谱后提供了一个专门的graphify affected子命令给定一个符号或文件路径作为种子沿图的入边反向遍历列出所有会受此改动影响的节点并标注每一条影响关系和调用点位置。本文基于 README.md 与 graphify/affected.py、tests/test_affected_cli.py 的正文内容给出从建图到查询、判定结果的完整操作路径。适用前提来自 README 的 Prerequisites 一节Python 3.10CLI 已安装且能执行graphify命令当前项目已经建好graphify-out/graph.jsonaffected的默认图文件位置。准备安装 CLI 并构建图谱affected查询的对象是已建好的图所以先确保两件事完成。第一步安装 CLI。PyPI 包名是graphifyy双 y命令仍是graphifyuv tool install graphifyy # 推荐或 pipx install graphifyy graphify --version # 确认命令可用如果安装后提示graphify: command not found按 README 排障说明uv 安装需运行uv tool update-shellpipx 安装需运行pipx ensurepath然后打开新终端。第二步构建图谱。在 AI 助手里执行/graphify .或在终端做无头提取graphify extract . # 纯代码语料可本地完成无需 API key graphify extract . --code-only # 混合仓库只索引代码、跳过需要 LLM 的文档/PDF/图片建图完成后会生成graphify-out/graph.jsonaffected默认读取它。图谱需要随代码更新README 的 Recommended workflow 指出git pull/git merge之后要手动运行graphify update .如果某次查询看起来漏掉了你刚加的代码先跑graphify update .再查一次。执行查询affected 命令与参数命令格式来自 CLI 内的用法说明graphify affected node-or-label [--relation R] [--depth N] [--graph path]各参数的适用条件参数说明第一个位置参数种子节点 id、符号标签、函数名或源文件路径--relation R只沿指定关系反向遍历可重复传多个不传时使用默认关系集--depth N反向遍历深度默认2必须是整数否则报错error: --depth must be an integer--graph path指定图文件默认graphify-out/graph.json必须是.json文件不传--relation时默认遍历的关系集定义在 graphify/affected.py 的DEFAULT_AFFECTED_RELATIONS中calls、indirect_call、references、imports、imports_from、dynamic_import、re_exports、inherits、extends、implements、uses、mixes_in、embeds、requires。也就是说重构前的默认视角是谁调用了我、谁导入/引用了我、谁继承或实现了我、谁动态导入或混合了我。几个典型的查询方式graphify affected Foo # 按标签查一个类/模块 graphify affected transition_state # 按函数名查 graphify affected pkg/foo.py # 按源文件路径查整个文件的影响面 graphify affected Foo --relation calls # 只看直接调用方 graphify affected Foo --depth 3 # 把间接依赖多追一层 graphify affected Foo --graph other/graph.json # 查另一份图关于种子路径形式图里存的是仓库相对路径pkg/foo.py、./pkg/foo.py与「以图所在位置推导的仓库根为基准的绝对路径」指向同一个文件都能解析。绝对路径种子会基于图自身的位置root/graphify-out/graph.json的父目录锚定仓库根因此从编辑器或脚本在任意工作目录下传入绝对路径也能解析位于仓库根之外的绝对路径种子则干净地报无匹配而不会猜测到同名文件。解读输出如何判断改动波及范围查询成功后输出的固定结构由 graphify/affected.py 的format_affected生成是Affected nodes for 种子节点的标签 Relations: 本次遍历的关系列表 Depth: 深度 - 受影响节点标签 [关系] 文件:位置与仓库测试夹具一致的一组示例结果数值仅演示格式非固定预期Affected nodes for Foo Relations: calls, indirect_call, references, imports, imports_from, dynamic_import, re_exports, inherits, extends, implements, uses, mixes_in, embeds, requires Depth: 2 - X() [calls] app.py:L4 - __init__.py [re_exports] pkg/__init__.py - app.py [imports] app.py解读要点每一行是一个受影响节点[relation]说明影响来自哪类关系末尾的位置信息是关系发生点。按 CHANGELOG 0.9.23 的说明explain、affected等调用点列表打印的是边上的真实调用点行号如apollo_pipeline_status.py:L158而不是调用方函数自己的定义行——重构时可以直接跳到那一行核对。边上没有存位置信息时才回退到该节点自身的定义行。重构前把这份列表当作回归范围列表里的每个节点都是需要重点测试或人工检查的位置depth 2意味着它还包括了一级间接依赖调用你的调用方。结果验证三种输出分别说明什么命令的输出结果可以按文档给出的文本直接判定输出以Affected nodes for 标签开头且列表非空—— 种子解析成功且存在受影响节点列表中每行即一条波及路径。输出No affected nodes found.—— 种子解析成功但在本次遍历的关系与深度内没有入边。若你预期它应该有依赖方先确认图谱是新的跑graphify update .后重试再考虑加--depth或去掉--relation过滤重新查询。输出No unique node match for 查询—— 种子在图里不唯一或不匹配例如两个文件定义了同名符号。换用完整节点 id 或源文件路径再查按 graphify/affected.py 的resolve_seed逻辑多个候选时它不做猜测宁可报无匹配。如果图文件本身有问题错误信息是明确的图不存在时输出error: graph file not found: path--graph指向非.json文件时输出error: graph file must be a .json file文件损坏或截断时graphify/affected.py 的load_graph会提示重新运行graphify extract生成图。另外即便旧版graph.json里directed为falseaffected加载时也会强制按有向图处理保证「查被调用方时返回的是调用方」的方向正确见 tests/test_affected_cli.py 中对 #1174 的回归测试。限制与边界affected只做反向遍历找依赖方回答「改它会影响谁」不回答「它依赖谁」。需要正向/双向视角时README 中的graphify query question、graphify path A B、graphify explain X是配套命令。默认关系集是固定的那 14 种某些图上存在的关系若不在其中需要显式传--relation才会被遍历。遍历深度由--depth控制默认 2更深的影响面会指数级扩大结果按需调整而不是默认拉满。同名符号多于一处时查询会失败No unique node match此时用文件路径或完整节点 id 消歧。收尾把查询接到日常工作流里README 的团队工作流提供了保持图谱新鲜的手段直接决定了affected结果的可信度graphify hook install # 克隆后执行一次commit / 切分支自动重建 git config --global alias.gpull !git pull graphify update . # 可选pull 后自动同步图装好 hook 后日常git commit与分支切换会自动重建图后台执行大仓库可能滞后几秒git pull之后运行一次graphify update .。这样在真正动手重构前graphify affected 目标给出的列表就是基于当前代码的波及范围清单列表里的文件与行号即为重构后的回归检查点。相关实现与测试可继续深入graphify/affected.py种子解析、反向遍历与输出格式化、tests/test_affected_cli.pyCLI 行为与各类种子解析的回归用例、CHANGELOG.md 中affected相关条目各版本对动态导入、成员种子、路径解析等能力的修复记录。【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表