这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

SmartCode AI编码助手

SmartCode AI编码助手是一款基于人工智能的编码助手,能够帮助开发者提高编码效率,减少重复劳动,提升代码质量。

1 - JetBrains插件

SmartCode 为使用 JetBrains 全系列IDE的开发者提供的简单易用的AI编程助手插件,支持IntelliJ IDEA, PyCharm, GoLand, Rider, PhpStorm, WebStorm和Andriod Studio全系列JetBrains IDE。提供多种开发语言,Java、Kotlin、Python、Go、C#等的支持。提供智能代码补全、智能代码生成、智能代码重构、智能代码导航、智能代码分析等功能,帮助开发者提升编码效率,降低编码成本,提高代码质量。

1.1 - 代码补全

SmartCode AI编码助手是一款基于人工智能的编码助手,能够帮助开发者提高编码效率,减少重复劳动,提升代码质量。

单行补全

单行补全模式 可用于属性生成、参数补全、变量赋值 等场景。 单行补全 单行补全

多行补全

在实际开发场景中,特别是在写一个新的方法/函数时,每个开发人员的诉求往往是不同的。

  • 某些场景下开发人员希望给一个方法名字,或者一个简单的注释补全工具就可以给我们自动生成整个方法的业务逻辑。
  • 某些场景下我们希望给一个方法名字,然后补全工具在方法里能够逐行的给予补全,这样开发人员可以进行快速的修正,然后补全插件根据修正后的内容,继续给予补全建议。那么这种场景下就需要具备单行/多行补全的切换能力。 通过单行/多行补全开发人员可以根据自己的场景快速的切换补全模式。实现高效开发。
点击右下角的 补全模式

补全模式

点击后,S(Single Line)会切换为M(MultiLine),如下图所示:

多行补全

按tab键接受代码,继续回车,如下图所示:

多行补全

方法级代码补全
  • 输入注释

方法级补全 方法级补全

手工触发

插件默认是自动触发补全,有时候开发人员在进行代码编写时,不管是开发人员在打字时、空格时、回车时默认都会触发代码自动补全。这样很大程度上会干扰开发人员的正常开发,所以很多开发人员希望关闭自动补全,而是通过手工快捷键触发的方式来进行补全,这样开发人员可以真正做到随叫随到的补全效果。

设置手工触发补全
  • 点击修改设置,如下图所示: 补全模式

  • 自动补全 | 改为 “关闭”: 补全模式

  • 设置代码补全触发快捷键:Keymap | Trigger inline Completion 补全模式

  • 点击 Add keyboard Shortcut 补全模式

  • 设置完成后,我们测试是否可以收工触发代码补全。回到PhotoController.java文件,并输入注释以及部分代码。点击回车,并按你设置的代码补全触发快捷键【Control+Comand+T】,查看代码补全效果。 补全模式

1.2 - 代码对话

自动识别用户IDE环境中的代码上下文,结合AISE后台提供的RAG能力,提供实时代码建议。

按 Tab 或单击“接受”以应用代码建议。 代码建议

SmartCode支持3种代码片段选择方式,如 代码解释 中所示,分为以下入口:

  1. 右键快捷菜单
  2. CodeLens
  3. #selection 变量

代码解释

代码解释能力允许开发人员选择代码片段,通过大模型对代码进行自然语言解释。 下图:使用右键快捷菜单调用 代码解释 特性 代码解释

下图:使用codelens(方法体悬浮菜单)方式调用 代码解释 特性 codelens codelens

下图:使用 #selection 变量自定义 代码解释 提示词 election 变量

代码评审

使用右键快捷菜单调用 代码评审 特性 代码评审

生成测试

根据用户选择代码自动生成单元测试用例,并提供较为丰富的测试覆盖能力。 生成测试

生成注释

为方法体提供顶部注释生成能力 生成注释

代码检查

允许用户提供自定义代码检查规则,通过快捷方式触发。 代码检查

多轮对话

支持用户与AI进行连续、多轮的技术对话交流,对话时保持上下文连贯性。 下图展示了多轮对话能力,用户在完成前一轮对话后,可以通过文字语意,比如:这段/以上/前面的,这样的说法提示SmartCode关注前文内容,保持对话的连贯性。 代码检查

