VSCode の Steep 拡張のバージョン 0.8.0 がリリースされました


2024年 06月 06日

VSCode で Steep による開発支援を受けるための拡張機能 Steep 拡張 (steep-vscode) が、先日 0.8.0 にバージョンアップしました。

What’s steep-vscode

Steep 拡張は、Steep を利用してさまざまな Ruby の開発支援を行う VSCode 拡張です。
主な機能としては、以下のようなものがあります。

  • Steep による型検査の実行 (随時)
  • ホバーやシグネチャヘルプによる型情報の表示
  • 定義ジャンプによる型定義の確認
  • 型情報による入力補完

Steep を利用している VSCode ユーザーであれば、必携の VSCode 拡張と言えるでしょう。

なお、Steep は LSP として動作するので、他のエディタでも同様の機能が利用できるはずです。

Steep 拡張と steep check コマンドの型検査の違い

Steep 拡張の型検査は、コードを書き換えるたびに自動的に実行されるため、編集中に型検査のフィードバックを受けることができます。

たとえば

  • 型の不一致
  • nil チェック不足
  • 存在しないメソッドの呼び出し

といった、Steep による型検査の結果をリアルタイムに確認できるのが特徴です。この拡張は非常に便利で、自分が書いたコードが型に適合しているかどうか、すぐにフィードバックを受けられるため、バグに気づくのが早くなります。

ただし、Steep 拡張の型検査機能にはひとつだけ注意点があります (ありました)。それは Steep 拡張と Steep の CLI である steep check コマンドの型検査結果が異なることです。

steep check コマンドでは、型検査の結果のうち、information レベルの指摘はフィルタされるようになっています (--severity-level オプションで変更可能)。一方、Steep 拡張ではすべての指摘が表示されます。

そのため、 steep check の結果と VSCode 上の表示(Steep 拡張の指摘)は異なるものとなっていました。 steep check でエラーがないにもかかわらず、VSCode 上では大量に指摘されることも少なくありませんでした。

バージョン 0.8.0 での変更点

この問題に対し、Steep 拡張のバージョン 0.8.0 では以下の機能が導入されました。

Steep 拡張に「Hide Diagnostics」というオプションが追加されました。そして、ここにエラーレベルを指定することで、任意のレベルの指摘を無視することができるようになりました。

CLI と同じ動きにするには、Hide Diagnostics に Information を指定します。

Steep を lenient モードや strict モードで動かす場合、 steep check では指摘がなくても、水面下では Information レベルの指摘がいくつも出ているため、Steep による型チェックを有効にする場合はこのオプションは必須と言えます。

これまでは、ひとまず型チェックは silent モードで見送り、入力支援機能をメインに利用するという方針を採っていましたが、このオプションのお陰で一歩前に進めることができそうです。

与太話

実はこの機能、かつて僕が steep 本体に修正を提案したことがきっかけで実装されたものです。

CLI と Steep 拡張の動きが違うのに気づき、Steep 本体 (LSP 自身)にも --serverity-level オプションを追加したいという提案を送りました(langserver: Add –severity-level option)。その提案はリジェクトされたのですが、かわりに Steep 拡張に導入されたのが、先ほどの Hide Diagnostics オプションです。

ただ、この Hide Diagnostics オプションは、機能としては実装されたものの永らくリリースされることのないままでした。マージはされたものの、Marketplace 上にリリースされないため、利用できない状態が続いていました。

僕自身もこのオプションのことをすっかり忘れて、Steep 拡張での型検査を諦めていたのですが、つい先日 Steep-1.7.0.dev.1 の ignore コメントを試す という記事を書いた際にこのオプションのことを思い出し、soutaro さんにリリースしていただけないかお願いした結果、今回のリリースに繋がりました。

ということで、このオプションはワシが育てたと言っても良いのでは、と思っています。
すみません、言い過ぎですねw

まとめ

  • Steep CLI と VSCode の Steep 拡張では、型検査の指摘件数が異なっていた
  • Steep 拡張のバージョン 0.8.0 で、Hide Diagnostics オプションが追加され、CLI と同じ動きに設定できるようになった
  • これまで VSCode 上の型検査が困難だったが、これを機に前に進めることができそう
  • 声を上げていきましょう