PRINT-ATTR INPUT (DISPLAY): struct A(identity!(crate :: S)); PRINT-ATTR RE-COLLECTED (DISPLAY): struct A(identity ! ($crate :: S)) ; PRINT-ATTR INPUT (DEBUG): TokenStream [ Ident { ident: "struct", span: #3 bytes(LO..HI), }, Ident { ident: "A", span: #3 bytes(LO..HI), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "identity", span: #3 bytes(LO..HI), }, Punct { ch: '!', spacing: Alone, span: #3 bytes(LO..HI), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "$crate", span: #3 bytes(LO..HI), }, Punct { ch: ':', spacing: Joint, span: #3 bytes(LO..HI), }, Punct { ch: ':', spacing: Alone, span: #3 bytes(LO..HI), }, Ident { ident: "S", span: #3 bytes(LO..HI), }, ], span: #3 bytes(LO..HI), }, ], span: #3 bytes(LO..HI), }, Punct { ch: ';', spacing: Alone, span: #3 bytes(LO..HI), }, ] PRINT-ATTR INPUT (DISPLAY): struct B(identity!(::dollar_crate_external :: S)); PRINT-ATTR RE-COLLECTED (DISPLAY): struct B(identity ! ($crate :: S)) ; PRINT-ATTR INPUT (DEBUG): TokenStream [ Ident { ident: "struct", span: #10 bytes(LO..HI), }, Ident { ident: "B", span: #10 bytes(LO..HI), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "identity", span: #10 bytes(LO..HI), }, Punct { ch: '!', spacing: Alone, span: #10 bytes(LO..HI), }, Group { delimiter: Parenthesis, stream: TokenStream [ Ident { ident: "$crate", span: #10 bytes(LO..HI), }, Punct { ch: ':', spacing: Joint, span: #10 bytes(LO..HI), }, Punct { ch: ':', spacing: Alone, span: #10 bytes(LO..HI), }, Ident { ident: "S", span: #10 bytes(LO..HI), }, ], span: #10 bytes(LO..HI), }, ], span: #10 bytes(LO..HI), }, Punct { ch: ';', spacing: Alone, span: #10 bytes(LO..HI), }, ]