「CodeFuse」如何在PHPStorm中使用CodeFuse完成快速排序算法的编写

2023-10-26 19:15:17 浏览数 (2)

图片来源:开源中国 https://my.oschina.net/u/6942768/blog/10122694

简介

CodeFuse 是一款为国内开发者提供智能研发服务的产品,该产品是基于蚂蚁集团自研的基础大模型进行微调的代码大模型。CodeFuse 具备代码补全、添加注释、解释代码、生成单测,以及代码优化功能,以帮助开发者更快、更轻松地编写代码。

功能特性

CodeFuse 提供多个 IDE 插件版,支持在 10 款 IDE 中使用,包括支付宝小程序云云端研发、Visual Studio Code,以及 JetBrains 系列的 IntelliJ IDEA、PyCharm、WebStorm、GoLand、CLion、DataGrip、PhpStorm 和 RubyMine。此外,CodeFuse 支持 40 多种编程语言,包括 PHP、C 、Java、Python、JavaScript 等,目前 CodeFuse 针对 Java 与 Python 的代码生成质量较高。

「CodeFuse 支持的功能如下表」

功能

说明

代码补全

基于海量数据提供实时地代码补全服务,包括行内补全(单行补全)和片段补全(多行补全)。

添加注释

智能为选定的代码生成注释,目前在整个函数级别的生成注释效果较好。

解释代码

智能解析代码意图,为选定的代码生成解释,辅助阅读并理解代码。

生成单测

在写完业务逻辑后,为选定的代码生成单测,即可智能生成具备业务语义的测试用例,从而提升问题发现的效率。

代码优化

基于大模型的代码理解能力和静态源码分析能力,CodeFuse 支持对选定的代码片段进行分析理解并提出优化、改进建议,还能直接基于改进建议生成代码补丁。

快速开始

以下将在PhpStorm IDE 插件的安装步骤和多个代码场景的使用示例,以帮助您快速使用 CodeFuse。

步骤一

下载 CodeFuse 插件安装包:https://amctats-hz.oss.cloudrun.cloudbaseapp.cn/codefuse/CodeFuse-beta-0.1.0.zip

步骤二

PhpStorm 顶部功能栏,单击 Flie【文件】 > Settings【设置】(Ctrl Alt S) 进入设置页面。在 Plugins(插件) 中选择 Install Plugin from Disk(从磁盘安装插件)

安装包进行安装

选择【桌面】选择已经下载好的压缩包 CodeFuse-beta-0.1.0.zip

步骤三

点击 CodeFuse 插件面板,进行用户登录

步骤四

登录成功

「注意:首次开通现需要去官网:https://codefuse.alipay.com/通过支付宝登录,提交申请,等申请通过后就可以进行登录使用啦!」

使用 CodeFuse 插件

使用

代码补全

代码补全功能基于海量数据提供实时地代码补全服务,包括行内补全(单行补全)和片段补全(多行补全)。目前该功能支持 Java、Python、TypeScript、JavaScript、Go 等 5 种主流编程语言的多行和单行代码补全,以及其他 40 种编程语言的单行代码补全。

单行代码补全

1、在 IDE 编辑器中创建一个 PHP 文件

2、在 PHP 文件中,CodeFuse 将能够根据代码上下文,为您键入的内容给出补全提示。例如键入以下函数名称并按下回车键,插件将给出代码补全提示。

3、如需接受代码补全建议,请按 Tab 键。

多行代码补全

插件还支持输入注释文本完成多行代码补全。例如键入以下注释内容并按下回车键。CodeFuse 会根据注释内容自动生成多行代码,生成的代码以灰色文本展示。

键入内容并按下回车键后,您可以在编辑器右下角看到内容生成的状态。

关闭自动代码补全

自动触发代码补全功能默认开启,支持在插件面板的设置中关闭此功能,以禁止自动触发单行或多行代码补全。

  • 单行代码补全:例如在编辑器中键入一个函数名称并按下回车键。
  • 多行代码补全:例如在编辑器中键入一段注释文本并按下回车键。

