`AttributeRemover` outputs a leading newline in some cases
Opened this issue · 1 comments
Description
#2247 better isolates the AttributeRemoverTests
to just AttributeRemover
. Along the way, a new assert helper was created that, unlike assertMacroExpansion
, doesn't trim newlines before comparing values.
Notably, this revealed a previously undetected behavior in AttributeRemover
: it outputs an additional leading newline when the removed attribute isn't preceded by any tokens. For instance:
assertSyntaxRemovingTestAttributes {
"""
@Test
var x: Int
"""
} reduction: {
"var x: Int"
}
//failed - Attribute removal did not produce the expected reduced source
//+
// var x: Int
//
//Actual reduced source:
//
//var x: Int
and:
assertSyntaxRemovingTestAttributes {
"""
@Test
/* comment */
var value: Int
"""
} reduction: {
"""
/* comment */
var value: Int
"""
}
//failed - Attribute removal did not produce the expected reduced source
//+
// /* comment */
// var value: Int
//
//Actual reduced source:
//
///* comment */
//var value: Int
The following tests outputs have an extra leading newline:
testEmptyOnOwnLineBeforeVariable
testEmptyTwiceOnOwnLineBeforeVariable
testEmpyNewlineBlockComment
testEmptyAndAttributeOnOwnLinesBeforeVariable
testEmptyOnOwnLineThenEmptyBeforeVariable
Before #2247, this behavior is masked by assertMacroExpansion
. In #2247, the above tests are "fixed" by including the unwanted leading newlines in the expected output and marking those tests with FIXME
s (to be properly fixed in a separate PR).
Steps to Reproduce
No response
Tracked in Apple’s issue tracker as rdar://116607739