Skip to content

Commit a49c475

Browse files
committed
SwiftFixIt: Slightly optimize fix-it application
`SwiftIDEUtils.FixItApplier.applyFixes` performs some O(n^2) filtering based on `SwiftDiagnostics.FixItMessage` messages, which we don't need. Use the overload that directly takes an array of source edits instead.
1 parent d82df4d commit a49c475

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

Sources/SwiftFixIt/SwiftFixIt.swift

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import enum SwiftIDEUtils.FixItApplier
2929
import struct SwiftParser.Parser
3030

3131
import struct SwiftSyntax.AbsolutePosition
32+
import struct SwiftSyntax.SourceEdit
3233
import struct SwiftSyntax.SourceFileSyntax
3334
import class SwiftSyntax.SourceLocationConverter
3435
import struct SwiftSyntax.Syntax
@@ -294,11 +295,17 @@ extension SwiftFixIt {
294295
for (sourceFile, diagnostics) in self.diagnosticsPerFile {
295296
numberOfFixItsApplied += diagnostics.count
296297

297-
let result = SwiftIDEUtils.FixItApplier.applyFixes(
298-
from: diagnostics,
299-
filterByMessages: nil,
300-
to: sourceFile.syntax
301-
)
298+
var edits = [SwiftSyntax.SourceEdit]()
299+
edits.reserveCapacity(diagnostics.count)
300+
for diagnostic in diagnostics {
301+
for fixIt in diagnostic.fixIts {
302+
for edit in fixIt.edits {
303+
edits.append(edit)
304+
}
305+
}
306+
}
307+
308+
let result = SwiftIDEUtils.FixItApplier.apply(edits: consume edits, to: sourceFile.syntax)
302309

303310
try self.fileSystem.writeFileContents(sourceFile.path, string: consume result)
304311
}

0 commit comments

Comments
 (0)