in src/main/kotlin/org/arend/highlight/ArendHighlightingPass.kt [85:129]
override fun resolveReference(data: Any?, referent: Referable?, list: List<ArendReferenceElement>, resolvedRefs: List<Referable?>) {
val lastReference = list.lastOrNull() ?: return
if (data !is ArendPattern && (lastReference is ArendRefIdentifier || lastReference is ArendDefIdentifier)) {
when {
referent is GlobalReferable && referent.precedence.isInfix ->
addHighlightInfo(lastReference.textRange, ArendHighlightingColors.OPERATORS)
(((referent as? RedirectingReferable)?.originalReferable ?: referent) as? MetaReferable)?.resolver != null ->
addHighlightInfo(lastReference.textRange, ArendHighlightingColors.META_RESOLVER)
}
}
var index = 0
while (index < resolvedRefs.size - 1 && resolvedRefs[index] !is ErrorReference) {
index++
}
if (index > 0) {
val last = list[index]
val textRange = if (last is ArendIPName) {
last.parentLiteral?.let { literal ->
literal.longName?.let { longName ->
TextRange(longName.textRange.startOffset, (literal.dot ?: longName).textRange.endOffset)
}
}
} else {
(last.parent as? ArendLongName)?.let { longName ->
last.extendLeft.prevSibling?.let { nextToLast ->
TextRange(longName.textRange.startOffset, nextToLast.textRange.endOffset)
}
}
}
if (textRange != null) {
addHighlightInfo(textRange, ArendHighlightingColors.LONG_NAME)
}
}
if (data is ArendPattern && (referent as? GlobalReferable?)?.kind == GlobalReferable.Kind.CONSTRUCTOR) {
addHighlightInfo(data.textRange, ArendHighlightingColors.CONSTRUCTOR_PATTERN)
}
if (lastReference.containingFile.isArendScratch && lastReference.resolve == null) {
(data as? PsiElement?)?.textRange?.let { addHighlightInfo(HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(it).descriptionAndTooltip("The resolved element is located outside the current scope")) }
}
}