说明:关闭自动触发代码补全后,您仍然可以使用 Alt/Option 快捷键手动触发代码补全。

解释代码

注:目前模型的生成注释功能对整个函数级别的支持较为完善,因此推荐您优先针对函数级别生成注释。

  1. 在 IDE 编辑器中创建一个 PHP 文件。
  2. PHP 文件内选中需要解释的代码片段。
  3. 单击鼠标右键,选择 「CodeFuse:解释代码」,插件将在右侧的对话窗口中生成代码解释。

添加注释

注:目前模型的生成注释功能对整个函数级别的支持较为完善,因此推荐您优先针对函数级别生成注释。

  1. 在 IDE 编辑器中创建一个 PHP 文件。
  2. PHP 文件内选中需要解释的代码片段。
  3. 单击鼠标右键,选择 「CodeFuse:添加注释」,插件将在右侧的对话窗口中生成添加注释。

生成单测

  1. 在 IDE 编辑器中创建一个 PHP 文件。
  2. PHP 文件内选中需要生成单测的代码片段。例如为以下代码片段生成单测:
  3. 单击鼠标右键,选择 「CodeFuse:生成单测」,插件将在右侧的对话窗口中为选中的代码生成测试用例。

以下是生成的单元测试代码

代码语言:javascript复制
<?php

class QuickSortTest extends PHPUnit_Framework_TestCase {
   public function testQuickSort() {
       // 测试空数组
       $arr = array();
       $result = QuickSort::quickSort($arr);
       $this->assertEquals(array(), $result);

       // 测试只有一个元素的数组
       $arr = array(1);
       $result = QuickSort::quickSort($arr);
       $this->assertEquals(array(1), $result);

       // 测试多个元素的数组
       $arr = array(3, 1, 4, 2, 5);
       // 预期结果
       $expected = array(1, 2, 3, 4, 5);
       $result = QuickSort::quickSort($arr);
       $this->assertEquals($expected, $result);
   }
}

可以看到生成单元测试测试代码自动继承PHP单元测试框架PHPUnit_Framework_TestCase

代码优化

基于大模型的代码理解能力和静态源码分析能力,CodeFuse 支持对选定的代码片段进行分析理解,提出优化和改进建议,还能直接基于改进建议形成代码补丁,以帮助您写出更好的代码。使用代码优化的步骤如下。

  1. 在 IDE 编辑器中创建一个 PHP 文件,编写并选中一段需要优化的代码。
  2. 单击鼠标右键,选择 「CodeFuse:代码优化」,将在插件面板提供多个代码优化建议。
  1. 在插件面板,单击按照以上建议优化选中的代码,生成优化后的代码。
  1. 鼠标放置在生成的代码上,单击[|],唤起编码建议面板查看代码变更。

PS:PHPStrom插件的这里是不是有bug。没有[|]这个可替换按钮

「以下是针对建议 1 生成的代码补丁」

代码语言:javascript复制
public static function quickSort($arr)
{
    if (count($arr) <= 1) {
        return $arr;
    }
    $key = $arr[0];
    $left_arr = array();
    $right_arr = array();
    for ($i = 1; $i < count($arr); $i  ) {
        if ($arr[$i] <= $key) {
            $left_arr[] = $arr[$i];
        } else {
            $right_arr[] = $arr[$i];
        }
    }
    $left_arr = self::quickSort($left_arr);
    $right_arr = self::quickSort($right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}

「完成快速排序算法源代码」

代码语言:javascript复制
<?php

class CodeFuse {
    /**
     * 快速排序算法
     */
    public static function quickSort($arr)
    {
        if (count($arr) <= 1) {
            return $arr;
        }
        $key = $arr[0];
        $left_arr = array();
        $right_arr = array();
        for ($i = 1; $i < count($arr); $i  ) {
            if ($arr[$i] <= $key) {
                $left_arr[] = $arr[$i];
            } else {
                $right_arr[] = $arr[$i];
            }
        }
        $left_arr = self::quickSort($left_arr);
        $right_arr = self::quickSort($right_arr);
        return array_merge($left_arr, array($key), $right_arr);
    }
}

0 人点赞