Open2
読者コミュニティ|Language Server Protocol の仕様 及び実装方法
本の感想や質問をお気軽にコメントしてください。
Q&A
本著についてたくさんの反応をいただきありがたく思います。
いくつか見られた疑問に関してお答えしていきます。
Syntax highlightingはどうやるのか?
LSPにはSemantic tokensというコードの色付けを行える機能がありますが、これは通常のSyntax highlightingとは異なる仕組みです。文法ファイルを定義してエディタに渡すようなことがしたい場合、それはLSPというよりかは拡張機能の守備範囲だと思います。
以下でいくつかのケースについて方策を示しておきます。
VSCodeで独自言語のSyntax highlightingを行いたい
以下のリンクが役に立つと思われます。
Monaco Editorで独自言語のSyntax highlightingを行いたい
以前私がそのようなこと(実例)をしましたので、ソースコードを紹介します。
Monaco Editor APIのlanguages.setMonarchTokensProvider
を使います。
文法の定義は以下のようにオブジェクト形式で渡します。
公式のリンクはこちらです。
チュートリアル的なものはないのか?
本文でも少し触れましたが、LSPのチュートリアルやLanguage Serverを作ってみたという趣旨の記事は既にWeb上でいくつか確認することができます(そのため本著は「作って学ぶ」というよりかはコンセプトの解説に寄った内容としました)。こちらでリンクを紹介しておきます。他にもご存じの方がいたらお教えください。
- https://code.visualstudio.com/api/language-extensions/language-server-extension-guide
- https://zenn.dev/takl/books/0fe11c6e177223
- https://qiita.com/vain0x/items/d050fe7c8b342ed2004e#_reference-a5e1c1658f719e7db952
- https://qiita.com/minebreaker/items/c53e4dddb0709492d362
- https://qiita.com/lighttiger2505/items/5782debc59ae163a4d81
- https://kgtkr.net/blog/2021/11/06/processing-language-server
※追記(2023/10/4)
付録2としてLanguage Serverの実作例を追加しました。