Scalastyleを使ってScalaコードをlintしていると警告メッセージが出ますが、メッセージからその対処法の逆引きがあったらいいなと思ったのでまとめておきます。少しずつ足していこうと思います。ちなみにエラーメッセージのソースはscalastyle/reference.conf at master · scalastyle/scalastyleにまとまってます。Scalastyleのチェッククラス一覧 - Qiitaも参考に。
Header does not match expected text (header.matches)
クラス: org.scalastyle.file.HeaderMatchesChecker
原因: ファイルのヘッダに指定のコピーライトなどのテキストが入っていない。
対応: scalastyle-config.xmlの<parameter name="header">
に定義したテキストを追加する。
Public method must have explicit type (public.methods.have.type)
クラス: org.scalastyle.scalariform.PublicMethodsHaveTypeChecker
原因: パブリックメソッドに戻り値の型を明示していない。
対応: 型を明示する。
-def foo = 1
+def foo: Int = 1
Magic Number (magic.number)
クラス: org.scalastyle.scalariform.MagicNumberChecker
原因: マジックナンバーを使っている。
対応: マジックナンバーをval
に代入する。
-var anHour = 3600
+val anHour = 3600
※Scalastyleではval
変数はマジックナンバーと評価されないが、一方var
変数はマジックナンバーと判断される。
Regular expression matched (regex)
クラス: org.scalastyle.file.RegexChecker
原因: 正規表現にマッチしたコードが存在するため。
対応: 正規表現にマッチしないようにコードを修正する。
-println(value)
Regular expression matched ''{0}'' in a token (token)
クラス: org.scalastyle.scalariform.TokenChecker
原因: 正規表現にマッチするトークンが存在するため。
対応: 正規表現にマッチしないようにコードを修正する。
-println(value)
Avoid mutable fields (var.field)
クラス: org.scalastyle.scalariform.VarFieldChecker
原因: クラスやオブジェクトにvar
のフィールドがある。
対応: var
フィールドをval
にする。
class Foo {
-var bar = 1
+val bar = 1
}
Avoid wildcard imports (underscore.import)
クラス: org.scalastyle.scalariform.UnderscoreImportChecker
原因: ワイルドカードを使ってインポートしている。
対応: 必要なクラスのみインポートするようにする。
-import org.joda.time._
+import org.joda.time.{ DateTimeZone, DateTime }
Cyclomatic complexity of 11 exceeds max of 10 (cyclomatic.complexity)
クラス: org.scalastyle.scalariform.CyclomaticComplexityChecker
原因: メソッドの循環的複雑度が規定値を超えたため。
対応: メソッドを分割するなど、リファクタリングが必要。
Type parameter does not match '{0}' (class.type.parameter.name)
クラス: org.scalastyle.scalariform.ClassTypeParameterChecker
原因: 型パラメータの名前が正規表現にマッチしないため。
対応: 型パラメータ名を正規表現のパターンにマッチする形式に修正する