命令行版本 cursor: AI 辅助降圈,半自动化工具设计。

命令序列

usage: agc [-h] [--init INIT] [--choose CHOOSE] [--clean] [--show] [--comment]
           [--check] [--compile] [--commit COMMIT] [--reset] [--push]
           [--git-commit GIT_COMMIT] [--list] [--pull-request PULL_REQUEST]

CCN Sample Management

optional arguments:
  -h, --help            show this help message and exit
  --init INIT           Initialize session and CCN sample with sample index
  --choose CHOOSE       Choose a CCN sample with sample index
  --clean               Clean CCN samples
  --show                Show the chosen CCN sample
  --comment             Add comments to the chosen CCN sample
  --check               Check cyclomatic complexity of the chosen CCN sample
  --compile             Compile the chosen CCN sample
  --commit COMMIT       Commit the compiled CCN sample with a message
  --reset               Reset the session
  --push                Push changes to remote repository
  --git-commit GIT_COMMIT
                        Specify a git commit for the --show command
  --list                List all cyclomatic complexity changes
  --pull-request PULL_REQUEST
                        Add pull request success tag (0/1)

核心提示词

prompt_comment = (
        "// 请忘记历史记录\n"
        "// 处理如下的函数,核心目标:降度圈复杂度,要求:\n"
        "// 1. 前处理\n"
        "//   1.1. 提取【目标函数】名字,例如 foo_bar; \n"
        "// 2. 拆分函数任务: 拆成多个子函数, 每个子函数的圈复杂度小于20;\n"
        "//   2.2. 声明一个POD风格的 函数名+State的结构体,结构体的名字采用驼峰风格, 在多个子函数之间共享状态。\n"
        "//        State做为子函数的第1个参数,State不要生成构造函数。\n"
        "//        子函数是自由函数,不要作为类的成员函数,子函数名名字风格:{目标函数名}_{子函数名}, 例如 foo_bar_sub_func;\n"
        "//        强调:子函数内用到的原目标函数所在的类的成员变量(一般以'_'作为后缀,例如 xxx_ ),如果不在State里,必须作为子函数的参数变量传递,避免子函数找不到它\n"
        "//   2.3. 每个子函数都返回int变量,用来处理被拆分代码里含有提前返回的逻辑。\n"
        "//        每个子函数调用都遵循: if(sub_method(..)!=0){ return ..} 的方式,处理其他返回的情况。\n"
        "//   2.4. 拆分子函数的策略\n"
        "//     2.4.1. 如果有c++lambda函数,不改变名字,作为一个独立的子函数拆分,避免其他子函数里调用的时候找不到这个lambda函数; \n"
        "//     2.4.2. 如果函数代码有已有的分段注释,尝试按照注释切割分段拆子函数,注意考虑局部变量的内聚性; \n"
        "//     2.4.3. 大段的if-else-if逻辑, 如果是每个分支的逻辑都比较复杂, 拆分成多个子函数, 否则将这段逻辑拆分出一个子函数; \n"
        "//     2.4.4. 大段的循环语句,拆到子函数; 大段的switch-case,把每个case拆一个字函数,整个switch-case再套一个子函数;\n"
        "//     2.4.5. 函数内多段类似处理的代码拆成多个子函数; \n"
        "//     2.4.6. 子函数的参数如果在子函数内会修改,不要加const限制; \n"
        "//     2.4.7. 子函数的参数类型,如果是来自父函数的参数,类型保持一致; \n"
        "//   2.5 除了原函数外的其他代码,前后加开始和结束的注释,注释内容为:// {函数名} start/end\n"
        "// 3. 检查\n"
        "//   3.1. 确保C++代码可读性, 遵守Google C++编码规范,长度超过120要注意换行。\n"
        "//   3.2. 确保代码可以编译通过,运行正确,圈复杂度降低\n"
        "// 4. 重构后删除这段注释\n"
    )

工作流

准备环境

安装 agc

模块预编译

初始化,扫描圈信息

选择一个待降圈的函数

自动插入降低圈复杂度的注释

框选代码,调用GPT执行降圈

保存并检查降圈前后的圈复杂度对比

查看代码变动

循环:修复-回车-编译

将错误丢给GPT,修复

是否满意

提交代码,推送到仓库

重置并重新开始

提交 pull-request,触发门禁

记录pr结果

继续下一个函数

展示多个commit的变动

命令行工作流

准备环境

安装 agc

make prepare+makebuild

agc --init 1

agc --choose 20

agc --comment 'xxx'

框选代码,调用GPT执行降圈

agc --check

agc --show

agc --compile

将错误丢给GPT,修复

是否满意

agc --commit , agc --push

agc --clean

提交 pull-request,触发门禁

agc --pull-request 1 --git-commit xxx

继续下一个函数

agc --list

posted @   ffl  阅读(116)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示