2 - Visual Studio插件

SmartCode 为使用 Visual Studio(2019、2022)IDE的开发者提供的简单易用的AI编程助手插件,基于华为盘古研发大模型的智能开发助手,重塑了智能化软件研发的新范式,让开发者更加聚焦业务创新,事半功倍。插件基于智能生成、智能问答两大核心能力,覆盖了代码生成、研发知识问答、单元测试用例生成、代码解释、代码注释、代码调试、代码翻译、代码检查等开发场景,释放软件研发生产力。

应用场景

代码智能推荐与补全

  • 高效编写新代码:在编写代码时,代码助手能够基于对代码上下文的理解,实时推荐相关的代码片段、函数、变量名等。例如,当用户在编写一个循环结构时,它会推荐常用的循环语法和相关函数,帮助用户快速完成代码的编写,提高编码速度和准确性。
  • 减少重复劳动:对于一些常用的代码模式,如条件判断、异常处理等,代码助手可以自动补全代码,避免重复编写相同的代码,节省时间和精力。
  • 多行代码推荐:除了单行代码补全,代码助手还支持多行代码推荐。例如,在编写一个复杂的算法或函数时,它可以根据用户的意图和上下文,推荐完整的代码块,帮助用户快速构建代码逻辑。

代码快速熟悉与理解

  • 功能与逻辑快速理解:当接手新的项目或研究开源代码时,代码助手可以从功能、目的、使用场景和主要逻辑多个维度帮助用户快速理解代码、复杂数据结构与算法分析。例如,在阅读一个复杂的系统代码时,代码助手可以详细解释其功能和实现逻辑。
  • 解读非标准化代码和注释:有时候,用户可能会遇到一些非标准化的代码或没有详细注释的代码。代码助手可以解读这些代码,提供通俗易懂的注释和说明,帮助用户理解代码的意图和功能。例如,在一些历史遗留代码中,可能存在一些晦涩难懂的代码,代码助手会解释这些代码的功能、目的、使用场景和主要逻辑。

代码调试与优化

  • 快速定位代码错误:在代码运行报错时,代码助手通过分析堆栈信息和代码逻辑,能够快速定位代码中的错误和异常。例如,当运行代码报错时,在报错处单击代码助手图标,它会根据堆栈信息自动识别出可能导致问题的代码行或模块,并提供相关的上下文信息和建议,帮助用户快速找到错误根源,节省调试时间。
  • 性能优化建议:代码助手能够分析代码的性能瓶颈,提供优化建议。例如,当用户检查代码时,它会识别出可能导致性能问题的代码片段,如低效的循环、不必要的计算等,并建议用户使用更高效的算法或数据结构来优化代码,提高程序的运行速度和响应能力。
  • 代码可读性与可维护性优化:代码助手可以帮助用户提高代码的可读性和可维护性。例如,它会根据代码的结构和逻辑,建议用户对代码进行优化,如简化复杂的逻辑、提取重复的代码片段、增强注释和文档的清晰度等,使代码更加简洁、易读和易维护,降低后续代码修改和扩展的难度。

单元测试用例生成

  • 功能验证测试用例生成:在编写新功能或修改现有功能时,代码助手可以基于代码实现自动为功能模块创建单元测试用例。例如,当用户编写一个处理用户登录的函数时,它会生成涵盖正常登录、无效用户名、错误密码等各种情况的测试用例,确保函数行为的正确性。
  • 边界条件测试用例生成:代码助手能够识别代码中的边界条件,比如数组为空、字符串为空或达到最大长度等情况,并自动生成相应的测试用例。这些测试用例有助于检测代码在极端情况下的健壮性,提前发现潜在的边界问题。
  • 异常处理测试用例生成:在开发过程中,异常处理是容易被忽略但又非常关键的环节。代码助手会根据代码逻辑,自动为可能引发异常的代码路径生成测试用例,如模拟网络错误、数据库连接失败等场景,确保代码能够正确捕获和处理异常。
  • 高质量测试用例生成:代码助手能够分析代码逻辑和业务需求,生成既覆盖正常情况又兼顾异常场景的高质量测试用例。例如,对于一个电商网站的购物车功能,它会生成测试用例来验证添加商品、更新商品数量、删除商品等操作在不同条件下的正确性,以及应对库存不足、价格变更等异常情况的能力。

