Scalastyle:メッセージ→対処法の逆引きリスト

Scalastyleを使ってScalaコードをlintしていると警告メッセージが出ますが、メッセージからその対処法の逆引きがあったらいいなと思ったのでまとめておきます。少しずつ足していこうと思います。ちなみにエラーメッセージのソースは[scalastyle/reference.conf at master · scalastyle/scalastyle](https://github.com/scalastyle/scalastyle/blob/master/src/main/resources/reference.conf)にまとまってます。[Scalastyleのチェッククラス一覧 - Qiita](http://qiita.com/uriborn/items/1ff81858d84e67452fa3)も参考に。

## 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`
**原因**: パブリックメソッドに戻り値の型を明示していない。
**対応**: 型を明示する。

```diff:対応例
-def foo = 1
+def foo: Int = 1
```

# Magic Number ([magic.number])

**クラス**: `org.scalastyle.scalariform.MagicNumberChecker`
**原因**: マジックナンバーを使っている。
**対応**: マジックナンバーを`val`に代入する。

```diff:対応例
-var anHour = 3600
+val anHour = 3600
```

※Scalastyleでは`val`変数はマジックナンバーと評価されないが、一方`var`変数はマジックナンバーと判断される。

# Regular expression matched ([regex])

**クラス**: `org.scalastyle.file.RegexChecker`
**原因**: 正規表現にマッチしたコードが存在するため。
**対応**: 正規表現にマッチしないようにコードを修正する。

```diff:対応例
-println(value)
```

# Regular expression matched ''{0}'' in a token ([token])

**クラス**: `org.scalastyle.scalariform.TokenChecker`
**原因**: 正規表現にマッチするトークンが存在するため。
**対応**: 正規表現にマッチしないようにコードを修正する。

```diff:対応例
-println(value)
```

# Avoid mutable fields ([var.field])

**クラス**: `org.scalastyle.scalariform.VarFieldChecker`
**原因**: クラスやオブジェクトに`var`のフィールドがある。
**対応**: `var`フィールドを`val`にする。

```diff:対応例
class Foo {
-var bar = 1
+val bar = 1
}
```

# Avoid wildcard imports ([underscore.import])

**クラス**: `org.scalastyle.scalariform.UnderscoreImportChecker`
**原因**: ワイルドカードを使ってインポートしている。
**対応**: 必要なクラスのみインポートするようにする。

```diff:対応例
-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`
**原因**: 型パラメータの名前が正規表現にマッチしないため。
**対応**: 型パラメータ名を正規表現のパターンにマッチする形式に修正する










<!---------------------------------------

追加するときのテンプレート

# <メッセージ> ([<id>])

**クラス**: `<class>`
**原因**: <text>
**対応**: <text>

```diff:対応例
```

--------------------------------------->

[header.matches]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_file_HeaderMatchesChecker
[public.methods.have.type]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_scalariform_PublicMethodsHaveTypeChecker
[magic.number]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_scalariform_MagicNumberChecker
[regex]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_file_RegexChecker
[token]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_scalariform_TokenChecker
[var.field]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_scalariform_VarFieldChecker
[underscore.import]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_scalariform_UnderscoreImportChecker
[cyclomatic.complexity]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_scalariform_CyclomaticComplexityChecker
[class.type.parameter.name]: http://www.scalastyle.org/rules-0.7.0.html#org_scalastyle_scalariform_ClassTypeParameterChecker