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

news/2025/1/11 4:49:29/文章来源:https://www.cnblogs.com/math/p/18665041/agc

命令序列

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 Managementoptional 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_COMMITSpecify a git commit for the --show command--list                List all cyclomatic complexity changes--pull-request PULL_REQUESTAdd 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")

工作流

graph TDA[准备环境] --> B[安装 agc]B --> C[模块预编译]C --> D[初始化,扫描圈信息]D --> E[选择一个待降圈的函数]E --> F[自动插入降低圈复杂度的注释]F --> G[框选代码,调用GPT执行降圈]G --> Z[循环: 修改,回车编译]Z --> H[保存并检查降圈前后的圈复杂度对比]H --> I[查看代码变动]I --> J[交互式编译改动后的文件,直到编译通过]J --> K{是否满意}K -->|是| L[提交代码,推送到仓库]K -->|否| M[重置并重新开始]L --> N[提交 pull-request,触发门禁]N --> Q[记录pr结果]Q --> O[继续下一个函数]O --> EM --> EL --> P[展示多个commit的变动]

命令行工作流

graph TDA[准备环境] --> B[安装 agc]B --> C[make prepare+makebuild]C --> D[agc --init 1]D --> E[agc --choose 20]E --> F[agc --comment 'xxx']F --> G[框选代码,调用GPT执行降圈]G --> Z[agc --compile]Z --> H[agc --check]H --> I[agc --show]I --> J[交互式编译改动后的文件,直到编译通过]J --> K{是否满意}K -->|是| L[agc --commit "", agc --push]K -->|否| M[agc --clean]L --> N[提交 pull-request,触发门禁]N --> Q[agc --pull-request 1 --git-commit xxx]Q --> O[继续下一个函数]O --> EM --> EL --> P[agc --list]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867582.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tensorflow2.0自定义层

Tensorflow2.0自定义层 tensorflow2.0建议使用tf.keras作为构建神经网络的高级API。 也就是说,大多数TensorFlow API都可用于eager执行模式。 from __future__ import absolute_import, division, print_function, unicode_literals !pip install -q tensorflow==2.0.0-alpha0…

推荐4本书《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》、《AI芯片开发核心技术详解》

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

arcpy环境搭建

背景 在ArcMap和ArcGIS Pro中,都可以使用arcpy,但是代码都要在相应环境中运行才行。 环境选择 1.在软件安装目录中运行arcpy 对于ArcMap中,可以直接在以下目录中运行arcpy代码: C:\Python27\ArcGIS10.4 对于ArcGIS Pro,可以在以下目录运行arcpy代码: C:\Program Files\Ar…

arcpy搭建环境

背景 在ArcMap和ArcGIS Pro中,都可以使用arcpy,但是代码都要在相应环境中运行才行。 环境选择 1.在软件安装目录中运行python 对于ArcMap中,可以直接在以下目录中运行arcpy代码: C:\Python27\ArcGIS10.4 对于ArcGIS Pro,可以在以下目录运行arcpy代码: C:\Program Files\A…

20250110-FortuneWheel 攻击事件:竟然不设滑点,那就体验一下 Force Investment 吧

背景信息 攻击交易:https://app.blocksec.com/explorer/tx/bsc/0xd6ba15ecf3df9aaae37450df8f79233267af41535793ee1f69c565b50e28f7da 漏洞合约:https://vscode.blockscan.com/56/0xc86A50d30c2da607DE91375f363DeDFb3086b9D4 FortuneWheel 合约实现了幸运轮盘竞猜功能,合约…

在Ubuntu 20.04上安装Qt 5.15.0

在Ubuntu 20.04上安装Qt 5.15.01 安装必要的依赖项:sudo apt-get install build-essential \libgl1-mesa-dev \libglu1-mesa-dev \libegl1-mesa-dev \libgles2-mesa-dev \libxrandr-dev \libxext-dev \libxtst-dev \libxrender-dev \libxkbfile-dev \libsqlite3-dev \libssl-…

vscode上配置docker 宝塔环境的xdebug环境,经历过的哪些坑(macbook版)

在macbook中配置vscode对docker中宝塔的php代码进行断点设置的常见排查方式先说配置的几个逻辑: 1. vscode是要通过php debug插件启动9003监听端口 2. docker的宝塔启动xdebug后,是将运行信息推送到vscode宿主的9003端口;这里有个难点,docker内的宝塔和vscode不在一个本地,…

[第五空间2019 决赛]PWN5 1

先checksec一下,发现开启了NX和canary保护看一下ida反汇编,发现输入全都有限制,无法造成造成栈溢出。代码最后会与随机数判断,若相等会执行system。我们看到有printf(buf),这可以造成格式字符串漏洞。 如果我们用格式字符串修改随机数的值,再将输入一样的值就可以执行我…

身份鉴权(PHP)

引子:上一章主要对PHP中全局变量做了介绍,其中```$_COOKIE```、```$_SESSION```常常在身份鉴权中被使用。而本章则是由代码具体聊聊在PHP Web中开发者所常使用的身份鉴权方式。免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!…

UE4.27, 揣摩源码, 网络同步 (三) RPC

6. RPC6.1. RPC是网络同步的一部分,全称Remote Procedure Call。属性同步只能从服务端向客户端单向传递信息,而RPC可以双向传递消息  6.2. 类型6.2.1. Server调用,Actor所属的Client执行    6.2.2. Client调用,Server执行    6.2.3. Server调用,Server和所…

Discharging Method

Firstly, we introduce Euler Formula.When we use Euler formula, we often need its transformations.Secondly, we design some discharging rules based on Euler Formula.Finally, we give the principle of Discharging Method in proofs.

2024.12.16(SpringBoot知识点总结)

4.2 配置文件与配置类的属性映射方式 4.2.1 使用注解@Value映射 我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上 例如: application.properties配置如下: person: name: zhangsan age: 18 1 2 3 或者,application.yml配置如下: person: name: …