Postgres Language Server ra mắt sau hai năm phát triển

BigGo Editorial Team
Postgres Language Server ra mắt sau hai năm phát triển

Cộng đồng phát triển hiện đã có thể tiếp cận một công cụ mạnh mẽ mới cho việc phát triển PostgreSQL với sự ra mắt của Postgres Language Server, một dự án đã được phát triển trong gần hai năm. Language server mã nguồn mở này cung cấp các tính năng thiết yếu như tự động hoàn thành, làm nổi bật lỗi cú pháp, kiểm tra kiểu dữ liệu và kiểm tra lỗi cho phương ngữ SQL của PostgreSQL.

Kho lưu trữ GitHub của Postgres Language Server, làm nổi bật quá trình phát triển và đóng góp của cộng đồng
Kho lưu trữ GitHub của Postgres Language Server, làm nổi bật quá trình phát triển và đóng góp của cộng đồng

Giải quyết trải nghiệm phát triển SQL

Postgres Language Server giải quyết một khoảng trống đáng kể trong quy trình phát triển cho những người làm việc nhiều với cơ sở dữ liệu PostgreSQL. Trước công cụ này, các lập trình viên thường phải viết SQL mà không có phản hồi thời gian thực, chạy các bản migration để phát hiện lỗi hoặc tra cứu thông tin schema thủ công. Language server mang các khả năng của IDE hiện đại vào phát triển SQL, cho phép các lập trình viên phát hiện lỗi trước khi thực thi.

Điều làm cho dự án này đặc biệt thú vị là cách tiếp cận của nó trong việc phân tích cú pháp SQL. Như một trong những đồng tác giả đã giải thích trong phần bình luận, họ đã đối mặt với một thách thức cơ bản: trình phân tích cú pháp của PostgreSQL rất phức tạp và liên tục phát triển, khiến việc tạo ra một trình phân tích tùy chỉnh trở nên không khả thi. Ngoài ra, một language server cần xử lý cả các câu lệnh SQL hợp lệ và chưa hoàn chỉnh.

Giải pháp đơn giản là thực sự sử dụng hai trình phân tích cú pháp – libpg_query gốc được sử dụng bởi chính Postgres, và tree-sitter cho các câu lệnh chưa hoàn chỉnh, và kết hợp các kết quả phân tích. Với điều đó, bạn có thể vừa có một AST khả thi cho việc chẩn đoán và CST của tree-sitter cho tự động hoàn thành, ví dụ vậy.

Triển khai và tích hợp linh hoạt

Postgres Language Server được xây dựng với tính linh hoạt cao. Mặc dù nó tận dụng Language Server Protocol (LSP) để tích hợp với IDE, thiết kế độc lập với phương thức truyền tải của nó có nghĩa là các tính năng có thể được truy cập thông qua nhiều giao diện khác nhau bao gồm CLI, API HTTP, và các module WebAssembly. Điều này làm cho công cụ có thể tiếp cận bất kể môi trường ưa thích của nhà phát triển.

Server này đã có sẵn dưới dạng tệp nhị phân có thể tải xuống, gói npm, tiện ích mở rộng VSCode, và có thể được cài đặt thông qua nvim-lspconfig và mason cho người dùng Neovim. Sự sẵn có rộng rãi này thể hiện cam kết của nhóm phát triển trong việc làm cho công cụ dễ tiếp cận nhất có thể.

Các tính năng của Postgres Language Server:

  • Tự động hoàn thành
  • Làm nổi bật lỗi cú pháp
  • Kiểm tra kiểu dữ liệu (thông qua phân tích lỗi EXPLAIN)
  • Kiểm tra mã nguồn (lấy cảm hứng từ Squawk)

Các phương thức cài đặt có sẵn:

  • Tải tệp nhị phân từ kho lưu trữ
  • Gói npm
  • Tiện ích mở rộng VSCode
  • Neovim (thông qua nvim-lspconfig và mason)

Các công nghệ chính được sử dụng:

  • libpg_query (trình phân tích cú pháp của chính Postgres)
  • tree-sitter (để xử lý các câu lệnh không hoàn chỉnh)
  • Kiến trúc máy chủ-khách hàng với thiết kế độc lập với phương thức truyền tải

Hướng phát triển tương lai và tác động đến cộng đồng

Hiện tại, language server tập trung vào các câu lệnh SQL, nhưng các nhà phát triển đã cho biết kế hoạch mở rộng hỗ trợ cho phần thân hàm và PL/pgSQL trong tương lai. Cộng đồng đã bắt đầu báo cáo lỗi và đề xuất cải tiến, với các nhà phát triển thể hiện khả năng phản hồi ấn tượng bằng cách nhanh chóng giải quyết các vấn đề.

Một khả năng đặc biệt thú vị mà các thành viên cộng đồng đã nêu ra là tiềm năng tích hợp language server với SQL nhúng trong các ngôn ngữ lập trình khác nhau. Điều này có thể cho phép kiểm tra tĩnh và tự động hoàn thành các câu lệnh SQL trong mã được viết bằng các ngôn ngữ như Python, Rust, hoặc TypeScript. Mặc dù chức năng này sẽ đòi hỏi các giải pháp phía trình soạn thảo, các nhà phát triển đã đề cập rằng họ đang khám phá các tùy chọn hỗ trợ trực tiếp trong API workspace của họ.

Đối với các nhà phát triển làm việc với các nền tảng sử dụng nhiều tính năng PostgreSQL như triggers, Row Level Security, và các hàm SQL, công cụ này đại diện cho một cải tiến đáng kể trong trải nghiệm phát triển. Bằng cách cung cấp phản hồi ngay lập tức về lỗi cú pháp và đề xuất tự động hoàn thành dựa trên thông tin schema, Postgres Language Server giúp hợp lý hóa quy trình phát triển cơ sở dữ liệu và phát hiện các vấn đề tiềm ẩn sớm hơn trong quá trình phát triển.

Tham khảo: Postgres Language Server

Kết quả đầu ra từ CLI postgres-tools, làm nổi bật ứng dụng thực tế của việc kiểm tra cú pháp SQL và xác thực kiểu dữ liệu
Kết quả đầu ra lỗi từ CLI postgres-tools, làm nổi bật ứng dụng thực tế của việc kiểm tra cú pháp SQL và xác thực kiểu dữ liệu