Consider dropping the "self:" part, kind of less noisy without it:
struct Foo {
func method()
// can also be written (but obviously there's no need):
func method(Self)
mutating func mutate()
// can also be written as:
func mutate(inout Self)
}
I must admit the first parameter location is quite logical place to put attributes on self (especially if the same attributes can be independently applied to the function as a whole as well to mean a different thing).