前言

我们在真正开发中会用到很多的自由逻辑,那么在自有逻辑上就很难通过一次性提问来获取我们想要的结果,我们就可以通过驭码的这个神技来完成我们的业务逻辑功能,今天我就主要演示一下这个代码补全的功能。

代码智能实时补全:跨文件实时生成单行或多行代码推荐,支持灵活选择代码补全的模型引擎。

目录

前言

环境说明

功能总汇表

开启代码补全

设置说明

具体使用示例

1、快速生成代码片段

核心快捷键技能ALT+K

2、快速补全经典算法

3、实现二分查找法

其它常用快捷键

自定义快捷键

Loom模式

总结


环境说明

使用的是VSCode来做的测试,优势是可以直接在插件库中搜索到驭码CodeRider2.0来安装。如果在线安装不合适就得使用线下包引入了。

功能总汇表

这里我分析完毕文档后整理了一下,是工作能力的一个总结,觉得挺有用的呢。

功能分类 具体功能 功能说明
GitLab 工作流 处理议题(Issue) 支持在 GitLab 中管理和跟进开发任务议题,提升协作效率。
处理合并请求(MR) 辅助审查代码合并请求,优化代码评审流程,降低协作成本。
智能编程辅助 代码补全 根据上下文自动生成代码片段,提升编码速度。
代码解释 对复杂代码段生成自然语言解释,帮助理解代码逻辑。
代码注释生成 自动为代码添加规范注释,增强代码可读性。
代码修改建议 分析代码并提供优化修改方案,提升代码质量。
代码优化 自动重构代码结构,提升性能和可维护性。
单元测试生成 基于代码逻辑生成单元测试用例,保障代码稳定性。
文档与问答 GitLab 文档问答 快速检索并回答 GitLab 相关文档问题,减少信息查找时间。
自然语言对话提问 支持通过对话方式获取开发问题解答,提升沟通效率。
DevOps 赋能 智能化 DevOps 流程 整合 AI 能力到 DevOps 全流程,优化研发、测试、部署环节的自动化与协作。
多工具集成 主流 IDE 集成 支持 Visual Studio Code、JetBrains 系列、Cursor 等 IDE,无缝嵌入开发环境。
多语言支持 近百种编程语言覆盖 支持 Python、Java、Go、JavaScript、C#、React、Vue 等主流及小众编程语言。

开启代码补全

按照下列操作方式来开启代码补全功能。

设置说明

我们点击【详细设置】既可以看到对应的代码补全的两个选项,第一个是开启,第二个是代码生成延时时间,可以看到这里是400ms,代表我们时间操作的时候是需要稍微等待一下才会出现对应的提示内容的。

具体使用示例

代码补全功能可以帮助你快速生成代码片段、填充函数体、完成重复模式,甚至实现复杂的算法逻辑。

1、快速生成代码片段

<!-- 帮我生成九九乘法表的显示,通过html+js编辑,table表格显示 -->

<!-- 完成js部分 -->

实际连续提示效果:

显示效果:

进行部分代码修正。

核心快捷键技能ALT+K

选中我们要修改的代码之后就能看到一个灰色的提示文字,上面写着ALT+K to Edit代表按住这个快捷键进行修改,点击完毕后最上方就能看到,我们输入要修改的提示词,直接点击提交即可。

可以在效果中看到,将j<=9更换成了j<=i这样就可以完成九九乘法表的效果了,接受的快捷键也是组合键,使用的是Alt+A。

看效果:

2、快速补全经典算法

这里用一个递归来表述一下,非常的合适。

再次通过注释的方式来让AI进行自动分析。

查看最终效果:

3、实现二分查找法

我们这回换成Python语言来实验一番。

def binary_search(arr, target):
    # 实现二分查找

输入注释内容后回车并等待400毫秒:

返回的代码:

def binary_search(arr, target):
    # 实现二分查找
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid  # 返回目标元素的索引
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1   

校验二分法效果:

def binary_search(arr, target):
    # 实现二分查找
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == target:
            return mid  # 返回目标元素的索引
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1   
#   测试代码
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search(arr, target)
if result != -1:
    print(f"元素 {target} 存在于数组中,索引为 {result}")

输出效果:

相当完美的效果呢。

其它常用快捷键

这里我看官方文档里面有个快捷键的表,看着非常好,我就拿过来了,希望能有一些价值。

自定义快捷键

我们可以通过快捷键设置的方式将当前的操作方式改成自己熟悉的方式。

Loom模式

理论解释:Loom 可系统化处理复杂软件开发任务,通过创建编辑文件、解析项目架构、安全访问浏览器及授权执行终端指令的全流程覆盖,提供超越传统代码补全的全栈级支持。

看着觉得非常的强大,我们实际操作一下,写一个推箱子试试。

创建一个功能完整的推箱子小游戏。

有过程操作提示:

继续完成代码部分。

运行命令都给了。

使用TK库修改一下代码

过关:

反馈代码:

# 推箱子游戏 - Tkinter图形界面版
import tkinter as tk
from tkinter import messagebox

# 游戏元素
WALL = '#'
PLAYER = '@'
BOX = '$'
TARGET = '.'
PLAYER_ON_TARGET = '+'
BOX_ON_TARGET = '*'
EMPTY = ' '

# 第一关地图
level1 = [
    "#######",
    "#     #",
    "#     #",
    "#.@$  #",
    "#     #",
    "#     #",
    "#######"
]

