news 2026/4/25 20:46:25

个人博客4: Git 忽略规则优化+跨文件上下文补全功能开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
个人博客4: Git 忽略规则优化+跨文件上下文补全功能开发

1. 本次改动总览

我在团队中主要负责渐进式上下文补全、大模型调用、漏洞解释生成、修复建议输出,是连接后端规则分析与前端插件 展示的核心环节。AI 模块的稳定性、准确率和响应速度,将直接决定项目最终能否达到可演示、可考核、可验收的标准。

上次说要写跨文件补全,但是没找到合适的项目,自己写了一个简单的python调用试试水。顺便改了一些git上的小问题 。本次主要完成两类工作:

  1. 工程治理:新增仓库根目录.gitignore,并将已被跟踪的虚拟环境/缓存/编译产物从 Git 索引移除。
  2. 功能增强:在现有“文件内上下文补全”的基础上,增加“跨文件上下文补全”能力,支持在当前分析范围无明确漏洞时,继续自动检查被调用文件。

2. 我改动的文件和实现的功能

2.1/.gitignore

改动内容

  • 新增忽略规则:
    • backend/.venv/
    • backend/**/__pycache__/
    • *.pyc
    • vscode-extension/out/extension.js
    • vscode-extension/out/extension.js.map

为什么要改

  • 就我个人而言,一开始没发现什么问题,但是队友跟我反映了一些配置文件没必要共享,提交后会与他们本地的文件冲突,所以做了gitinnore来筛选不需要的部分。也算是在项目中学到的开发技巧。
  • 防止虚拟环境、Python 缓存、扩展编译产物进入版本库,减少噪音变更与误提交。

影响到的用户流程

  • 开发者本地运行后,git status更干净。
  • 提交代码时不再混入无关构建文件与缓存文件。

关键代码

backend/.venv/ backend/**/__pycache__/ *.pyc vscode-extension/out/extension.js vscode-extension/out/extension.js.map

2.2vscode-extension/src/extension.ts

新增跨文件补全触发流程

改动内容

  • 在分析完成后新增触发判断:当未检出风险时,允许进入跨文件补全流程。
  • 原始版本先支持file模式;后续修复补上selection模式(当上下文已扩到全文仍无风险时也触发)。
  • 现实代码中漏洞路径常跨文件,仅看当前文件可能“无结论”;需要用户确认后继续扩展分析范围。

影响到的用户流程

  • Analyze Current File无风险时:可弹出“是否跨文件补全”提示。
  • Analyze Selection且上下文已扩到全文仍无风险时:同样可触发跨文件提示。

关键代码

if ( shouldOfferCrossFileCompletion({ mode, language, responseJson, useExpandingContext }) ) { await maybeRunCrossFileContextCompletion({ editor, document, output, requestId, backendUrl, timeoutMs, workspaceRoot }); }
新增跨文件补全主函数

改动内容

  • 新增maybeRunCrossFileContextCompletion(...)
    • 先弹窗询问是否同意跨文件补全;
    • 同意后定位相关文件;
    • 若未找到相关文件则友好提示;
    • 找到后逐个检查并汇总结果。
  • 保持“用户可控”的分析体验,避免自动打开大量文件造成打扰。

影响到的用户流程

  • 从“一次分析结束”升级为“可继续深挖调用链”的两阶段分析。

关键代码

const picked = await vscode.window.showInformationMessage( `[CodeGuard 导师] 当前文件未发现明确漏洞。是否进行跨文件上下文补全,自动定位并检查被调用文件?请求编号:${args.requestId}`, { modal: false }, agree, decline ); if (picked !== agree) { args.output.appendLine(`[CodeGuard 导师] [跨文件补全] 用户取消跨文件检查。请求编号:${args.requestId}`); return; }
新增跨文件关联发现与逐文件分析

改动内容

  • 新增findRelatedPythonFiles(...)
    • 解析当前文件调用标识;
    • 结合import/from ... import ...推断被调用模块;
    • 解析到文件路径并去重。
  • 新增runCrossFileAnalysis(...)
    • 自动打开相关文件;
    • 调用后端继续分析;
    • 记录命中风险文件。
  • 当前 MVP 尚未接入完整跨文件污点引擎,先用“导入关系 + 调用痕迹”的轻量方式提升发现能力。

影响到的用户流程

  • 用户同意后,插件会自动跳转并检查关联文件,最后返回“检查数 / 命中数 / 首条风险摘要”。

关键代码

