为 Lithe 提供 Go 支持:用你电脑上的 gopls 提供代码智能,
用声明式构建系统接口(buildSystems)识别 Go 模块,在构建窗口里列出包,运行 go build、go vet、
go test 和 go run,查看模块依赖。
这是一个社区插件,按插件契约 v0 编写。插件只有一份 plugin.json,不附带任何可执行文件,也没有后端进程。
English: Go support for Lithe — code intelligence through your own
gopls, and the Go Modules build system (package model, build, vet, test, run and the module list) through the declarativebuildSystemscontract. The plugin is a singleplugin.jsonwith no executables and no backend process.
预发布:按插件契约 v0(
schemaVersion: 0、pluginAPIVersion: 0)编写,只能装进新版 Lithe 桌面端 (desktop-v*预发布),旧版 macOS Lithe 无法安装。
| 功能 | 说明 |
|---|---|
| 代码智能 | 补全、跳转定义、悬停、诊断、格式化,由 gopls 提供 |
| 识别模块 | 含 go.mod 的目录是构建根;go list -json ./... 的结果组成模块和包 |
| 构建 | Build(go build ./...)作用于模块;Vet(go vet)可作用于模块或单个包 |
| 运行 | 每个 main 包在构建窗口里有「运行 <包名>」按钮,执行 go run <导入路径>,输出显示在构建输出里 |
| 测试 | go test 作用于模块或单个包,可用 -run 只跑一个测试;输出显示在构建输出里,插件不提供测试报告文件 |
| 诊断 | 把 文件:行:列: 消息 形式的编译输出显示为问题 |
| 依赖 | go list -m -json all 列出模块依赖(含版本和是否间接依赖) |
| 同步 | go.mod、go.sum、go.work 变化后重新读取模块 |
插件设置(设置 → 插件 → Go Support →「设置」):
| 设置 | 生效方式 | 说明 |
|---|---|---|
| Go executable | 重新读取模块 | 读取模块、构建、检查、测试和运行用的 go。留空时使用 PATH 里的 go。也显示在「构建、执行、部署 › Go Modules」页 |
| Staticcheck analyses | 立即 | 让 gopls 额外报告 staticcheck 的检查结果;大模块上更耗 CPU 和内存 |
| Format with gofumpt | 立即 | 格式化时使用 gofumpt 的更严格规则 |
| Parameter placeholders in completion | 立即 | 补全函数调用时插入参数占位符 |
| Hover documentation | 立即 | 悬停显示多少文档:完整、第一句、一行或只有签名 |
后四项通过 workspace/configuration 发给正在运行的 gopls,不需要重启语言服务器;
它们也显示在「语言与框架 › Go」页。
构建选项(构建窗口 →「构建选项」),只对当前工作区生效:
| 选项 | 传给 go 的内容 |
|---|---|
| Build Tags | -tags <值> |
| Race Detector | -race |
选项会加到构建、检查、测试和运行的命令里。
| 程序 | 用途 | 查找方式 |
|---|---|---|
go 1.21 或更新版本 |
读取模块、构建、检查、测试、运行、依赖 | 插件设置 Go executable;留空时找 PATH 里的 go |
gopls |
代码智能 | PATH 里的 gopls |
安装插件时 Lithe 会列出这些程序和插件需要的权限(启动语言服务器、运行构建命令),确认后才会安装。 没有这两个程序的话可以先安装:
brew install go
go install golang.org/x/tools/gopls@latestgo install 把 gopls 装在 $(go env GOPATH)/bin,这个目录需要在 Lithe 能看到的 PATH 里。
- 从 Releases 下载
go-support-<版本>-darwin.zip。 - 在 Lithe 中打开 设置 → 插件,点击页面标题栏右侧的 从文件安装…,选中这个 zip,核对 SHA-256 和权限后确认。
- 打开含
go.mod的项目。构建窗口会出现 Go Modules,打开.go文件时启动 gopls。
一个包同时支持 Apple Silicon 和 Intel Mac。
- 读取模块、构建、检查、测试、运行和依赖都是
plugin.json里声明的go命令,由 Lithe 解析go并运行。 - 运行入口由 Lithe 从模型里的
main包生成:每个带application标签的包一条,名称是导入路径的最后一段。 - gopls 由 Lithe 按
languageServers的声明启动,插件设置通过workspaceConfiguration里的${setting:<id>}传给它。 - 插件目录在运行时保持只读。
插件没有自己的进程,也不发送 lithe/log。gopls 由 Lithe 启动,它的启动结果、window/logMessage
和有界的 stderr 由 Lithe 记进语言服务的日志;go 命令的输出显示在构建输出里,不复制进诊断日志。
排障时使用 Lithe 的日志窗口和诊断导出,不要开启 gopls 的 RPC dump,也不要把源码、环境变量或完整命令行写进日志。
需要 Node.js 22+ 和 zip:
node scripts/package.mjs输出 dist/go-support-<版本>-darwin.zip 和它的 SHA-256。本地开发时,用 设置 → 插件 → 从文件安装…
选择这个 zip 安装。
plugin.json 的完整格式见 Rust Core 仓库里的
插件契约、
构建工具接入指南
和语言服务器插件生命周期。
-
按语义化版本修改
io.github.lithe-idea.go-support/plugin.json的version:只修 Bug 升修订号, 加功能升次版本号,有不兼容的变化升主版本号。合入main。 -
推送同名标签:
git tag v0.0.1 && git push origin v0.0.1 -
Release工作流会核对标签与版本一致、打包并发布 Release(说明里附 SHA-256 和docs/releases/v<版本>.md)。release.yml里PRERELEASE_TAGS列出的版本会标为预发布版本: 目前是只能装进新版桌面端的v0.0.1。 -
Lithe Store 的自动追踪会发现稳定版本并开合并请求,合并后用户即可在 Lithe 中更新。自动追踪会跳过预发布版本; 需要收录时在 Store 中手工提交条目,并使用已发布 ZIP 的实际 SHA-256。