Specify one of the conflicting short arguments explicitly using #[arg(short = "x")] instead. (Replace the letter X with whatever you want it to be, naturally.)
No. The error message tells you that you've got a string whereas something that has to do with a char was expected. You can infer from this that instead of a string literal, you should specify a character literal for the value of the attribute, i.e., 'x' rather than "x". (I wasn't sure whether or not non-string attributes are already stable; you could only write strings at that position for a long time.)
Right. Because using 'x' and it works. Huh. That was one of the more subtle ones. I guess long arguments might then have to work with strings. I guess I will have to test that one out.
Thanks!
Now I finally found it in the docs as well, when I knew what to look for.
For future reference: here.
For custom macro/derive attributes, the grammar is now # [ $path ( $($tt)* ) ] — literally anything can appear between the parenthesis. The macro/derive will of course have further restrictions on what it knows how to interpret, but the language doesn't put any restrictions here anymore.
At this point, it's been this permissive definition for the majority of the time custom attributes have been possible.