ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

如何用query_graph检测死代码:NOT EXISTS查询模式实战

如何用query_graph检测死代码:NOT EXISTS查询模式实战 如何用query_graph检测死代码NOT EXISTS查询模式实战【免费下载链接】codebase-memory-mcpHigh-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.项目地址: https://gitcode.com/GitHub_Trending/co/codebase-memory-mcpcodebase-memory-mcp 是一款高性能代码智能 MCP 服务器它能将代码库毫秒级索引成持久化知识图谱支持 158 种语言。本文教你用它内置的query_graph工具通过NOT EXISTS 查询模式精准找出项目里的死代码零调用者函数无需逐个文件 grep一条 Cypher 查询毫秒级出结果。什么是死代码为什么值得检测死代码Dead Code指定义存在、却从未被任何地方调用的函数或方法。它们通常来自重构废弃、被注释掉的调用点或复制粘贴遗留。长期积累会带来认知噪音新人分不清哪些代码还有效体积膨胀二进制和包体积白白增大⚠️安全与合规隐患未维护的废弃逻辑可能藏漏洞传统做法是全局搜索函数名再人工确认动辄几十个 grep/read 循环。而 codebase-memory-mcp 把调用关系存成图上的CALLS边死代码 入度为 0 的函数节点一次图查询即可判定。官方基准显示全图死代码扫描约150msCypher 查询 1ms见 docs/BENCHMARK.md。前置准备先建好代码知识图谱安装并运行二进制后对代理说Index this project或执行index_repository完成一次性索引索引持久化到本地缓存重启会话无需重建建议开启auto_index true新会话自动就绪 提示项目名project参数可先用list_projects工具查到后续所有查询都要带上它。核心思路死代码 入度为 0 的函数在知识图谱中每个函数/方法是一个节点每次调用是一条CALLS有向边。判断死代码的逻辑就是找出没有任何入边指向它的Function节点。这正是 Cypher 的NOT EXISTS子图谓词的用武之地。引擎在 src/cypher/cypher.c 中专门实现了这个模式——单跳、指定边类型的存在性检查注释里给出的经典用例就是找零调用者函数。NOT EXISTS 查询模式实战一键找出所有零调用者函数让代理调用query_graph传入如下 CypherMATCH (f:Function) WHERE NOT EXISTS { (f)-[:CALLS]-() } RETURN f.qualified_name, f.file三个要点(f)-[:CALLS]-()表示存在某节点通过 CALLS 边调用 f加NOT后只剩没有调用者的函数qualified_name返回带包/模块路径的完整函数名方便定位边类型可换成USAGE宽松的使用关系减少图里没建边、实际被动态调用的误报排除入口点降低误报测试函数、HTTP 路由处理函数、main等天然没有内部调用者但它们是合法入口。两种处理方式用WHERE NOT f.qualified_name ENDS WITH main排除特定命名配合search_graph工具的exclude_entry_points、min_degree等参数交叉验证缩小范围只看某个目录的高危死代码MATCH (f:Function) WHERE NOT EXISTS { (f)-[:CALLS]-() } AND f.file STARTS WITH src/legacy RETURN f.qualified_name, f.file, f.lines加f.lines代码行数能直接量化删掉它能省多少代码是向团队汇报清理收益的硬数据。进阶组合查询定位高价值死代码query_graph 支持完整的多跳与聚合查询几个实用组合场景查询要点死代码 高复杂度在WHERE中追加AND f.complexity 10优先删最复杂的废弃逻辑某模块的孤儿函数MATCH (m)-[:DEFINES]-(f)后接 NOT EXISTS按模块分批清理调用链已断裂的整条链反向找(f)-[:CALLS]-(g) WHERE NOT EXISTS { (f)-[:CALLS]-() }定位被废弃模块的完整闭包所有查询参数与 100k 行结果上限的说明可查 src/mcp/mcp.c 中的工具定义更宽泛的批量浏览建议改用search_graph的分页参数。常见问题与避坑清单查不到结果先确认project参数与索引名一致且索引已完成index_status可查状态结果偏多默认全图扫描先加目录前缀过滤大仓库建议在 Cypher 里自带LIMIT动态调用的误报反射、字符串拼调用等无法被静态建边NOT EXISTS 会冤枉它们——删除前用get_code_snippet看一眼源码确认被跳过的文件若项目有部分文件未完整索引可用graphmissed参数查询缺失图谱核实覆盖面小结一条查询替代几十个 grepNOT EXISTS { (f)-[:CALLS]-() }是死代码检测的黄金模式毫秒级反馈全图扫描约 150ms改完即查清理节奏飞快配合可视化启动内置 3D 图谱 UIlocalhost:9749后死代码节点在图中一目了然汇报和评审都更直观把死代码检测变成一句自然语言——帮我找出 src/ 下没有调用者的函数——剩下的交给 codebase-memory-mcp 的图谱引擎吧 延伸阅读docs/EVALUATION_PLAN.md 记录了query_graph在真实仓库上的 Cypher 查询评测数据可作为你自建查询模板的参考。【免费下载链接】codebase-memory-mcpHigh-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.项目地址: https://gitcode.com/GitHub_Trending/co/codebase-memory-mcp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表