sublime + docker +pylsで入力補完


はじめに

前回は、sublime + venv + pylsで入力補完できるようにしました。
https://qiita.com/lisp719/items/5a47e3e8342c11fb90b9

今回はdocker環境でのやり方を記事にします。

dockerでpythonの開発環境を立てる

${PWD}でホストとゲストのパスを揃えます。
あとは、pipのpackageをキャッシュしたり適当に。

docker-compose.yml
version: "3"

services:
  app: &app
    image: python:3.7
    volumes:
      - .:${PWD}
      - bin-data:/usr/local/bin
      - pip-data:/usr/local/lib/python3.7/site-packages
    working_dir: ${PWD}

volumes:
  bin-data:
  pip-data:

pylsをインストール

pipでpylsをインストールします。
[all]を指定するとlintとかもインストールされます。

docker-compose run app pip install python-language-server[all]

入力補完のテスト用にbottleもインストール。

docker-compose run app pip install bottle

sublimeの設定

LSPのインストールまでは前回と同じです。
docker-composeでpylsを立ち上げるようにcommandを指定します。

LSP.sublime-settings
{
    "clients":
    {
        "pyls":
        {
            "command": ["docker-compose", "run", "--rm", "app", "pyls"],
            "enabled": true
        }
    }
}

動作確認

設定が終わったので適当なpythonファイルを開いてみます。
何故かファイルを開いた直後は補完が効きません。
1度改行をして入力すると補完が効くようになります。
かなり謎な動作なのですが、一度補完が効くようになれば1行目でも動作するようになります。

入力補完が効いていますね。

おわりに

pyls自体はpython版lsp(language-server-protocol)実装なので、lspプラグインなどがあるエディタなら同じような感じで行けると思います。
また、色んな言語のlspがあるようなので他の言語でも入力補完などが可能っぽいです。

lsp良いですね。