fun getDiffMetrics()

in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/util/DiffMetrics.kt [38:76]


fun getDiffMetrics(before: String, after: String): DiffMetrics {
    val comparisonManager = ComparisonManager.getInstance()
    val fragments = comparisonManager.compareLines(
        before,
        after,
        ComparisonPolicy.IGNORE_WHITESPACES,
        EmptyProgressIndicator()
    )

    var accLineCount = 0
    var accCharCount = 0

    fragments.forEach { fragment: LineFragment ->
        var curr = fragment.startOffset2
        val end = fragment.endOffset2

        while (curr < end) {
            accLineCount += 1

            // Consume leading whitespace:
            while (curr < end && lineEnding(after, curr, end) == -1 && after[curr].isWhitespace()) curr++

            // Consume through EOL:
            val lineContentStart = curr
            while (curr < end && lineEnding(after, curr, end) == -1) curr++
            var lineContentEnd = curr
            curr += maxOf(lineEnding(after, curr, end), 0)

            // Walk back trailing whitespace and record character count before continuing to next line:
            while (lineContentEnd > lineContentStart && after[lineContentEnd - 1].isWhitespace()) lineContentEnd--
            accCharCount += lineContentEnd - lineContentStart
        }
    }

    return DiffMetrics(
        insertedLines = accLineCount,
        insertedCharacters = accCharCount,
    )
}