功能特性

  • 支持多种编程语言,并能根据开发者键入的函数签名和注释自动生成函数体。
  • 支持根据行级注释或代码上下文信息自动生成与描述场景匹配的代码。
  • 可根据开发者当前光标位置的前后语句片段进行代码填空和补全。
  • 支持跨文件生成与任务相关的代码。
  • 支持从功能、目的和实现逻辑三个维度对代码进行解释说明。
  • 可根据用户需求内容生成行级、函数级注释信息,能够帮助开发人员高效补充代码注释。
  • 可根据输入的代码和错误信息,得到错误原因并给出修复方案。
  • 支持生成高覆盖率的单元测试代码,包括单个方法和类级别的单元测试框架代码。
  • 可根据提问来检索研发相关知识,提供答案。
  • 支持对代码进行函数级检查功能,可及时、主动发现编码缺陷,提升代码质量和安全性。
  • 支持代码翻译,可以指出不同语言关键元素差异,帮助开发者适应新环境

2.1 - 使用代码助手生成代码

代码助手支持通过快捷键在IDE中触发根据代码上下文生成代码,也可以在研发对话窗口使用代码注释或自然语言描述生成代码。

使用快捷键通过上下文生成代码

1、打开一个c#文件,将编辑光标移动至需要生成代码位置,按下快捷键“Alt+C”。

生成代码

2、代码助手将根据上下文生成代码,按下Tab键可接受代码助手生成代码内容。

生成代码

通过问答生成代码

1、在研发对话窗口输入框中输入生成代码需求,如:“C#冒泡排序”,单击研发对话窗口输入框右下角生成代码按钮发送。

2、代码助手将在研发对话窗口中生成Java冒泡排序代码。

生成代码

3、单击输入框右上角生成代码可以将对话内容归档并新建会话,单击研发对话窗口右上角生成代码可以查看历史提问。

4、对代码助手生成的代码块,可以进行如下操作:

  • 单击生成代码复制代码。
  • 单击生成代码在当前光标位置插入代码。
  • 单击生成代码将代码另存为文件。

5、对代码助手回答的内容,可以进行如下操作:

  • 单击生成代码可以针对提问重新生成结果。
  • 单击生成代码可以复制回答内容。
  • 单击生成代码对回答满意。
  • 单击生成代码对回答不满意。

2.2 - 使用代码助手解释代码

如果开发人员对代码存在疑惑,可以使用代码助手代码解释功能自动分析代码的结构和逻辑,对代码功能进行解释,帮助开发人员理解代码的功能和实现方式。

通过问答功能解释代码

1、选中示例代码中“true”方法代码,单击右键,选择菜单“CodeArts 盘古助手:Add to Chat”或使用快捷键Ctrl+Shift+X将代码添加至研发对话窗口。

2、在研发对话窗口输入框中输入“/”,在弹出菜单中选择“/explain”,或单击研发对话窗口中“Code Explain”,单击生成解释发送。

3、代码助手将对代码进行解释,通过文字描述帮助开发人员理解代码。针对本次选中的代码,代码助手给的解释是:这段代码的主要功能是对一个整型数组进行排序。它使用了冒泡排序算法,这是一种简单但效率较低的排序算法。

生成解释

2.3 - 使用代码助手注释代码

代码开发完成后,使用代码助手代码注释功能可以为代码添加详细的注释说明,包括函数、变量、类的作用、参数、返回值信息,帮助开发人员更好地理解代码逻辑和实现方式,提高代码可读性和可维护性,同时也方便后续的代码维护和修改工作。

注释代码

1、选中示例代码,单击右键,选择菜单“CodeArts 盘古助手:Add to Chat”或使用快捷键Ctrl+Shift+X将代码添加至研发对话窗口。

2、在研发对话窗口输入框中输入“/”,在弹出菜单中选择“/comment”或单击研发对话窗口中“Code Comment”,单击生成注释发送。

