Skip to content

Commit ed679f6

Browse files
committed
Add type checking for specific parameter types in triggers
1 parent 747070f commit ed679f6

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/main/kotlin/io/runescript/plugin/lang/psi/type/inference/RsTypeInferenceVisitor.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ class RsTypeInferenceVisitor(private val myInferenceData: RsTypeInference) : RsV
5656
}
5757
}
5858
o.parameterList?.parameterList?.forEach { it.accept(this) }
59+
val expectedParameterTypes = triggerType.parameterTypes
60+
if (expectedParameterTypes != null) {
61+
val actualParametersType = o.parameterList?.parameterList
62+
?.map { it.localVariableExpression.type!! }
63+
.fold()
64+
val expectedParametersType = expectedParameterTypes.toList().fold()
65+
checkTypeMismatch(o.scriptNameExpression, actualParametersType, expectedParametersType)
66+
}
5967
o.statementList.accept(this)
6068
}
6169

@@ -93,6 +101,16 @@ class RsTypeInferenceVisitor(private val myInferenceData: RsTypeInference) : RsV
93101
return this
94102
}
95103

104+
private fun Collection<RsType>?.fold(): RsType {
105+
if (this == null) {
106+
return RsUnitType
107+
}
108+
if (size == 1) {
109+
return first()
110+
}
111+
return RsTupleType(flatten())
112+
}
113+
96114
private fun checkTypeMismatch(context: PsiElement, actualType: RsType?, expectedType: RsType?) {
97115
val unfoldedActualType = actualType.unfold() ?: RsErrorType
98116
val unfoldedExpectedType = expectedType.unfold() ?: RsErrorType

0 commit comments

Comments
 (0)