ant/Scalaのエラーメッセージをflymakeが正しくパースしてくれない問題

具体的には行数のマッチに失敗して1行目しか赤くしてくれない。これでは使えない(そもそもScalaコンパイル速度が遅くてロクに使えないことは一旦忘れる)。
そもそもflymakeがエラーメッセージのパースに何を使用しているかというと、正規表現をキー、そのsubexpressionsのうち何番目がファイル名やエラー行数に対応しているかを示すリストを値としたalistである。これはcompilation-error-regexp-alistで定義され、flymake.el中で多少拡張して用いられている(flymake-err-line-patterns)。
今回問題を引き起こしていたのはflymake.el側で定義されたant/Java用の

(" *\\(\\[javac\\]\\)? *\\(\\([a-zA-Z]:\\)?[^:(\t\n]+\\)\:\\([0-9]+\\)\:[ \t\n]*\\(.+\\)" 2 4 nil 5)

であった。Scalaコンパイルエラーメッセージにコロンが入っている事が原因ぽい。最初の?を削除して上書きし、Scala用のやつを新しく付け足し。ついでにcompilation-error-regexp-alistの先頭の

("\\([a-zA-Z][-a-zA-Z._0-9]+: ?\\)?\\([a-zA-Z]?:?[^:( \n]*[^:( \n0-9][^:( \n]*\\)[:(][ ]*\\([0-9]+\\)\\([) ]\\|:\\(\\([0-9]+:\\)\\|[0-9]*[^:0-9]\\)\\)" 2 3 6)

も一般的過ぎて余計なものにまでマッチするのでコメントアウトした。