3、代码助手将对代码进行注释,通过文字描述帮助开发人员理解代码。

生成注释

2.4 - 研发知识问答

在代码助手研发对话窗口中,用户可以随时提出问题,而系统则会快速检索研发相关知识,并提供匹配答案,从而帮助用户高效地解决问题。

研发知识问答

1、在研发对话窗口中输入研发相关问题“生成一段读取文本内容代码”。

2、代码助手将使用Python或其他语言生成一段读取文本内容的代码。

生成注释

2.5 - 常见问题

在使用代码助手过程中遇到的常见问题及处理方式。

2.5.1 - 代码助手提示“代码生成暂无结果”

使用代码助手生成代码时,研发对话窗口或IDE右下角提示“代码生成暂无结果”

问题现象

使用代码助手生成代码时,研发对话窗口或IDE右下角提示“代码生成暂无结果”。

可能原因

代码助手对当前代码上下文生成代码暂无结果。

解决办法

重新触发代码生成或切换至代码中其他位置触发代码生成。

2.5.2 - 使用代码助手时提示“请登录后再使用”

问题现象

使用代码助手功能时,研发对话窗口或IDE弹出提示“请登录后再使用”。

可能原因

  • 未使用账号登录。
  • 原有登录状态已过期。

解决办法

使用研发对话窗口登录账号,或通过系统菜单“扩展”中的“登录”子菜单进行登录账号。

2.5.3 - 代码助手提示“授权已经过期”

使用代码助手功能时,研发对话窗口上方提示“您的试用已经过期,请联系客户成功处理。”或“您的试用有效期已不足x天,请联系客户成功处理。”

问题现象

  • 使用代码助手功能时,研发对话窗口上方提示“您的试用已经过期,请联系客户成功处理。”。
  • 使用代码助手功能时,研发对话窗口上方提示“您的试用有效期已不足x天,请联系客户成功处理。”。

可能原因

  • 您的使用许可已到期。
  • 您的使用许可只剩x天有效期。

解决办法

通过华为云商店重新购买插件使用许可,或联系华为云商店客服处理。

3 - 支持使用#变量

对话变量用于在对话时引用IDE中的代码内容,为用户提供更加灵活的提示词组织方式。本次提供3个对话变量:

  • #selection: 用于引用当前激活的编辑器中已经选中的代码
  • #editor:用于引用当前激活编辑器中的任何代码块
  • #file:用于选择文件

通过使用 对话变量 开发者可以实现一些之前不容易实现的提示词,比如:开发者可以通过以下提示词引用某个文件内容,并要求AI将所引用的代码作为参考进行生成,示例如下:

  • 请根据这个文件中的内容 #file:BankTransactionController.java 生成API文档,并使用标准的markdown格式输出。
  • 请参考 #file:Dockerfile 编写一个 docker-compose.yaml 并将对外端口设置为8090,并将日志映射到本地路径中
  • 请对 #selection 进行分析,重点关注其中可能存在的代码安全问题,并提供解决方案和示例代码 用户也可以组合以上变量,构建出更加复杂的提示词,比如:
  • 请参考 #file:api_reference.yaml,修正以下代码中的接口调用逻辑 #selection
  • 请参考 #editor:model.py77-89,生成10个单元测试,尽量覆盖各种场景

各类变量的具体调用方式

  1. 打开SmartCode,在对话输入框点击“#”或者输入“#”,调起#变量

    调起#变量

  2. #selection变量用于在提示词中引入当前活动编辑器中被选中的代码内容

    • 选择#selection变量,选择代码,回车,对已选代码进行回复

      调起#selection变量 调起#selection变量

    • 选择#selection变量,未选择代码,回车会提示:没有选择代码

      调起#selection变量

  3. 使用#editor变量,用于在当前编辑中选择不同的代码库,系统会提示选择类、方法等不同的代码块

    • 选择#editor变量,弹窗显示提取出的代码块

      调起#editor变量 调起#editor变量

    • 选择#selection变量,未选择代码,回车会提示:没有选择代码 调起#selection变量 调起#selection变量

  4. 使用#file变量可以引入当前项目中的任意文件,包括已经开启和未开启的。

    调起#file变量 调起#file变量