# 颜色定义
COLORS = {
    WALL: 'gray',
    PLAYER: 'blue',
    BOX: 'orange',
    TARGET: 'red',
    PLAYER_ON_TARGET: 'purple',
    BOX_ON_TARGET: 'green',
    EMPTY: 'white'
}

class SokobanGame:
    def __init__(self, root):
        self.root = root
        self.root.title("推箱子游戏")
        
        self.level = [list(line) for line in level1]
        self.player_pos = self.find_player()
        self.steps = 0
        self.cell_size = 50
        
        # 创建游戏界面
        self.canvas = tk.Canvas(root, 
            width=len(self.level[0])*self.cell_size,
            height=len(self.level)*self.cell_size)
        self.canvas.pack()
        
        # 步数显示
        self.steps_label = tk.Label(root, text="步数: 0")
        self.steps_label.pack()
        
        # 绑定键盘事件
        self.root.bind('<KeyPress>', self.handle_keypress)
        
        # 绘制初始地图
        self.draw_map()
    
    def find_player(self):
        for y, row in enumerate(self.level):
            for x, cell in enumerate(row):
                if cell in (PLAYER, PLAYER_ON_TARGET):
                    return (x, y)
        return (0, 0)
    
    def draw_map(self):
        self.canvas.delete('all')
        for y, row in enumerate(self.level):
            for x, cell in enumerate(row):
                x1 = x * self.cell_size
                y1 = y * self.cell_size
                x2 = x1 + self.cell_size
                y2 = y1 + self.cell_size
                
                self.canvas.create_rectangle(
                    x1, y1, x2, y2,
                    fill=COLORS[cell],
                    outline='black'
                )
                
                # 在玩家和箱子上添加文字标识
                if cell in (PLAYER, PLAYER_ON_TARGET):
                    self.canvas.create_text(
                        (x1 + x2)/2, (y1 + y2)/2,
                        text="P", font=('Arial', 20)
                    )
                elif cell in (BOX, BOX_ON_TARGET):
                    self.canvas.create_text(
                        (x1 + x2)/2, (y1 + y2)/2,
                        text="B", font=('Arial', 20)
                    )
        
        self.steps_label.config(text=f"步数: {self.steps}")
    
    def handle_keypress(self, event):
        dx, dy = 0, 0
        if event.keysym == 'Up':
            dy = -1
        elif event.keysym == 'Down':
            dy = 1
        elif event.keysym == 'Left':
            dx = -1
        elif event.keysym == 'Right':
            dx = 1
        else:
            return
        
        if self.move_player(dx, dy):
            self.draw_map()
            if self.is_complete():
                messagebox.showinfo("恭喜", f"通关成功!步数: {self.steps}")
                self.root.destroy()
    
    def move_player(self, dx, dy):
        x, y = self.player_pos
        new_x, new_y = x + dx, y + dy
        
        # 检查边界
        if not (0 <= new_x < len(self.level[0]) and 0 <= new_y < len(self.level)):
            return False
        
        cell = self.level[new_y][new_x]
        
        # 移动逻辑
        if cell == WALL:
            return False
        elif cell in (EMPTY, TARGET):
            self.update_player_pos(x, y, new_x, new_y)
            return True
        elif cell in (BOX, BOX_ON_TARGET):
            # 尝试推动箱子
            box_x, box_y = new_x + dx, new_y + dy
            if self.can_move_box(box_x, box_y):
                self.move_box(new_x, new_y, box_x, box_y)
                self.update_player_pos(x, y, new_x, new_y)
                return True
        return False
    
    def can_move_box(self, x, y):
        if not (0 <= x < len(self.level[0]) and 0 <= y < len(self.level)):
            return False
        return self.level[y][x] in (EMPTY, TARGET)
    
    def move_box(self, from_x, from_y, to_x, to_y):
        # 处理箱子离开的位置
        if self.level[from_y][from_x] == BOX_ON_TARGET:
            self.level[from_y][from_x] = TARGET
        else:
            self.level[from_y][from_x] = EMPTY
        
        # 处理箱子到达的位置
        if self.level[to_y][to_x] == TARGET:
            self.level[to_y][to_x] = BOX_ON_TARGET
        else:
            self.level[to_y][to_x] = BOX
    
    def update_player_pos(self, old_x, old_y, new_x, new_y):
        # 处理玩家离开的位置
        if self.level[old_y][old_x] == PLAYER_ON_TARGET:
            self.level[old_y][old_x] = TARGET
        else:
            self.level[old_y][old_x] = EMPTY
        
        # 处理玩家到达的位置
        if self.level[new_y][new_x] == TARGET:
            self.level[new_y][new_x] = PLAYER_ON_TARGET
        else:
            self.level[new_y][new_x] = PLAYER
        
        self.player_pos = (new_x, new_y)
        self.steps += 1
    
    def is_complete(self):
        for row in self.level:
            if BOX in row:
                return False
        return True

if __name__ == "__main__":
    root = tk.Tk()
    game = SokobanGame(root)
    root.mainloop()

总结

整体体验下来是非常舒服的,整个过程没有遇到多次修改代码异常的情况,都是一次搞成,这就给我的感觉非常棒了,快去尝试一下把:

驭码 CodeRider - AI 编程与软件智能研发助手 - 极狐GitLab

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