From 9c3f0b059694cd3aa19e95ce33452a4bff424c1c Mon Sep 17 00:00:00 2001 From: Boyan Bonev Date: Wed, 14 Jun 2017 15:46:46 +0300 Subject: [PATCH] feat(method): Add support for getting Scala methods The count of the Scala methods was missing so I added support for this. Tested with unit test --- .../com/sagacify/sonar/scala/Measures.scala | 9 +++++-- .../sagacify/sonar/scala/ScalaSensor.scala | 26 ++++++++----------- src/test/resources/ScalaFile2.scala | 1 + .../sonar/scala/BaseMetricSensorSpec.scala | 4 +++ 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/main/scala/com/sagacify/sonar/scala/Measures.scala b/src/main/scala/com/sagacify/sonar/scala/Measures.scala index 56e425b..566a15a 100644 --- a/src/main/scala/com/sagacify/sonar/scala/Measures.scala +++ b/src/main/scala/com/sagacify/sonar/scala/Measures.scala @@ -6,14 +6,19 @@ import scalariform.lexer.Token import scalariform.lexer.Tokens._ object Measures { - - final def count_classes(tokens: List[Token], i: Int = 0): Int = { + def count_classes(tokens: List[Token]): Int = { var count = 0 tokens.foreach(token => if (token.tokenType == CLASS || token.tokenType == OBJECT) count += 1) count } + final def count_methods(tokens: List[Token]): Int = { + var count = 0 + tokens.foreach(token => if (token.tokenType == DEF) count += 1) + + count + } /* applied on raw source code */ diff --git a/src/main/scala/com/sagacify/sonar/scala/ScalaSensor.scala b/src/main/scala/com/sagacify/sonar/scala/ScalaSensor.scala index ceccb2a..e12b1ce 100644 --- a/src/main/scala/com/sagacify/sonar/scala/ScalaSensor.scala +++ b/src/main/scala/com/sagacify/sonar/scala/ScalaSensor.scala @@ -29,22 +29,18 @@ class ScalaSensor(scala: Scala, fs: FileSystem) extends Sensor { val sourceCode = Source.fromFile(inputFile.file, charset).mkString val tokens = Scala.tokenize(sourceCode, version) - context.saveMeasure(inputFile, - CM.COMMENT_LINES, - Measures.count_comment_lines(tokens)) - context.saveMeasure(inputFile, - CM.NCLOC, - Measures.count_ncloc(tokens)) - + context.saveMeasure(inputFile, CM.COMMENT_LINES, Measures.count_comment_lines(tokens)) + context.saveMeasure(inputFile, CM.NCLOC, Measures.count_ncloc(tokens)) context.saveMeasure(inputFile, CM.CLASSES, Measures.count_classes(tokens)) - // context.saveMeasure(input, CM.FUNCTIONS, methods) - // context.saveMeasure(input, CM.ACCESSORS, accessors) - // context.saveMeasure(input, CM.COMPLEXITY_IN_FUNCTIONS, complexityInMethods) - // context.saveMeasure(input, CM.COMPLEXITY_IN_CLASSES, fileComplexity) - // context.saveMeasure(input, CM.COMPLEXITY, fileComplexity) - // context.saveMeasure(input, CM.PUBLIC_API, publicApiChecker.getPublicApi()) - // context.saveMeasure(input, CM.PUBLIC_DOCUMENTED_API_DENSITY, publicApiChecker.getDocumentedPublicApiDensity()) - // context.saveMeasure(input, CM.PUBLIC_UNDOCUMENTED_API, publicApiChecker.getUndocumentedPublicApi()) + context.saveMeasure(inputFile, CM.FUNCTIONS, Measures.count_methods(tokens)) + + // context.saveMeasure(inputFile, CM.ACCESSORS, accessors) + // context.saveMeasure(inputFile, CM.COMPLEXITY_IN_FUNCTIONS, complexityInMethods) + // context.saveMeasure(inputFile, CM.COMPLEXITY_IN_CLASSES, fileComplexity) + // context.saveMeasure(inputFile, CM.COMPLEXITY, fileComplexity) + // context.saveMeasure(inputFile, CM.PUBLIC_API, publicApiChecker.getPublicApi()) + // context.saveMeasure(inputFile, CM.PUBLIC_DOCUMENTED_API_DENSITY, publicApiChecker.getDocumentedPublicApiDensity()) + // context.saveMeasure(inputFile, CM.PUBLIC_UNDOCUMENTED_API, publicApiChecker.getUndocumentedPublicApi()) } } diff --git a/src/test/resources/ScalaFile2.scala b/src/test/resources/ScalaFile2.scala index 066bb7e..324d2bf 100644 --- a/src/test/resources/ScalaFile2.scala +++ b/src/test/resources/ScalaFile2.scala @@ -9,4 +9,5 @@ class ScalaFile2 { } object ScalaFile2 { + def func2 = "" } diff --git a/src/test/scala/com/sagacify/sonar/scala/BaseMetricSensorSpec.scala b/src/test/scala/com/sagacify/sonar/scala/BaseMetricSensorSpec.scala index 0002182..869bc47 100644 --- a/src/test/scala/com/sagacify/sonar/scala/BaseMetricSensorSpec.scala +++ b/src/test/scala/com/sagacify/sonar/scala/BaseMetricSensorSpec.scala @@ -69,6 +69,8 @@ class ScalaSensorSpec extends FlatSpec with Matchers { .saveMeasure(file, CM.COMMENT_LINES, 0) verify(sensorContext, times(1)) .saveMeasure(file, CM.CLASSES, 1) + verify(sensorContext, times(1)) + .saveMeasure(file, CM.FUNCTIONS, 1) } } @@ -91,6 +93,8 @@ class ScalaSensorSpec extends FlatSpec with Matchers { .saveMeasure(file, CM.COMMENT_LINES, 1) verify(sensorContext, times(1)) .saveMeasure(file, CM.CLASSES, 2) + verify(sensorContext, times(1)) + .saveMeasure(file, CM.FUNCTIONS, 2) } } }