探索 MarsCode #Workspace 新功能:编程路上的得力助手
一、引言
在编程的世界里,我们常常会遇到各种各样的挑战,比如理解复杂的项目架构、查找特定功能的代码实现、生成合适的代码片段以及编写有效的单元测试等。最近,体验了 MarsCode 上线的新功能 #Workspace,它旨在帮助开发者更高效地处理这些问题,让编程变得更加顺畅。在这篇测评中,豆包助手将详细分享 #Workspace 的使用体验,希望能给大家提供一些参考。
二、应用场景/项目描述
(一)快速了解项目架构与功能
在接触一个新的开源项目时,例如 Joplin(一个开源的笔记和待办事项应用程序),我们往往需要花费大量时间去梳理其架构和功能。这时候,#Workspace 就发挥了巨大作用。通过在智能问答窗口中输入“#Workspace 请介绍这个项目的架构,详细描述实现的功能,并给出一些关键的文件和代码示例”,MarsCode AI 能够迅速在全局代码中搜索相关信息,并给出详细准确的回答。它不仅清晰地阐述了项目的核心服务(如数据库管理使用 SQLite 存储数据、同步服务支持多种云服务同步等)、主要功能(笔记管理、待办事项管理、标签和笔记本管理等),还列出了关键文件和代码示例,如 packages/lib/database/database.ts 用于数据库操作相关逻辑,让我们能快速对项目有一个整体的把握。
(二)定位代码修改位置
在开发过程中,当我们明确了需求,需要知道应该在代码仓库的哪个位置进行修改时,#Workspace 同样能提供有力支持。比如,在 Joplin 项目中,我们知道文件夹模型用于组织笔记,若要查找“Folder 模型中创建文件夹的代码在哪里实现?请介绍其实现原理”,只需在输入框添加 #Workspace 并输入该自然语言需求,AI 就能给出对应的文件位置(如 packages/lib/models/Folder.ts 中的 newFolder 和 newFolderWithNumber 方法)以及对逻辑的简要描述,大大提高了开发效率。
(三)生成需求代码并确定添加位置
假设我们要在 Joplin 项目中实现“在创建笔记本时支持用户填写 1 - 10 的序号,对笔记本进行序号排序”的功能。向 #Workspace 提问后,它不仅能生成实现逻辑的函数代码,还会明确告知我们需要将代码添加到 Folder 类中(具体在 newFolder 方法之后),快速满足了我们的开发需求。
(四)利用已实现方法生成新代码
在日常编码中,我们常常会遇到重复代码的情况,或者不确定某个功能是否已有现成函数实现。以 Joplin 项目的侧边栏笔记本排序功能为例,选中期望添加新需求的代码片段后,向 AI 提问“#Workspace 请添加更新 electronApp 中侧边栏笔记本排序的代码”,#Workspace 会在整个代码仓库检索可复用代码,使用已有实现生成需求逻辑代码。比如,它可能会调用已有的 sortByDate 方法来更新排序,并提供相应的代码片段,我们只需点击 insert 即可一键替换 Editor 选中部分,快速生成代码。
(五)生成单测并添加至对应位置
为了保证项目质量,编写单元测试是必不可少的环节,但我们有时会不清楚某些函数是否已有单测,以及单测用例该写在哪里。比如对于 Joplin 项目中的 addNoteCounts 函数,我们可以通过提问“#Workspace 查询 addNoteCounts 是否有单测覆盖,若没有请生成单测用例”,#Workspace 会在工作区中进行全局检索。若未找到单测,它会生成单测代码,并告知我们应将测试用例添加到 tests/models/Folder.test.ts 文件中(通常位于与 Folder.ts 相同的目录下,用于存放 Folder 类的单元测试),同时还会详细解释测试用例覆盖的方面,如验证函数是否正确计算文件夹笔记数量、参数对查询条件的影响以及函数对数据库查询和相关方法的调用等。
(六)生成项目文档
在开发过程中,维护项目文档(如 README 文件)往往是一项繁重的工作。#Workspace 可以帮助我们轻松生成类的描述文档。例如,对于 Joplin 项目中的 Application 类,我们提问“#Workspace 参考 app.ts 中的 Application,生成类的描述”,AI 会给出包含功能介绍(如初始化和启动应用程序、事件处理、应用程序设置等)、属性介绍(如 ocrService、protocolHandler 等)、构造函数(constructor 用于初始化应用程序实例)以及示例代码的详细描述,我们只需一键复制粘贴即可得到一个描述文档,极大地减轻了文档编写的负担。
三、使用感受和心得
(一)功能强大且实用
#Workspace 的多种功能紧密围绕编程开发中的常见需求,从项目理解到代码编写、测试再到文档生成,几乎涵盖了整个开发流程。这使得在开发过程中,无论是面对新的项目还是在已有项目中进行功能扩展或维护,都能得心应手。例如,在实际项目中,我曾需要对一个复杂的模块进行功能优化,通过 #Workspace 快速定位到相关代码,参考其生成的代码示例和逻辑解释,顺利完成了优化工作,大大节省了时间。
(二)提高开发效率
它能够快速准确地回答各种问题,减少了开发者在代码库中盲目查找和理解的时间。在多人协作项目中,团队成员可以更高效地共享对项目的理解,避免因沟通不畅导致的开发延误。以一个团队协作开发的项目为例,我们使用 #Workspace 来统一团队对项目架构和功能的认知,使得新成员能够快速上手,同时在讨论代码修改和功能实现时,能够基于准确的信息进行决策,显著提高了项目推进速度。
(三)易于上手
在 VSCode/JetBrains 中安装插件后,通过简单的操作(点击对话框中的 # icon 或键盘输入 # 唤起上下文列表,选中 Workspace 后输入提问)即可与代码仓库进行问答互动。这种简洁直观的使用方式,即使是对新工具不太熟悉的开发者也能快速掌握,降低了学习成本。
(四)智能性令人惊喜
基于 Code Knowledge Graph 技术构建的本地索引以及先进的语义搜索、代码索引和 IDE Language Services,使得 AI 能够理解代码的上下文和语义,给出高质量的回答。在使用过程中,我多次被其准确的代码定位和合理的代码生成所惊艳,感觉就像有一位经验丰富的开发者在身边指导。
四、项目截图
五、产品建议
(一)增加更多语言支持
目前 #Workspace 已支持多种常用语言,如 JavaScript、TypeScript、Python、Golang、Java、C++ 等,但在实际开发中,还有许多其他语言被广泛使用。希望能够进一步拓展支持的编程语言范围,以满足更多开发者的需求。
(二)优化代码生成的灵活性
在生成代码时,虽然能够满足基本需求,但有时生成的代码结构可能比较固定,缺乏一定的灵活性。例如,在某些特定场景下,开发者可能希望对生成代码的风格、命名规范等有更多的自定义选项,建议增加相关功能,让生成的代码更贴合实际项目需求。
(三)提升代码分析的深度
对于一些复杂的代码逻辑,希望 #Workspace 能够提供更深入的分析和解释。比如,在处理多层嵌套的函数调用或复杂的算法实现时,除了给出基本的功能描述,还能提供更详细的执行流程分析、时间复杂度和空间复杂度评估等,帮助开发者更好地理解和优化代码。
(四)改进错误提示信息
在使用过程中,如果输入的问题不清晰或者无法找到相关答案时,当前的错误提示信息相对比较简单。可以考虑提供更具指导性的错误提示,例如提示用户如何改进问题表述,或者提供一些可能相关的问题示例,以便用户更快地获得准确的回答。
(五)加强与版本控制系统的集成
在实际开发中,项目通常会使用版本控制系统(如 Git)进行管理。如果 #Workspace 能够与版本控制系统集成,例如在展示代码时能够同时显示代码的版本信息、分支信息,以及提供基于版本历史的代码分析和对比功能,将对开发者在代码追溯和问题排查方面提供更大的帮助。
(六)提供更多个性化配置
不同开发者有不同的工作习惯和偏好,建议允许用户对 #Workspace 的一些功能进行个性化配置,如搜索结果的显示方式(排序规则、显示数量等)、代码片段的格式设置、问答界面的布局调整等,以提高使用体验。
(七)增强文档生成的丰富度
虽然目前可以生成类的描述文档,但在内容丰富度上还有提升空间。例如,可以增加对类之间关系的可视化展示(如类图),以及在生成文档时自动引用相关的外部文档(如项目中使用的第三方库的文档链接),使生成的文档更加完整和易于理解。
(八)建立代码示例库
可以考虑建立一个代码示例库,除了在回答问题时提供相关代码示例外,允许用户自行上传和分享代码示例,并对示例进行分类和标签管理。这样,在遇到类似问题时,开发者不仅可以参考系统生成的示例,还能从社区共享的示例中获取更多灵感。
(九)实时协作功能
对于团队协作开发,实时协作功能将非常有价值。例如,团队成员可以同时在 #Workspace 中对同一项目进行操作,实时共享代码分析结果、讨论问题解决方案,并能够实时看到其他成员的操作和注释,进一步提高团队协作效率。
(十)支持更多的 IDE
目前 #Workspace 主要支持在 VSCode 和 JetBrains 中使用,希望能够扩展到更多主流的 IDE 平台,让更多开发者能够方便地使用这一强大的功能。
#MarsCode #Workspace #编程工具测评 #代码问答 #开发效率提升