-
Notifications
You must be signed in to change notification settings - Fork 448
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Description
First level of nodes in body macro is always formatted even when formatMode
is set to disabled
.
Steps to Reproduce
Consider the following macro:
public struct SourceLocationMacro: BodyMacro {
public static var formatMode: FormatMode { .disabled }
public static func expansion(of node: AttributeSyntax, providingBodyFor declaration: some DeclSyntaxProtocol & WithOptionalCodeBlockSyntax, in context: some MacroExpansionContext) throws -> [CodeBlockItemSyntax] {
if let statements = declaration.body?.statements {
var body: [CodeBlockItemSyntax] = []
statements.forEach { statement in
if let location = context.location(of: statement, at: .afterLeadingTrivia, filePathMode: .filePath) {
let transformed = CodeBlockItemListSyntax {
"\n#sourceLocation(file: \(location.file), line: \(location.line))"
statement
"\n#sourceLocation()"
}
body.append(contentsOf: transformed)
}
}
return body
} else {
return []
}
}
}
Usage example:
@SourceLocationMacro
func f() {
let x: Int = 1
^ Immutable value 'x' was never used; consider replacing with '_' or removing it
}
// Macro Expansion:
{
#sourceLocation(file: "/Users/mateusrodrigues/Desktop/TriviaMacro/Sources/TriviaMacroClient/main.swift", line: 8)
let x: Int = 1
#sourceLocation() }()
}
// Expected Macro Expansion:
{
#sourceLocation(file: "/Users/mateusrodrigues/Desktop/TriviaMacro/Sources/TriviaMacroClient/main.swift", line: 8)
let x: Int = 1
#sourceLocation() }()
}
Discussion: https://forums.swift.org/t/body-macro-formatted-despite-formatmode-disabled/73488/3
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working