T.unsafe() でラップしているにもかかわらず、Ruby Sorbet が行を自動修正してしまう
概要
このコードはtest_helper.rbにあります
require 'simplecov'
class SimpleCov::Formatter::MergedFormatter
def format(result)
simplecov = T.unsafe(SimpleCov::Formatter::HTMLFormatter).new
T.unsafe(simplecov.format(result))
end
end
この gem は非常に古いため、.rbi ファイルがありません。 https://sorbet.org/docs/error-reference#5002 のドキュメントで理解できないこと
ただし、この gem には rbi ファイルがありません。
Sorbet は SimpleCov::Formatter::HTMLFormatter を RuboCop::Formatter::HTMLFormatter に自動修正します
このエラーが発生: 定数 HTMLFormatter https://srb.help/5002 を解決できません
しかし、オブジェクトはまったく問題ありません。また、それを T.unsafe(…) でラップしましたが、それでも自動修正されます。
予想される結果: どうすればこれを孵化から逃れることができますか? (ファイルの先頭に # typed: false を設定しようとしましたが、シャーベットはまだこの行で文句を言います)
解決策
Sorbet 導入の最低条件は、すべての定数 (つまり、クラス/モジュール) が解決されることです。この場合、Sorbet は定数 SimpleCov::Formatter::HTMLFormatter についてまったく知らないため、T.unsafe かどうかに関係なく、これを処理できません。
推奨されているタピオカ ベースのワークフローを使用して RBI ファイルを生成していることを願っています。その場合、simplecov の RBI ファイルが生成されているはずです。 gem の .rbi ファイルをどこかから見つける必要はありません。Tapioca が gem 自体からそれを生成します。
別のワークフローを使用している場合は、定数とブロックを解除するために必要なメソッドを定義する RBI ファイル (できれば sorbet/rbi フォルダーの下) を簡単に作成できます。この例では、次のようなものがうまく機能するはずです。
class SimpleCov::Formatter::HTMLFormatter
def format(result); end
end