6666/// ]);
6767/// # }
6868/// ```
69- #[ macro_export]
69+ #[ macro_export( local_inner_macros ) ]
7070macro_rules! json {
7171 // Hide distracting implementation details from the generated rustdoc.
7272 ( $( $json: tt) +) => {
@@ -81,7 +81,7 @@ macro_rules! json {
8181//
8282// Changes are fine as long as `json_internal!` does not call any new helper
8383// macros and can still be invoked as `json_internal!($($json)+)`.
84- #[ macro_export]
84+ #[ macro_export( local_inner_macros ) ]
8585#[ doc( hidden) ]
8686macro_rules! json_internal {
8787 //////////////////////////////////////////////////////////////////////////
@@ -93,12 +93,12 @@ macro_rules! json_internal {
9393
9494 // Done with trailing comma.
9595 ( @array [ $( $elems: expr, ) * ] ) => {
96- vec ![ $( $elems, ) * ]
96+ json_internal_vec ![ $( $elems, ) * ]
9797 } ;
9898
9999 // Done without trailing comma.
100100 ( @array [ $( $elems: expr) ,* ] ) => {
101- vec ![ $( $elems) ,* ]
101+ json_internal_vec ![ $( $elems) ,* ]
102102 } ;
103103
104104 // Next element is `null`.
@@ -265,7 +265,7 @@ macro_rules! json_internal {
265265 } ;
266266
267267 ( [ ] ) => {
268- $crate:: Value :: Array ( vec ![ ] )
268+ $crate:: Value :: Array ( json_internal_vec ![ ] )
269269 } ;
270270
271271 ( [ $( $tt: tt) + ] ) => {
@@ -291,6 +291,17 @@ macro_rules! json_internal {
291291 } ;
292292}
293293
294+ // The json_internal macro above cannot invoke vec directly because it uses
295+ // local_inner_macros. A vec invocation there would resolve to $crate::vec.
296+ // Instead invoke vec here outside of local_inner_macros.
297+ #[ macro_export]
298+ #[ doc( hidden) ]
299+ macro_rules! json_internal_vec {
300+ ( $( $content: tt) * ) => {
301+ vec![ $( $content) * ]
302+ } ;
303+ }
304+
294305#[ macro_export]
295306#[ doc( hidden) ]
296307macro_rules! json_unexpected {
0 commit comments