Deduplicate Token macro documentation
diff --git a/src/token.rs b/src/token.rs
index 57a6d00..b463aa4 100644
--- a/src/token.rs
+++ b/src/token.rs
@@ -701,18 +701,25 @@
     " "           pub struct Group        /// None-delimited group
 }
 
-/// A type-macro that expands to the name of the Rust type representation of a
-/// given token.
-///
-/// See the [token module] documentation for details and examples.
-///
-/// [token module]: token/index.html
-// Unfortunate duplication due to a rustdoc bug.
-// https://github.com/rust-lang/rust/issues/45939
+macro_rules! export_token_macro {
+    ($($rules:tt)*) => {
+        /// A type-macro that expands to the name of the Rust type representation of a
+        /// given token.
+        ///
+        /// See the [token module] documentation for details and examples.
+        ///
+        /// [token module]: token/index.html
+        // Unfortunate duplication due to a rustdoc bug.
+        // https://github.com/rust-lang/rust/issues/45939
+        #[macro_export]
+        macro_rules! Token {
+            $($rules)*
+        }
+    };
+}
+
 #[cfg(syn_can_match_trailing_dollar)]
-#[macro_export]
-#[cfg_attr(rustfmt, rustfmt_skip)]
-macro_rules! Token {
+export_token_macro! {
     (abstract)    => { $crate::token::Abstract };
     (as)          => { $crate::token::As };
     (async)       => { $crate::token::Async };
@@ -814,16 +821,8 @@
     (_)           => { $crate::token::Underscore };
 }
 
-/// A type-macro that expands to the name of the Rust type representation of a
-/// given token.
-///
-/// See the [token module] documentation for details and examples.
-///
-/// [token module]: token/index.html
 #[cfg(not(syn_can_match_trailing_dollar))]
-#[macro_export]
-#[cfg_attr(rustfmt, rustfmt_skip)]
-macro_rules! Token {
+export_token_macro! {
     (abstract)    => { $crate::token::Abstract };
     (as)          => { $crate::token::As };
     (async)       => { $crate::token::Async };