Skip to content

Commit fc1e2a5

Browse files
committed
(environment) introduction to language server
Signed-off-by: Anfsity <186920685+anfsity@users.noreply.github.com>
1 parent 35a4bc1 commit fc1e2a5

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

docs/misc-app-ref/environment.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,12 @@ compiler 阶段 输入文件 -o 输出文件
7474
实验环境中已经配置了如下工具:
7575

7676
* **必要的工具:** `git`, `flex`, `bison`, `python3`.
77-
* **构建工具:** `make`, `cmake`.
77+
* **构建工具:** `make`, `cmake`, `bear`.
7878
* **运行工具:** `qemu-user-static`.
7979
* **编译工具链:** Rust 工具链, LLVM 工具链.
8080
* **Koopa IR 相关工具:** `libkoopa` (Koopa 的 C/C++ 库), `koopac` (Koopa IR 到 LLVM IR 转换器).
8181
* **测试脚本:** `autotest`.
82+
* **C++ 语言服务器:** `llvm-clangd`.
8283

8384
举例:
8485

@@ -114,6 +115,22 @@ qemu-riscv32-static hello; echo $?
114115

115116
需要注意的是, 程序的 `main` 函数的返回值类型是 `int`, 即支持返回 32 位的返回值. 但你也许会发现, 你使用 `echo $?` 看到的返回值永远都位于 $[0, 255]$ 的区间内. 这是因为 Docker 实验环境内实际上运行的是 Linux 操作系统, Linux 程序退出时会使用 `exit` 系统调用传递返回值, 但接收返回值的一方可能会使用 `wait`, `waitpid` 等系统调用处理返回值, 此时只有返回值的低 8 位会被保留.
116117

118+
## C++ 语言服务器
119+
120+
[语言服务协议](https://microsoft.github.io/language-server-protocol/overviews/lsp/overview/) (Language Server Protocal, LSP) 是由微软提出的, 用于在工具与编辑器前端之间通信的标准协议. [`clangd`](https://clangd.llvm.org/)[LLVM](https://llvm.org/) 项目下为 C/C++ 提供语言服务的工具, 也是目前支持 C++ 开发最完善, 体验最好的语言服务器之一.
121+
122+
![`clangd` 提供的部分功能](example-clangd.png)
123+
124+
我们在实验环境中为你内置了最新版本的 `clangd`. 为了让你获得最舒适的开发体验, 并避免潜在的环境依赖冲突, 我们推荐使用 VS Code 的 `Dev Containers` 插件来连接实验环境. 同时, 我们也为你提供了相应的 Dev Container 配置模板.
125+
126+
为了让 `clangd` 能够准确分析你的代码 (实现完整的跳转和补全功能), 你需要为它提供一个名为 `compile_commands.json` 的编译数据库 (Compilation Database):
127+
* 如果你使用 CMake 构建项目, 只需在 CMake 配置中启用导出命令即可 (添加参数 `-DCMAKE_EXPORT_COMPILE_COMMANDS=ON`).
128+
* 如果你使用 Makefile 构建项目, 可以使用 `bear` 工具来拦截编译过程并自动生成该文件 (如 `bear -- make`).
129+
130+
值得一提的是, `clangd` 内部集成了代码格式化工具 `clang-format`. 这意味着你可以直接利用它在保存时自动格式化你的 C++ 代码, 而不必额外部署其他格式化插件. 如果你想自定义代码格式化风格, 可以使用如 [Clang-Format Configurator](https://clang-format-configurator.site/) 等在线可视化工具来生成配置文件 (`.clang-format`).
131+
132+
如需了解更详细的用法, 你可以查阅 [`clangd` 官方文档](https://clangd.llvm.org/) 以及 [`clang-format` 官方文档](https://clang.llvm.org/docs/ClangFormat.html).
133+
117134
## 测试你的编译器
118135

119136
实验环境内附带了自动测试脚本, 名为 `autotest`. 进入命令行后, 你可以执行如下命令来自动编译并测试项目目录中的编译器:
228 KB
Loading

0 commit comments

Comments
 (0)