Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発環境の垣根を超えるLanguage Server Protocol入門 / Introduction to Language Server Protocol beyond the boundaries of the development environment

開発環境の垣根を超えるLanguage Server Protocol入門 / Introduction to Language Server Protocol beyond the boundaries of the development environment

PyCon Kyushu 2019
https://kyushu.pycon.jp/2019/

Kashun Yoshida

May 18, 2019
Tweet

More Decks by Kashun Yoshida

Other Decks in Programming

Transcript

  1. • @kashew_nuts (Kashun Yoshida) • Software Developer • BeProud Inc.

    • Interest: Vim, PyCharm • Like: Climbing, PokemonGO 2 お前誰よ?/whoami?
  2. • Language Server Protocol (LSP)とは何か • PythonのLSP実装 • LSPの導入方法 •

    PythonのLanguage Serverと連携するツール • LSPの未来と現状の課題 8 Agenda
  3. • LSP (Language Server Protocol) ◦ 各プログラミング言語の情報をJSON-RPC (Remote Procedure Call)

    経由で交換し、テキストエディタやIDEを拡張 するしくみ ◦ 2015年にMicrosoftが公開した仕様 (現在バージョン3系) • Language Server ◦ 仕様をもとに言語開発ツールを統合したもの 10 LSP(Language Server Protocol)とは
  4. 15 LSP導入前 Python Golang Java TypeScript ... Vim Emacs VS

    Code Atom ... MxN: エディタx言語専用のプラグインが必要
  5. 16 LSP導入後 Python ✔ Golang ✔ Java ✔ TypeScript ✔

    ... Vim ✔ Emacs ✔ VS Code ✔ Atom ✔ ... M+N: 言語サーバー+クライアントがあればOK
  6. • ユーザ: 高品質な言語開発ツールの導入を簡潔化 • 言語コミュニティ: 開発リソースをLanguage Serverに集中し、高 品質な言語開発ツールを作れる • エディタ(プラグイン作成者):

    言語ごとに行っていたコード補完や定 義参照などの実装をLanguage Server Clientで一括で行えるの で、リソースを集中できる 17 得られる恩恵
  7. • Python, Golang, Bash, C/C++, C#, Java, Perl, Rubyなど有名な 約70言語のLanguage

    Serverがある • YAML, HTML, CSS, Dockerfileといった設定ファイルやマーク アップ言語向けのLanguage Serverもある 18 対応する言語
  8. • palantir/python-language-server ◦ pylsと略される ◦ Python 100%, 広く使われるLanguage Server •

    Microsoft/python-language-server ◦ mpylsと表記されることも ◦ C#:Python=7:3, 主にVS CodeのPython拡張で使用 20 PythonのLSP実装
  9. エディタごとにプラグインをインストール 23 Language Server Clientの準備 Vim vim-lsp, coc.nvim, LanguageClient-neovim, vim-lsc

    Emacs lsp-mode, eglot, emacs-lsp Atom atom-languageclient, acme-lsp Sublime Text lsp VS Code 各種言語プラグイン (Pythonなら vscode-python)
  10. • Jedi: コード補完、定義ジャンプ、ホバー表示、etc • Rope: コード補完、リネーム • Pyflakes, pycodestyle, McCabe:

    リンタ • Autopep8, YAPF, Black, Isort: フォーマッタ • mypy: 型チェッカー 33 pylsで扱う開発ツール群
  11. • Language Server Clientが群雄割拠でどれを使えばいいか迷う ◦ Vimだと最近は coc.nvim が熱い • Language

    Serverの実装によってWIPな機能がある ◦ LSP使ってるから全て解決、ではない • カラムの数え方が UTF-16 のコードポイント単位なので、マルチバ イト文字が入ると文字位置がずれる ◦ なぜ UTF-8 で統一していない... Issue ◦ UTF-16: 2バイトもしくは4バイト ◦ UTF-8: 1〜6バイトの可変長 36 現状の課題
  12. • Official page for Language Server Protocol ◦ Microsoft公式 ◦

    プロトコルの詳細や機能の把握に • Langserver.org ◦ Sourcegraphが管理するコミュニティベースのまとめサイト ◦ Language ServerやClientの対応状況の把握に 37 参考