Skip to content

Commit 88ac1e9

Browse files
committed
Add SQL test data validation by adding support for list patterns
1 parent 8cb57f7 commit 88ac1e9

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

src/main/kotlin/org/domaframework/doma/intellij/inspection/sql/visitor/SqlTestDataAfterBlockCommentVisitor.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import com.intellij.psi.PsiComment
2020
import com.intellij.psi.PsiElement
2121
import com.intellij.psi.PsiFile
2222
import com.intellij.psi.PsiLiteralExpression
23+
import com.intellij.psi.PsiWhiteSpace
2324
import com.intellij.psi.util.PsiTreeUtil
25+
import com.intellij.psi.util.nextLeafs
2426
import org.domaframework.doma.intellij.common.isInjectionSqlFile
2527
import org.domaframework.doma.intellij.common.isJavaOrKotlinFileType
2628
import org.domaframework.doma.intellij.common.sql.validator.result.ValidationTestDataResult
@@ -54,6 +56,7 @@ class SqlTestDataAfterBlockCommentVisitor(
5456

5557
val nextElement = element.nextSibling ?: return
5658
if (isSqlLiteral(nextElement)) return
59+
if (isMatchListTestData(element)) return
5760

5861
val result = ValidationTestDataResult(element, shortName)
5962
result.highlightElement(holder)
@@ -67,25 +70,36 @@ class SqlTestDataAfterBlockCommentVisitor(
6770
PsiTreeUtil.getChildOfType(element, SqlElForDirective::class.java)
6871
?: PsiTreeUtil.getChildOfType(element, SqlElIfDirective::class.java)
6972
?: PsiTreeUtil.getChildOfType(element, SqlElElseifDirective::class.java)
70-
val endDirective =
73+
val otherDirective =
7174
PsiTreeUtil
7275
.getChildrenOfType(element, PsiElement::class.java)
7376
?.find {
7477
it.elementType == SqlTypes.EL_END ||
7578
it.elementType == SqlTypes.HASH ||
76-
it.elementType == SqlTypes.EL_POPULATE
79+
it.elementType == SqlTypes.EL_POPULATE ||
80+
it.elementType == SqlTypes.EL_ELSE
7781
}
78-
if (directive != null || endDirective != null) return true
82+
if (directive != null || otherDirective != null) return true
7983

8084
val content = PsiTreeUtil.getChildOfType(element, PsiComment::class.java)
8185
return content != null
8286
}
8387

8488
private fun isSqlLiteral(element: PsiElement): Boolean =
8589
element.elementType == SqlTypes.STRING ||
86-
element.elementType == SqlTypes.BOOLEAN ||
87-
element.elementType == SqlTypes.NUMBER ||
88-
element.elementType == SqlTypes.NULL ||
8990
listOf("true", "false", "null").contains(element.text) ||
9091
element.text.matches(Regex("^\\d+$"))
92+
93+
private fun isMatchListTestData(element: PsiElement): Boolean {
94+
val parenthesesListPattern =
95+
Regex(
96+
"""^\(\s*(?:(?:"[^"]*"|'[^']*'|\d+|true|false|null)\s*(?:,\s*(?:"[^"]*"|'[^']*'|\d+|true|false|null)\s*)*)?\)$""",
97+
)
98+
val testDataText =
99+
element.nextLeafs
100+
.takeWhile { it !is PsiWhiteSpace }
101+
.toList()
102+
.joinToString("") { it.text }
103+
return testDataText.matches(parenthesesListPattern)
104+
}
91105
}

0 commit comments

Comments
 (0)