1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
import sbt.File
import java.io.ByteArrayOutputStream
import java.io.PrintStream
import org.scalastyle._
object StyleChecker {
val maxResult = 100
class CustomTextOutput[T <: FileSpec]() extends Output[T] {
private val messageHelper = new MessageHelper(this.getClass().getClassLoader())
var fileCount: Int = _
override def message(m: Message[T]): Unit = m match {
case StartWork() =>
case EndWork() =>
case StartFile(file) =>
print("Checking file " + file + "...")
fileCount = 0
case EndFile(file) =>
if (fileCount == 0) println(" OK!")
case StyleError(file, clazz, key, level, args, line, column, customMessage) =>
report(line, column, messageHelper.text(level.name),
findMessage(messageHelper, clazz, key, args, customMessage))
case StyleException(file, clazz, message, stacktrace, line, column) =>
report(line, column, "error", message)
}
private def report(line: Option[Int], column: Option[Int], level: String, message: String) {
if (fileCount == 0) println("")
fileCount += 1
println(" " + fileCount + ". " + level + pos(line, column) + ":")
println(" " + message)
}
private def pos(line: Option[Int], column: Option[Int]): String = line match {
case Some(line) => " at line " + line + (column match {
case Some(column) => " character " + column
case None => ""
})
case None => ""
}
}
def score(outputResult: OutputResult) = {
val penalties = outputResult.errors + outputResult.warnings
scala.math.max(maxResult - penalties, 0)
}
def assess(allSources: Seq[File]): (String, Int) = {
val configFile = new File("project/scalastyle_config.xml").getAbsolutePath
val sources = allSources.filterNot{ f =>
val path = f.getAbsolutePath
path.contains("interpreter") ||
path.contains("simulations") ||
path.contains("fetchtweets")
}
val messages = new ScalastyleChecker().checkFiles(
ScalastyleConfiguration.readFromXml(configFile),
Directory.getFiles(sources : _*))
val output = new ByteArrayOutputStream()
val outputResult = Console.withOut(new PrintStream(output)) {
new CustomTextOutput().output(messages)
}
val msg =
output.toString +
"Processed " + outputResult.files + " file(s)\n" +
"Found " + outputResult.errors + " errors\n" +
"Found " + outputResult.warnings + " warnings\n" +
(if (outputResult.errors+outputResult.warnings > 0) "Consult the style guide at https://class.coursera.org/progfun-002/wiki/view?page=GradingPolicy" else "")
(msg, score(outputResult))
}
}
|