次のような不完全な一致
def foo[A](t: Seq[A]) = t match {
Seq(x) => x
}
多くの場合(常にではありませんが、通常は)実行時にクラッシュする私の側の間違いです。Scala は警告しますが、インクリメンタル ビルドでは、ファイルが既にコンパイルされている可能性があるため、警告を見逃すことになります。
おそらく注釈によって、グローバルまたはローカルのいずれかで、scalaに警告をエラーに変える方法はありますか?
次のような不完全な一致
def foo[A](t: Seq[A]) = t match {
Seq(x) => x
}
多くの場合(常にではありませんが、通常は)実行時にクラッシュする私の側の間違いです。Scala は警告しますが、インクリメンタル ビルドでは、ファイルが既にコンパイルされている可能性があるため、警告を見逃すことになります。
おそらく注釈によって、グローバルまたはローカルのいずれかで、scalaに警告をエラーに変える方法はありますか?
警告をエラーとして (またはその逆に) 任意に報告するカスタム レポーターを提供することは可能ですが、API は現在文字列ベースであるため、入力された警告ではなく文字列メッセージをフィルター処理します。
特定の警告で失敗する組み込みの方法はありませんが、-Xlint -Xfatal-warnings
警告をエスカレートする通常の方法です。
警告の抑制が要求されましたが、危険と見なされました。致命的な警告の場合、良性と見なされる警告を抑制する必要があります。
非推奨が残っている場合は、非推奨のメソッドから呼び出すことで、警告 (-Xfatal-warnings で失敗する) を抑制することができます。そのメソッドがローカルの場合、警告は生成されません。
scala> @deprecated("","") def f = 8
f: Int
scala> f
<console>:9: warning: method f is deprecated:
f
^
scala> object A {
| def a = {
| @deprecated("","") def _f = f
| _f
| }}
defined object A
scala> A.a
res1: Int = 8
ローカルの非推奨トリック自体は非推奨になりましたが、転送コンパニオンを引き続き使用できます。
scala> @deprecated("","") def f = 8
f: Int
scala> f
warning: there was one deprecation warning; re-run with -deprecation for details
res0: Int = 8
scala> @deprecated("","") class C { def g = f }; object C extends C
defined class C
defined object C
scala> C.g
res1: Int = 8
ビルド プロセスについて質問することを検討してください。
コードのコミット/チェックインの直前に、完全でクリーンなビルド (インクリメンタルではない) を実行し、単体テストを実行する必要があります。これは、SBT またはビルド プロセスの (潜在的な、残りの) バグを回避するためです。もちろん、エラーや警告がないか結果を監視する必要があります。
継続的インテグレーション(自動、スケジュールされたビルド/テスト) を行っていますか、または行うべきでしょうか? そのような間、警告がどのように対処されるか (無視されるか、ビルドの失敗/警告をトリガーする) を制御するか、導入することができます。
scalac
コマンドラインからこれを行う方法がわかりません。他のすべてのアプローチがニーズを満たさない場合は、最後の手段として検討し、ビルド ツールに適している場合にのみ、次のscalac
名前の のラッパー スクリプトを作成しますscalac
。
scalac