for (const filePath of args.relatedFiles) { const uri = vscode.Uri.file(filePath); const doc = await vscode.workspace.openTextDocument(uri); await vscode.window.showTextDocument(doc, { preview: true, preserveFocus: false }); const payload: AnalysisRequest = { mode: "file", language: normalizeLanguage(doc.languageId), file_path: doc.uri.fsPath, code: doc.getText(), workspace_root: args.workspaceRoot }; const response = await postAnalyzeRequest(args.backendUrl, payload, args.timeoutMs); if (responseHasRisks(response)) { riskHits.push({ filePath, response }); } }
上下文扩展元数据结构化(为触发条件服务)

改动内容

  • annotateExpansionResult(...)中新增_codeguard_context_expansion_meta(结构化字段),例如stopped、最终窗口行号、迭代次数。
  • 新增shouldOfferCrossFileCompletion(...),以结构化字段判断selection模式是否“已扩到全文”。

为什么这样改

  • 避免依赖中文文案字符串判断状态,提升逻辑稳定性和可维护性。

影响到的用户流程

  • selection场景的跨文件提示更准确,避免漏触发。

关键代码

return { ...base, _codeguard_context_expansion: note, _codeguard_context_expansion_meta: { iterations: meta.iterations, final_start_line: meta.finalStart1Based, final_end_line: meta.finalEnd1Based, total_lines: meta.totalLines, stopped: meta.stopped } };
if (args.mode === "selection" && args.useExpandingContext) { const meta = args.responseJson._codeguard_context_expansion_meta; const stopped = (meta as Record<string, unknown>).stopped; return stopped === "full_file"; }

3. 本次新增清单

  • 新增跨文件上下文补全入口(无风险后的二次确认)。
  • 新增 Python 关联文件推断(导入关系 + 调用名匹配)。
  • 新增自动打开并分析相关文件流程。
  • 新增跨文件结果反馈(命中与否、命中文件)。
  • 新增上下文扩展结构化元数据用于稳定触发判断。

4. 验证建议

  1. 在 Python 文件执行Analyze Current File,确保“无风险”后弹出跨文件补全提示。
  2. Analyze Selection中选择短片段,走到“扩到全文仍无风险”,确认也会弹提示。
  3. 点击同意后,观察是否自动打开相关文件并输出跨文件检查日志。
  4. 检查git status:不应再出现.venv__pycache__*.pycout/extension.js(.map)的新跟踪变化。

5. 风险与边界说明

  • 当前跨文件定位是“轻量启发式”(import + 调用名),非完整调用图,可能存在漏召回或误召回。
  • 当前只在 Python 主线上启用该能力,符合项目 MVP 范围。
  • 若后续扩展到项目级扫描,建议将此流程下沉到后端统一做跨文件图分析。

6.新增功能截图

还有使用的测试代码(比较简陋,先跑通了最简单的方案,后面拿我原来的实验代码测试查找效果)

test.py没变化,可以参考上篇博客(个人博客3)

新增一个文件newfiletest.py

这里可以看到输出还有些问题,有些地方写的不够清楚,给的改动建议也太宽泛,后面需要再改改。下一篇应该是完善博客3和博客4的功能,之前的代码已经与主分支合并了,新代码依旧明天找个时间推送到git。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 20:40:21

Winhance中文版:让Windows系统优化变得像火箭一样简单快速

Winhance中文版&#xff1a;让Windows系统优化变得像火箭一样简单快速 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhanc…

作者头像 李华
网站建设 2026/4/25 20:28:19

告别RNN和CTC:用SVTR这个纯视觉Transformer模型,搞定中英文OCR又快又准

SVTR&#xff1a;用纯视觉Transformer重塑OCR技术格局 当我们在手机上扫描文档、在街头识别广告牌文字、或是处理银行票据时&#xff0c;背后都依赖于OCR&#xff08;光学字符识别&#xff09;技术的支撑。传统OCR系统如同一个精密但笨重的工厂流水线——先用卷积神经网络&…

作者头像 李华
网站建设 2026/4/25 20:26:20

别再手动点菜单了!用C# NXOpen批量处理UG/NX部件文件(附完整源码)

工业级NX部件自动化处理&#xff1a;C# NXOpen全流程开发指南 在机械设计与制造领域&#xff0c;UG/NX作为主流的三维CAD/CAM/CAE软件&#xff0c;每天需要处理大量部件文件(.prt)。当面对数百个需要统一修改或检查的模型文件时&#xff0c;传统的手动操作不仅效率低下&#xf…

作者头像 李华