LoginSignup
3

More than 3 years have passed since last update.

svls: SystemVerilog Language Server

Posted at

はじめに

この記事は SystemVerilog Advent Calendar 2020 の25日目です。
7日目の記事と若干被ってますが、svlsというSystemVerilog向けのLanguage Serverについて紹介します。

Language ServerとはMicrosoftが仕様策定したLanguage Server Protocol(LSP)というプロトコルをしゃべるサーバです。
このサーバは接続してくるエディタに対して、タグジャンプや補完、リント、フォーマットなど様々な機能を提供します。
従来こういった機能はエディタ毎に実装されていましたが、共通のプロトコルができたことで、1つLanguage Serverを書けば対応するあらゆるエディタがこの機能を利用できるようになりました。

最近のモダンなプログラミング言語ではこのLanguage Serverが標準で用意されることも多いですが、残念ながらSystemVerilogにはそのような動きはありません。(あまり真面目に調べたことはないですが、商用ツールでも聞いたことないです)
ないなら作ろうということで、7日目に紹介したSystemVerilogパーサライブラリを使ってLanguage Serverを実装したのがこのsvlsです。実装言語はRustです。

svls

どんなことができるかというのは以下のスクリーンショットを見てください。
赤背景でリントエラーが表示され、それを修正するとその結果がリアルタイムに反映されます。
(表示のされ方はエディタやLSPプラグインによって異なります)

test.gif

また、シンタックスエラーもリアルタイムに表示されます。

こちらはVSCodeの例で、末尾の;が抜けているケースです。
(以下はgifにするのが面倒だったので静止画です…)

image.png

マウスホバーで詳細(というほどのものでもないですが)が表示されます。

image.png

当初リントエラー表示を目的にしていましたが、このシンタックスエラー表示も思いのほか便利です。svlsが使っているパーサは言語規格に対して非常に厳格に作ってあります。一方、商用含めてSystemVerilogの処理系(シミュレータや合成ツールなど)は文法が適当なことが多く、ツールによって規格違反の記述が通ったり通らなかったりします。
そのため、svlsを使って確実に規格の範囲内で書くようにすると、ツールの差異で問題になりにくくなると思います。(また規格通りなのに通らない商用ツールがあれば、ベンダーに文句を言うこともできます)

使い方

基本的な流れは

  • svlsのバイナリをダウンロードしてパスの通ったところに置く
  • エディタのLanguage Serverとして登録する

という感じです。詳細は以下を見てください。

今のところ以下のエディタで動作するようです。

  • VSCode
  • Vim
  • Neovim
  • Emacs

他にもLanguage Serverに対応したエディタなら動くはずです。
SystemVerilogをよく書く方にはぜひ使っていただければと思います。

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
3