vscode-ai-code-marker
一个用于“统计与可视化 AI 生成代码”的 VS Code 扩展。以“侧车文件 + 装饰”的方式标识 AI 代码,不污染源码,适配 Cursor/VS Code 的日常开发习惯。
AI 代码的定义(口径)
- 以“最后修改者”为口径:当某一行的最后一次修改行为判定为 AI 生成时,这一行即被定义为 AI 代码。
- 存量代码不追溯;仅对新增或变更的代码行进行判定与标记。
工作方式概览
- 标记数据存储在侧车文件
.ai-tracker/markers.json 中,编辑器内通过彩色标签装饰展示,不写入源码。
- 在接受补全、粘贴、键入等事件中,基于启发式与负样本过滤,实时为新增行打标或为被人工修改的行去标。
- 标记随文档编辑偏移而移动(插入/删除),不会因移动/格式化而失真。
打标与去标规则(完整版)
以下说明涵盖“判定来源(AI/人工)”“何时打标/去标”“何时仅做平移”与“永不处理”的完整口径。
判定来源(AI/人工)
以下操作一律判定为“人工”,不打标(或仅做去标/平移):
- 连续敲键输入的小段文字(正常手打)
- 回车/缩进(只产生换行或空白)
- 粘贴(剪贴板来的内容)
- 撤销/重做(Ctrl+Z / Ctrl+Y)
- 行移动(剪切后粘贴、上下移动行)
- 格式化/整理导入/统一缩进等代码样式调整
- 删除/新增空行
- 仅增删空格或 Tab
只要不属于上面这些“人工”场景,且出现了“突然冒出的一大段或多行内容”,就视为 AI 插入并打标;尤其是距离上一次敲键已经过了一会儿(例如 > 1s)时。
补充说明:如果你在“已打标的行”里改了非空白字符,这一行会被去标(因为最后修改者变成了你)。
打标(新增 AI 行)
- tab按键接受AI代码
- Agent模式下接受AI代码
去标(移除 AI 标记)
- 单行编辑:
- 删除/插入/替换若包含任一“非空白字符”,去掉该行标记;
- 若仅为空白(空格/Tab),不去标。
- 跨行编辑:
- 从起始行“行尾”开始跨行删除(多为合并换行),起始行视为未改动,不去标;
- 中间完整删除的行:若本行原本有标记,随行被删自然移除;
- 结束行:如果删除到结束行“行首”,不去标;若删除了结束行的“前缀内容”且包含非空白,则去标结束行。
- 单行“替换为纯空白”:不去标(等价为空白编辑)。
仅做平移(不打标/不去标)
- 撤销/重做(Undo/Redo):仅根据内容变更做行号平移,不进行打标与去标判定。
- 删除/新增“纯空行”:下方标记整体上移/下移,标记本身不变化。
- 行移动:识别为移动,标记随文本移动。
永不处理(直接忽略)
- 侧车文件目录
.ai-tracker/ 内的所有文件;
- 不在当前活动编辑器的文档(避免异步涟漪影响)。
- 插入包含 N 个换行:所有“在变更行号之后”的标记行号 +N;
- 跨行删除(startLine→endLine):所有“在 endLine 及之后”的标记行号 −(endLine − startLine);
- 单行内编辑:行号不变;
- 删除空行(上方/下方):仅产生 ±1 的行号偏移,不改变是否打标的属性。
典型场景举例
安装与使用
- 安装依赖
npm install
- 编译
npm run compile
- 运行测试(可选)
npm run test
- 在 VS Code/Cursor 中调试运行该扩展
配置项(可选)
统计与产出
- 侧车文件
.ai-tracker/markers.json 为统计数据源,配合 MR/PR Diff 可得 AI 占比等指标。
- 标记可人工纠偏(选区去标/加标后续可扩展为命令)。
说明
- 本扩展在 Cursor/VS Code 环境中工作良好;不依赖 Tab 拦截。
- 打标逻辑采用启发式与负样本过滤结合,追求“低误判 + 不干扰开发”。
| |