Skip to content

Commit

Permalink
PrettyPrinterPerformance PrettyPrinterPerformance PrettyPrinterPerfor…
Browse files Browse the repository at this point in the history
…mance PrettyPrinterPerformance Optimized the PrettyPrinter for swiftlang#894

Worked to get the perfomance to be closer to where we were before the changes in swiftlang#883. This code should be only about 1.5% slower rather than 7% slower.

Using a lazy filter as `count(where:_)` isn't avaliable < Swift 6.0.

One forward loop and using the UTF8 view makes this faster than the original code pre-swiftlang#883.
  • Loading branch information
macshome committed Dec 18, 2024
1 parent a871b81 commit 87467ee
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions Sources/SwiftFormat/PrettyPrint/PrettyPrintBuffer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -122,16 +122,17 @@ struct PrettyPrintBuffer {
// In case of comments, we may get a multi-line string.
// To account for that case, we need to correct the lineNumber count.
// The new column is only the position within the last line.
let lines = text.split(separator: "\n")
lineNumber += lines.count - 1
if lines.count > 1 {
// in case we have inserted new lines, we need to reset the column
column = lines.last?.count ?? 0
} else {
// in case it is an end of line comment or a single line comment,
// we just add to the current column
column += lines.last?.count ?? 0
var lastLength = 0
// We are only interested in "\n" we can use the UTF8 view and skip the grapheme clustering.
for element in text.utf8 {
if element == 10 {
lineNumber += 1
lastLength = 0
} else {
lastLength += 1
}
}
column += lastLength
}

/// Request that the given number of spaces be printed out before the next text token.
Expand Down

0 comments on commit 87467ee

Please sign in to comment.