文档 / IDE
语言服务器与构建
Yuli 替你安装和维护的语言服务器(无需 npm,也无需系统中的 Node),以及适用于 Python、Go、.NET、sbt、Bazel 和 Node 的构建适配器。
对于每种语言,Yuli 都使用该语言的标准语言服务器(LSP),并替你管理它:经你许可后下载、完成校验,并将其存放在你的项目之外。Java 拥有自己的原生引擎,CSS、SCSS 和 LESS 则由编辑器直接处理。
托管的服务器
| 语言 | 服务器 | 安装来源 |
|---|---|---|
| TypeScript 和 JavaScript | typescript-language-server 搭配 typescript(真正的 tsserver) |
npm 注册表 |
| Python | Pyright | npm 注册表 |
| Go | gopls | go install |
| Kotlin | kotlin-language-server | GitHub zip 包 |
| C# | csharp-ls | dotnet tool |
| PHP | Intelephense | npm 注册表 |
| Ruby | ruby-lsp | gem |
| C 和 C++ | clangd 19.1.2 | GitHub zip 包 |
| Bash | bash-language-server | npm 注册表 |
| Dockerfile | dockerfile-language-server-nodejs | npm 注册表 |
| Rust | rust-analyzer | GitHub 二进制文件 |
你的电脑上无需 npm 或 Node
- 软件包直接从 npm 注册表下载,并与注册表发布的 SHA-512 校验和进行比对。
- 不会运行安装脚本,也不会安装可选依赖。
- 它们运行在 Yuli 自带的 Electron(以 Node 模式)之上,或运行在 Yuli 下载的 Node 之上。你无需安装 npm 或 Node。
- 保存在
<runtimes>/<服务器>/<版本>/中。 - 只有在连续 60 秒没有收到任何数据时,下载才会中断;速度慢但仍在进行的下载不会被打断。
Yuli 的运行时文件夹(<runtimes>)因系统而异:
%LOCALAPPDATA%\.yulicode\runtimes
~/Library/Caches/.yulicode/runtimes
$XDG_CACHE_HOME/yulicode/runtimes(默认为 ~/.cache/yulicode/runtimes)
经你许可
如果缺少某种语言的服务器,编辑器会显示 “没有可用于……的语言服务器”,并提供以下选项:
| 选项 | 作用 |
|---|---|
| 允许下载 / 允许安装 | Yuli 安装并启动该服务器 |
| 以后再说 | 本次会话中不再询问 |
| 不再询问 | 记住你对该服务器的决定 |
未经你的授权,不会下载或运行任何内容。你的决定按服务器和目标(本机或远程主机)分别保存在配置旁的 lsp-install-consent.json 中。
在 全局选项 → 语言服务器 中,你可以指定已有服务器的路径,或填写一个可信的 URL 或镜像。
构建适配器
Yuli 根据项目中的文件识别其构建方式,无需运行任何程序来判断,并使用相应工具来编译、运行、测试,以及在 测试 面板中显示结果。
- 包管理器: pip(
requirements*.txt、setup.py或简单的pyproject.toml)、Poetry、uv、Pipenv 和 Hatch。 - 环境: 使用项目的虚拟环境(
.venv/venv、Poetry 和 Pipenv 的文件夹,或 Hatch 的文件夹)。没有虚拟环境时,使用包管理器的run;再不行则使用系统的 Python。 - 测试: 如果项目配置了 pytest 或依赖它,就使用 pytest;否则使用 unittest。
- 同一环境也会传给 Pyright,这样自动补全就能看到你的依赖。
go build、go run和go test ./...。- 测试结果以
-json格式读取,供测试资源管理器使用;控制台则像使用-v时一样显示文本。
.sln、.csproj、.fsproj和.vbproj项目。- 测试结果以 TRX 格式返回。
- 带有
build.sbt的项目。 - 测试结果从
target/test-reports中的 JUnit XML 读取。
- 带有
MODULE.bazel或WORKSPACE的项目。 bazel build //...、bazel test //...和bazel run <标签>;如果你安装了 bazelisk,则使用 bazelisk。
- 包管理器: 取自
package.json的packageManager字段;没有该字段时,根据 lockfile 判断:pnpm-lock.yaml、yarn.lock、bun.lockb或package-lock.json。 - 覆盖率: 使用项目已有的工具,依次为 vitest、jest、c8 和 nyc。Yuli 读取
coverage/coverage-summary.json。如果都没有,就没有覆盖率数据。
Maven、Gradle、Ant 和 Cargo 照常工作;参见运行与调试。
边栏中的 ▶
代码旁会出现一个 ▶,用来运行或调试眼前的代码。只有当项目确实属于该类型时才会显示。
| 语言 | 运行 | 调试 |
|---|---|---|
| Python | if __name__ == "__main__": 以及 pytest 或 unittest 测试 |
if __name__ == "__main__": |
| Go | func main 和 func TestX |
func main 和 func TestX |
| C# | xUnit、NUnit 和 MSTest 测试 | static void Main( |
此外,package.json 中的每个脚本都有自己的 ▶(使用项目的包管理器运行);在 Java 中,带有 main 的类、测试以及 Maven 和 Gradle 任务也都有 ▶。