[angular] WEB-71089 Make all key code and names case-insensitive; fix RegExpPattern to support this use case.

(cherry picked from commit 42a3d16b9b4ef050db55f2271c46c5694e6e8f78)

IJ-CR-170229

GitOrigin-RevId: 05d8de360f5b6b4f87ad11f089eeed678419336e
This commit is contained in:
Piotr Tomiak
2025-07-23 12:58:28 +02:00
committed by intellij-monorepo-bot
parent 90201cfde5
commit 5308b0f632

View File

@@ -17,8 +17,14 @@ internal class RegExpPattern(private val regex: String, private val caseSensitiv
else
Pattern.compile(regex, Pattern.CASE_INSENSITIVE)
}
private val patternCompletablePrefix: String by lazy(LazyThreadSafetyMode.NONE) {
getPatternCompletablePrefix(regex)
}
override fun getStaticPrefixes(): Sequence<String> = sequenceOf(getPatternCompletablePrefix(regex))
override fun getStaticPrefixes(): Sequence<String> = if (caseSensitive)
sequenceOf(patternCompletablePrefix)
else
sequenceOf(patternCompletablePrefix.takeWhile { !it.isLetter() })
override fun isStaticAndRequired(): Boolean = false
@@ -35,7 +41,7 @@ internal class RegExpPattern(private val regex: String, private val caseSensitiv
listOf(MatchResult(PolySymbolNameSegment.create(
start, start + matcher.end(),
owner?.let { listOf(it) } ?: emptyList(),
matchScore = getPatternCompletablePrefix(regex).length
matchScore = patternCompletablePrefix.length
)))
else emptyList()
}
@@ -46,7 +52,10 @@ internal class RegExpPattern(private val regex: String, private val caseSensitiv
symbolsResolver: PolySymbolPatternSymbolsResolver?,
params: ListParameters,
): List<ListResult> =
emptyList()
patternCompletablePrefix
.takeIf { it == regex }
?.let { listOf(ListResult(it, PolySymbolNameSegment.create(0, it.length))) }
?: emptyList()
override fun complete(
owner: PolySymbol?,
@@ -56,15 +65,18 @@ internal class RegExpPattern(private val regex: String, private val caseSensitiv
start: Int,
end: Int,
): CompletionResults =
getPatternCompletablePrefix(regex)
patternCompletablePrefix
.takeIf { it.isNotBlank() }
?.let {
CompletionResults(
PolySymbolCodeCompletionItem.builder(it, start, owner)
.completeAfterInsert(true)
.displayName("$it")
.build()
)
if (it == regex)
CompletionResults(PolySymbolCodeCompletionItem.create(it, start))
else
CompletionResults(
PolySymbolCodeCompletionItem.builder(it, start, owner)
.completeAfterInsert(true)
.displayName("$it")
.build()
)
}
?: CompletionResults(
PolySymbolCodeCompletionItem.builder("", start, owner)