本文主要介绍Postgres的语言服务器。不是SQL的风格,只是Postgres。
状态
🚧这是在积极的发展,只准备合作者。大部分工作仍在前面进行,但我们已经验证了这种方法是有效的。我们将此公之于众,这样我们就可以在公开的情况下发展它,听取社区的意见。
特性
语言服务器协议是代码编辑器和服务器之间的开放协议,用于提供代码智能工具,如代码完成和语法高亮显示。这个项目为Postgres实现了这样一个语言服务器,通过添加:
语义突出
语法错误诊断
在悬停时显示SQL注释
自动完成
执行游标下的语句或执行当前文件等代码操作
可配置代码格式
... 还有更多
动机
尽管Postgres越来越受欢迎,但是ide和编辑器对PL/pgSQL的支持是有限的。虽然有一些通用的SQL语言服务器1在解析器中提供Postgres语法作为一种“风格”,但由于PostgreSQL不断发展和复杂的语法,它们通常都做不到。有一些专有的IDE可以很好地工作,但是这些特性只能在各自的IDE中使用。
这个语言服务器被设计为支持Postgres,并且只支持Postgres。服务器使用libpg_query,因此利用PostgreSQL源代码可靠地解析SQL代码。在语言服务器中使用postgress可能看起来不合常规,但这是解析所有有效PostgreSQL查询的唯一可靠方法。您可以找到一个更长的理由,为什么这是这里的方式™。虽然libpg_query是为了执行SQL而构建的,而不是为了构建语言服务器,但是在解析器crate中已经成功地减轻了任何缺点。您可以阅读带注释的源代码,了解解析器内部工作的更多细节。
一旦解析器稳定,并且实现了一个健壮的、可扩展的数据模型,语言服务器将不仅提供语义高亮、代码完成和语法错误诊断等基本功能,而且还将作为Postgres生态系统中所有伟大工具的用户界面。