Files
2025-11-03 20:24:57 +01:00

30 lines
1.0 KiB
Swift

import SwiftSyntax
import SwiftSyntaxBuilder
import SwiftSyntaxMacros
#if os(macOS)
private let pathPrefix = "/private"
#else
private let pathPrefix = ""
#endif
enum TemporaryDirectory: BodyMacro {
static func expansion(of _: AttributeSyntax,
providingBodyFor declaration: some DeclSyntaxProtocol & WithOptionalCodeBlockSyntax,
in context: some MacroExpansionContext) -> [CodeBlockItemSyntax] {
guard let body = declaration.body else {
context.diagnose(SwiftLintCoreMacroError.noBody.diagnose(at: declaration))
return []
}
return [
"""
let _currentDirectory = FileManager.default.currentDirectoryPath
FileManager.default.changeCurrentDirectoryPath(
"\(raw: pathPrefix)" + FileManager.default.temporaryDirectory.path
)
defer { FileManager.default.changeCurrentDirectoryPath(_currentDirectory) }
""",
] + Array(body.statements)
}
}