From 09b85937b0bc9368a36368b244ec6d3ced011217 Mon Sep 17 00:00:00 2001 From: Felipe Zorzo Date: Thu, 16 May 2024 18:51:54 -0300 Subject: [PATCH] feat: Include empty comment lines in the total count of lines of comments --- .../sonar/plsqlopen/PlSqlSquidSensorTest.kt | 2 +- .../sonar/plsqlopen/metrics/MetricsVisitor.kt | 31 +++++++++++++------ .../api/squid/PlSqlCommentAnalyzer.kt | 2 -- .../plsqlopen/metrics/MetricsVisitorTest.kt | 2 +- 4 files changed, 23 insertions(+), 14 deletions(-) diff --git a/sonar-zpa-plugin/src/test/kotlin/org/sonar/plsqlopen/PlSqlSquidSensorTest.kt b/sonar-zpa-plugin/src/test/kotlin/org/sonar/plsqlopen/PlSqlSquidSensorTest.kt index f17032d0..c017847f 100644 --- a/sonar-zpa-plugin/src/test/kotlin/org/sonar/plsqlopen/PlSqlSquidSensorTest.kt +++ b/sonar-zpa-plugin/src/test/kotlin/org/sonar/plsqlopen/PlSqlSquidSensorTest.kt @@ -88,7 +88,7 @@ class PlSqlSquidSensorTest { //assertThat(context.measure(key, CoreMetrics.FILES).value()).isEqualTo(1); assertThat(context.measure(key, CoreMetrics.NCLOC).value()).isEqualTo(18) - assertThat(context.measure(key, CoreMetrics.COMMENT_LINES).value()).isEqualTo(2) + assertThat(context.measure(key, CoreMetrics.COMMENT_LINES).value()).isEqualTo(4) assertThat(context.measure(key, CoreMetrics.COMPLEXITY).value()).isEqualTo(6) assertThat(context.measure(key, CoreMetrics.FUNCTIONS).value()).isEqualTo(2) assertThat(context.measure(key, CoreMetrics.STATEMENTS).value()).isEqualTo(7) diff --git a/zpa-core/src/main/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitor.kt b/zpa-core/src/main/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitor.kt index 2eaa4b95..621dff5f 100644 --- a/zpa-core/src/main/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitor.kt +++ b/zpa-core/src/main/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitor.kt @@ -24,7 +24,6 @@ import com.felipebz.flr.api.Token import com.felipebz.flr.api.Trivia import org.sonar.plugins.plsqlopen.api.PlSqlGrammar import org.sonar.plugins.plsqlopen.api.checks.PlSqlCheck -import org.sonar.plugins.plsqlopen.api.squid.PlSqlCommentAnalyzer class MetricsVisitor : PlSqlCheck() { @@ -57,16 +56,24 @@ class MetricsVisitor : PlSqlCheck() { } override fun visitComment(trivia: Trivia, content: String) { - var line = trivia.token.line - - for (commentLine in content.lineSequence()) { - if (commentLine.contains("NOSONAR")) { - linesOfComments.remove(line) - noSonar.add(line) - } else if (!PlSqlCommentAnalyzer.isBlank(commentLine)) { - linesOfComments.add(line) + val comment = trivia.token.value + val line = trivia.token.line + val endLine = trivia.token.endLine + val firstLineContainsNoSonar = comment.indexOfAny(newlineChars).let { + if (it == -1) { + comment.contains("NOSONAR") + } else { + comment.regionMatches(0, "NOSONAR", 0, it) } - line++ + } + + for (i in line .. endLine) { + linesOfComments.add(i) + } + + if (firstLineContainsNoSonar) { + linesOfComments.remove(line) + noSonar.add(line) } } @@ -76,4 +83,8 @@ class MetricsVisitor : PlSqlCheck() { fun getExecutableLines(): Set = executableLines + companion object { + private val newlineChars = charArrayOf('\n', '\r') + } + } diff --git a/zpa-core/src/main/kotlin/org/sonar/plugins/plsqlopen/api/squid/PlSqlCommentAnalyzer.kt b/zpa-core/src/main/kotlin/org/sonar/plugins/plsqlopen/api/squid/PlSqlCommentAnalyzer.kt index 85974927..daa6e0a1 100644 --- a/zpa-core/src/main/kotlin/org/sonar/plugins/plsqlopen/api/squid/PlSqlCommentAnalyzer.kt +++ b/zpa-core/src/main/kotlin/org/sonar/plugins/plsqlopen/api/squid/PlSqlCommentAnalyzer.kt @@ -21,8 +21,6 @@ package org.sonar.plugins.plsqlopen.api.squid object PlSqlCommentAnalyzer { - fun isBlank(line: String) = line.isBlank() - fun getContents(comment: String) = when (comment[0]) { '-' -> { diff --git a/zpa-core/src/test/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitorTest.kt b/zpa-core/src/test/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitorTest.kt index 75309230..62a33592 100644 --- a/zpa-core/src/test/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitorTest.kt +++ b/zpa-core/src/test/kotlin/org/sonar/plsqlopen/metrics/MetricsVisitorTest.kt @@ -43,7 +43,7 @@ class MetricsVisitorTest { @Test fun comments() { TestPlSqlVisitorRunner.scanFile(File("src/test/resources/metrics/comments.sql"), null, visitor) - assertThat(visitor.getLinesOfComments()).containsOnly(2, 4) + assertThat(visitor.getLinesOfComments()).containsOnly(2, 3, 4, 5) } @Test