in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererRecommendationManager.kt [94:163]
fun buildDetailContext(
requestContext: RequestContext,
userInput: String,
recommendations: List<Completion>,
requestId: String,
): List<DetailContext> {
val seen = mutableSetOf<String>()
return recommendations.map {
val isDiscardedByUserInput = !it.content().startsWith(userInput) || it.content() == userInput
if (isDiscardedByUserInput) {
return@map DetailContext(
requestId,
it,
it,
isDiscarded = true,
isTruncatedOnRight = false,
rightOverlap = "",
getCompletionType(it)
)
}
val overlap = findRightContextOverlap(requestContext, it)
val overlapIndex = it.content().lastIndexOf(overlap)
val truncatedContent =
if (overlap.isNotEmpty() && overlapIndex >= 0) {
it.content().substring(0, overlapIndex)
} else {
it.content()
}
val truncated = it.toBuilder()
.content(truncatedContent)
.build()
val isDiscardedByUserInputForTruncated = !truncated.content().startsWith(userInput) || truncated.content() == userInput
if (isDiscardedByUserInputForTruncated) {
return@map DetailContext(
requestId,
it,
truncated,
isDiscarded = true,
isTruncatedOnRight = true,
rightOverlap = overlap,
getCompletionType(it)
)
}
val isDiscardedByRightContextTruncationDedupe = !seen.add(truncated.content())
val isDiscardedByBlankAfterTruncation = truncated.content().isBlank()
if (isDiscardedByRightContextTruncationDedupe || isDiscardedByBlankAfterTruncation) {
return@map DetailContext(
requestId,
it,
truncated,
isDiscarded = true,
truncated.content().length != it.content().length,
overlap,
getCompletionType(it)
)
}
val reformatted = reformatReference(requestContext, truncated)
DetailContext(
requestId,
it,
reformatted,
isDiscarded = false,
truncated.content().length != it.content().length,
overlap,
getCompletionType(it)
)
}.toMutableList()
}