1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
;;; lsp-sqls.el --- SQL Client settings -*- lexical-binding: t; -*-
;; Copyright (C) 2020 Shunya Ishii
;; Author: Shunya Ishii
;; Keywords: sql lsp
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; LSP client for SQL
;;; Code:
(require 'lsp-mode)
(defgroup lsp-sqls nil
"LSP support for SQL, using sqls"
:group 'lsp-mode
:link '(url-link "https://github.com/lighttiger2505/sqls")
:package-version `(lsp-mode . "7.0"))
(defcustom lsp-sqls-server "sqls"
"Path to the `sqls` binary."
:group 'lsp-sqls
:risky t
:type 'file
:package-version `(lsp-mode . "7.0"))
(defcustom lsp-sqls-workspace-config-path "workspace"
"If non-nil then setup workspace configuration with json file path."
:group 'lsp-sqls
:risky t
:type '(choice (const "workspace")
(const "root"))
:package-version `(lsp-mode . "7.0"))
(defun lsp-sqls--make-launch-cmd ()
(-let [base `(,lsp-sqls-server)]
;; we can add some options to command. (e.g. "-config")
base))
(defun lsp-sqls-setup-workspace-configuration ()
"Setup workspace configuration using json file depending on `lsp-sqls-workspace-config-path'."
(when-let ((config-json-path (cond
((equal lsp-sqls-workspace-config-path "workspace")
".sqls/config.json")
((equal lsp-sqls-workspace-config-path "root")
(-> (lsp-workspace-root)
(f-join ".sqls/config.json"))))))
(when (file-exists-p config-json-path)
(lsp--set-configuration (lsp--read-json-file config-json-path)))))
(lsp-register-client
(make-lsp-client :new-connection (lsp-stdio-connection #'lsp-sqls--make-launch-cmd)
:major-modes '(sql-mode)
:priority -1
:server-id 'sqls
:initialized-fn (lambda (workspace)
(with-lsp-workspace workspace
(lsp-sqls-setup-workspace-configuration)))))
(provide 'lsp-sqls)
;;; lsp-sqls.el ends here
|