0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SpacemacsでSQLの自動補完などを効かせる

Posted at

cf. https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/sql

Ubuntu18.04LTS on WSL2 on Windows10でやった。

予約語を大文字に自動変換する

SELECTFROMなどのキーワードを入力して半角スペースを空けた時、自動的に大文字へ変換させる。

nameuserなど「カラム名として使っているから大文字にしたくない」キーワードがあれば、 sql-capitalize-keywords-blacklist設定で除外できる。

.spacemacs
(defun dotspacemacs/layers ()
  (setq-default
   dotspacemacs-configuration-layers
   '(
     (sql :variables
          sql-capitalize-keywords t
          sql-capitalize-keywords-blacklist '("name" "user"))
    )
  )
)

LSPを利用して自動補完などを行う

バックエンドにLSPを使う。
サポートされているLSPは sqls

sqls

sqlsが解説されている記事 => すべてのエディタでSQLの自動補完をするためにSQL Language Server(sqls)を作った

sqlsをインストール

Go (golang)をインストールして、Go経由でsqlsをインストールする。

Goのインストールとパス設定は、Terraform Layerを参照
cf. SpacemacsでTerraformの自動補完やフォーマット機能を使う - Goをインストール

さらに、Go経由でインストールするコマンドのディレクトリやパス設定を行う。

  • GOPATHでインストール先ディレクトリ (たとえば ~/.go_path_packagesとか)を指定
  • そのディレクトリ下のbinディレクトリにパスを通す
~/.bash_profile
# Go
export GOPATH=$HOME/.go_path_packages
export PATH=$PATH:$HOME/.go_path_packages/bin

source ~/.bash_profileコマンドで設定を反映しておく。

そして満を持してsqlsインストール。

go get github.com/lighttiger2505/sqls

GOPATHで指定したディレクトリ内のbin下にsqlsコマンドが入り、使えるようになる。

.spacemacsの設定

.spacemacs
(defun dotspacemacs/layers ()
  (setq-default
   dotspacemacs-configuration-layers
   '(
     (sql :variables
          sql-backend 'lsp
          sql-lsp-sqls-workspace-config-path 'workspace)
    )
  )
)

sqlsで自動補完を行うためには、DBに接続する必要がある。

workspace configurationで設定する場合は、 sql-lsp-sqls-workspace-config-path'workspace or 'rootに指定し、JSONで書いた設定ファイルを置いておく。
sql-lsp-sqls-workspace-config-pathのデフォルト値は 'workspace

  • 'workspace: {ワークディレクトリ}/.sqls/config.json
  • 'root: {ワークスペースのルートディレクトリ}/.sqls/config.json

JSON設定ファイルはこんな構成。 driverdataSourceNameの対で置いていく。

.sqls/config.json
{
  "sqls": {
    "connections": [
      {
        "driver": "mysql",
        "dataSourceName": "user1:password1@tcp(localhost:3306)/sample_db"
      }
    ]
  }
}

sqlsの機能としては、自動補完以外にも Execute SQLSwitch Connectionなどあるが、Spacemacsではこれらを codeActions (, a a)から選んでもエラーが出て実行できない。
executeCommandは許可されていない模様。どうして。。。

lsp--send-request-async: The connected server(s) does not support method workspace/executeCommand
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?