RISC-V IDE MRS2进阶分享(三):MRS语言服务器
MounRiver Studio Ⅱ(MRS2)的语言服务器是基于clangd的改进版本,可为 C、C++等语言开发提供实时的语法分析、智能补全、代码导航、错误诊断、代码重构等功能。下面以沁恒的CH32V317模板工程结合实际开发时的常见场景,分享MRS2语言服务器的功能。
- 代码智能补全:超越文本匹配的语义理解
- 上下文感知补全
MRS2支持对变量、函数、宏定义等符号进行键入时自动补全,补全建议不仅包含符号名称,还提供类型信息和优先级排序。只要开始输入关键字、变量名或函数名,MRS2便会提供一系列匹配的建议供你选择。

同时支持模糊输入,无视大小写,只需保证字符正确顺序即可轻松提供补全建议,提高输入时的自由度。

- 头文件智能提示
智能提醒需要包含的头文件,一键即可轻松添加,免去手动写#include。

- 精准代码诊断:实时捕捉潜在问题
- 编译级错误检查
MRS2能够实时监控代码,帮助开发者在编写代码时即时检测和报告语法错误和警告。一旦发现任何潜在问题,如缺失的分号、括号不匹配、函数声明不完整等,它会在编辑器中高亮显示可疑的代码段,帮助开发者迅速定位并解决问题。

除了语法错误外,MRS2还会给出潜在的代码问题警告(如冗余变量、未使用的函数等),帮助开发者提前发现代码中的潜在隐患。

- Fix-it 自动修复
MRS2对可自动修复的问题提供快速修复建议。包括符号拼写错误、缺少分号、括号不匹配、类型不兼容等基础语法问题;提示删除冗余的未使用变量或函数等,只需将光标移至波浪线标记的错误位置,点击Quick Fix即可一键修复代码。


MRS2还能够识别代码中的点操作符(.)和箭头操作符(->),并完成两者的自动转换。

- 高效代码导航:秒级定位关键逻辑
- 跨文件符号跳转
MRS2不仅能够快速跳转至代码的声明、定义和引用位置,而且具备实时更新的能力,确保即使文件经过修改,导航也不会跳转至已失效的位置。
通过"CTRL+点击"一个函数、变量或类的名称,符号变成带有下划线的高亮状态,即可快速跳转到其定义或声明位置。

不光如此,右键菜单中还有更多选项用于跳转:
Go to Definition:跳转到函数/变量定义(支持系统头文件)。
Go to Declaration:跳转到符号声明位置。
Go to Implementation:对接口类直接定位实现类(需索引支持)。
Go to References:跳转到函数引用。

-
全局引用搜索
MRS2支持查找某个符号的所有引用位置,右键菜单Find All References,即可在左边栏中列出符号在项目中的所有引用点。双击列表项,还能直接跳转到对应位置。

-
Peek页快速展示
MRS2提供了Peek功能,同样可以用于查看符号的定义、声明、引用等。

与直接跳转不同的是,Peek无需切换窗口,能够在不离开当前文件的情况下快速预览或跳转到代码。
Peek会在当前页面展开一个内联窗口,左侧显示要查看的代码,有多个结果时会在右侧列出所有相关位置。
在Peek窗口内滚动或点击右侧不同条目可切换查看不同位置。在窗口内直接修改代码,编辑内容会同步到原文件。

- 文档即时查看
当鼠标悬停于一个符号上时,MRS2会使用悬浮框的形式提供符号的相关信息,包括符号的详细文档、类型签名、注释等等。
悬停在函数名上时,可以展示函数的签名、参数列表和返回值类型、函数相关注释和函数声明。

悬停在变量上时会展示变量的类型、定义、注释。悬停在宏上时还会展示出宏定义和其展开后的值。


- 安全重构工具:规模化代码改造
MRS2支持跨文件的多次全局重命名,在进行全局重命名时能够理解代码中的上下文和作用域,即使存在相同名称但作用域不同的局部变量,也能被准确地区分和重命名,而且无论涉及的文件数量多少,都能准确且一次性地完成所有相关标识符的更新。
只需要选中符号右键菜单点击Rename Symbol,在弹出框中输入新名字,敲一下Enter即可跨文件全局重命名符号。

除此之外,MRS还有重命名预览功能,在输入后按Shift+Enter,即可获得预览列表,所有即将被修改的符号都会清楚展示在列表中,更便于确认。点击Apply即可成功重命名,点击Discard也可轻松取消。

- 高级辅助功能:提升开发体验
- 代码格式化
MRS2提供了代码格式化功能,帮助开发者轻松修正代码的缩进、换行以及重新排列注释,只需在菜单栏Edit->Code Format配置好自己的个性化格式化参数,可以选择内置格式模板,或点击New创建新的格式模板。点击Apply生效。

在代码编辑窗口右键菜单点击Format Document可通篇格式化,选中部分代码,右键菜单点击Format Seletion可对选中部分代码格式化。

在目录树中选中工程或文件夹,右键菜单还可进行批量格式化。
总的来说,MRS2的语言服务器提供了丰富的辅助功能,减少了开发过程中的重复性工作,让开发者能够更专注于解决核心问题,为编程带来更流畅的体验。
MRS2最新版本可通过官方网站https://www.mounriver.com/进行免费下载。