Postgres 语言服务器
一个专为 Postgres 设计的语言服务器。不是带有特色的 SQL,而是纯粹的 Postgres。
[!警告] 该项目正在积极开发中,目前仅适用于协作者。但我们正在不断进步!您可以在 https://github.com/supabase-community/postgres_lsp/issues/136 找到当前的路线图和贡献机会。
功能
语言服务器协议是代码编辑器和服务器之间的开放协议,用于提供代码智能工具,如代码补全和语法高亮。本项目实现了一个针对 Postgres 的语言服务器,通过添加以下功能显著提升了您在喜爱的编辑器中的开发体验:
- 代码检查
- 悬停提示
- 类型检查
- 语法错误诊断
- 内联提示
- 自动补全
- 代码操作,如"执行光标下的语句"或"执行当前文件"
- 格式化
- ...以及更多
我们计划为 SQL 和 PL/pgSQL 函数体也支持上述所有功能!
动机
尽管 Postgres 日益流行,但 IDE 和编辑器对 PL/pgSQL 的支持仍然有限。虽然有一些通用的 SQL 语言服务器1在解析器中提供 Postgres 语法作为"特色",但由于 PostgreSQL 不断发展和复杂的语法,它们通常表现不佳。有一些专有 IDE2运行良好,但这些功能仅在各自的 IDE 中可用。
这个语言服务器专为支持 Postgres 而设计,仅支持 Postgres。服务器使用 libpg_query,因此利用 PostgreSQL 源码可靠地解析 SQL 代码。在语言服务器中使用 Postgres 可能看起来不太常规,但这是解析所有有效 PostgreSQL 查询的唯一可靠方法。您可以在这里找到关于为什么这是正确方法™的更长解释。虽然 libpg_query 是为执行 SQL 而构建的,而不是为构建语言服务器,但在 parser
crate 中已成功缓解了任何缺点。您可以阅读带注释的源代码以了解解析器的内部工作原理。
一旦解析器稳定,并实现了强大且可扩展的数据模型,语言服务器不仅将提供基本功能,如语义高亮、代码补全和语法错误诊断,还将作为 Postgres 生态系统中所有优秀工具的用户界面。
安装
[!警告] 这还不适合生产环境使用。只有在您想帮助开发时才安装。
[!注意] 有兴趣为 Neovim 和 VS Code 设置发布流程和客户端扩展吗?请查看 https://github.com/supabase-community/postgres_lsp/issues/136!
Neovim
将 postgres_lsp 可执行文件添加到您的路径中,并在配置中添加以下内容以使用它。
require('lspconfig.configs').postgres_lsp = {
default_config = {
name = 'postgres_lsp',
cmd = {'postgres_lsp'},
filetypes = {'sql'},
single_file_support = true,
root_dir = util.root_pattern 'root-file.txt'
}
}
lsp.configure("postgres_lsp", {force_setup = true})
从源码构建
您需要安装 nightly Cargo、Node 和 npm。
通过运行以下命令安装 libpg_query
子模块:
git submodule update --init --recursive
如果您使用 VS Code,可以通过运行以下命令安装服务器和客户端扩展:
cargo xtask install
如果您不使用 VS Code,可以通过运行以下命令安装服务器:
cargo xtask install --server
服务器二进制文件将安装在 .cargo/bin
中。确保 .cargo/bin
在 $PATH
中。
Github CodeSpaces
目前,Windows 不支持 libpg_query
。您可以在 CodeSpaces 上设置开发环境。
codespace 启动后,在 shell 中运行以下命令安装 Rust:
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
按照常规步骤继续安装。
贡献者
- psteinroe(维护者)
脚注
Footnotes
-
通用 SQL 解决方案:sql-language-server、pgFormatter、sql-parser-cst ↩