code_ownership 2.2.0 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +30 -27
  3. data/bin/codeownership +1 -0
  4. data/ext/cargo-vendor/bindgen-0.72.1/.cargo-checksum.json +1 -0
  5. data/ext/cargo-vendor/bindgen-0.72.1/.cargo_vcs_info.json +6 -0
  6. data/ext/cargo-vendor/bindgen-0.72.1/Cargo.lock +485 -0
  7. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/Cargo.toml +72 -38
  8. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/Cargo.toml.orig +26 -28
  9. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/README.md +2 -2
  10. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/build.rs +2 -2
  11. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/callbacks.rs +114 -10
  12. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/clang.rs +184 -83
  13. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/bitfield_unit.rs +20 -10
  14. data/ext/cargo-vendor/bindgen-0.72.1/codegen/bitfield_unit_raw_ref_macros.rs +191 -0
  15. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/bitfield_unit_tests.rs +4 -4
  16. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/dyngen.rs +77 -20
  17. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/error.rs +2 -3
  18. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/helpers.rs +106 -66
  19. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/impl_debug.rs +32 -34
  20. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/impl_partialeq.rs +5 -5
  21. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/mod.rs +1197 -679
  22. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/postprocessing/merge_extern_blocks.rs +3 -3
  23. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/postprocessing/sort_semantically.rs +3 -3
  24. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/serialize.rs +33 -34
  25. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/struct_layout.rs +33 -26
  26. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/deps.rs +1 -1
  27. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/diagnostics.rs +22 -65
  28. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/extra_assertions.rs +1 -1
  29. data/ext/cargo-vendor/bindgen-0.72.1/features.rs +570 -0
  30. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/derive.rs +69 -75
  31. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/has_destructor.rs +5 -6
  32. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/has_float.rs +13 -17
  33. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/has_type_param_in_array.rs +22 -32
  34. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/has_vtable.rs +11 -16
  35. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/mod.rs +15 -20
  36. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/sizedness.rs +13 -21
  37. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/analysis/template_params.rs +20 -26
  38. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/annotations.rs +18 -15
  39. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/comment.rs +2 -2
  40. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/comp.rs +54 -29
  41. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/context.rs +205 -136
  42. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/derive.rs +5 -10
  43. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/dot.rs +3 -4
  44. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/enum_ty.rs +5 -7
  45. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/function.rs +27 -28
  46. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/int.rs +7 -6
  47. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/item.rs +92 -132
  48. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/item_kind.rs +7 -7
  49. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/layout.rs +11 -23
  50. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/module.rs +2 -2
  51. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/objc.rs +22 -33
  52. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/template.rs +26 -33
  53. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/traversal.rs +4 -5
  54. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/ty.rs +63 -88
  55. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/var.rs +73 -38
  56. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/lib.rs +186 -144
  57. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/log_stubs.rs +6 -0
  58. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/options/as_args.rs +1 -1
  59. data/ext/cargo-vendor/bindgen-0.72.1/options/cli.rs +1151 -0
  60. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/options/mod.rs +234 -27
  61. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/regex_set.rs +23 -28
  62. data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/time.rs +4 -4
  63. data/ext/cargo-vendor/rb-sys-0.9.130/.cargo-checksum.json +1 -0
  64. data/ext/cargo-vendor/rb-sys-0.9.130/.cargo_vcs_info.json +6 -0
  65. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/Cargo.lock +23 -31
  66. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/Cargo.toml +5 -4
  67. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/Cargo.toml.orig +5 -4
  68. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/build/main.rs +7 -1
  69. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/build/stable_api_config.rs +30 -6
  70. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/build/version.rs +14 -6
  71. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/bindings.rs +1 -0
  72. data/ext/cargo-vendor/rb-sys-0.9.130/src/macros.rs +701 -0
  73. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/memory.rs +17 -6
  74. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/stable_api/compiled.c +169 -10
  75. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/stable_api/compiled.rs +209 -14
  76. data/ext/cargo-vendor/rb-sys-0.9.130/src/stable_api/ruby_2_7.rs +770 -0
  77. data/ext/cargo-vendor/rb-sys-0.9.130/src/stable_api/ruby_3_0.rs +773 -0
  78. data/ext/cargo-vendor/rb-sys-0.9.130/src/stable_api/ruby_3_1.rs +766 -0
  79. data/ext/cargo-vendor/rb-sys-0.9.130/src/stable_api/ruby_3_2.rs +764 -0
  80. data/ext/cargo-vendor/rb-sys-0.9.130/src/stable_api/ruby_3_3.rs +777 -0
  81. data/ext/cargo-vendor/rb-sys-0.9.130/src/stable_api/ruby_3_4.rs +788 -0
  82. data/ext/cargo-vendor/rb-sys-0.9.130/src/stable_api/ruby_4_0.rs +784 -0
  83. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/stable_api.rs +213 -9
  84. data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/utils.rs +12 -7
  85. data/ext/cargo-vendor/rb-sys-build-0.9.130/.cargo-checksum.json +1 -0
  86. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/.cargo_vcs_info.json +1 -1
  87. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/Cargo.lock +19 -27
  88. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/Cargo.toml +8 -3
  89. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/Cargo.toml.orig +4 -3
  90. data/ext/cargo-vendor/rb-sys-build-0.9.130/src/bindings/gc_stress.rs +303 -0
  91. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/bindings/stable_api.rs +102 -11
  92. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/bindings.rs +19 -13
  93. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/cc.rs +1 -1
  94. data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/rb_config.rs +199 -2
  95. data/ext/cargo-vendor/rb-sys-build-0.9.130/tests/fixtures/rubyopt_stdout.rb +1 -0
  96. data/ext/cargo-vendor/rb-sys-build-0.9.130/tests/rubyopt.rs +17 -0
  97. data/ext/cargo-vendor/rb-sys-env-0.2.3/.cargo-checksum.json +1 -0
  98. data/ext/cargo-vendor/rb-sys-env-0.2.3/.cargo_vcs_info.json +6 -0
  99. data/ext/cargo-vendor/rb-sys-env-0.2.3/Cargo.lock +7 -0
  100. data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/Cargo.toml +2 -2
  101. data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/Cargo.toml.orig +2 -2
  102. data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/readme.md +0 -2
  103. data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/src/ruby_version.rs +3 -1
  104. data/ext/cargo-vendor/rustc-hash-2.1.3/.cargo-checksum.json +1 -0
  105. data/ext/cargo-vendor/rustc-hash-2.1.3/.cargo_vcs_info.json +6 -0
  106. data/ext/cargo-vendor/rustc-hash-2.1.3/.github/workflows/rust.yml +73 -0
  107. data/ext/cargo-vendor/rustc-hash-2.1.3/CHANGELOG.md +41 -0
  108. data/ext/cargo-vendor/rustc-hash-2.1.3/CODE_OF_CONDUCT.md +3 -0
  109. data/ext/cargo-vendor/rustc-hash-2.1.3/Cargo.lock +90 -0
  110. data/ext/cargo-vendor/rustc-hash-2.1.3/Cargo.toml +50 -0
  111. data/ext/cargo-vendor/rustc-hash-2.1.3/Cargo.toml.orig +20 -0
  112. data/ext/cargo-vendor/rustc-hash-2.1.3/LICENSE-APACHE +176 -0
  113. data/ext/cargo-vendor/rustc-hash-2.1.3/LICENSE-MIT +23 -0
  114. data/ext/cargo-vendor/rustc-hash-2.1.3/README.md +42 -0
  115. data/ext/cargo-vendor/rustc-hash-2.1.3/src/lib.rs +472 -0
  116. data/ext/cargo-vendor/rustc-hash-2.1.3/src/random_state.rs +101 -0
  117. data/ext/cargo-vendor/rustc-hash-2.1.3/src/seeded_state.rs +76 -0
  118. data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/.cargo-checksum.json +1 -1
  119. data/ext/cargo-vendor/serde-1.0.229/.cargo_vcs_info.json +6 -0
  120. data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/Cargo.lock +13 -13
  121. data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/Cargo.toml +2 -2
  122. data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/Cargo.toml.orig +2 -2
  123. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde-1.0.229}/README.md +3 -3
  124. data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/build.rs +2 -2
  125. data/ext/cargo-vendor/{serde_core-1.0.228/src → serde-1.0.229/src/core}/de/impls.rs +4 -4
  126. data/ext/cargo-vendor/{serde_core-1.0.228/src → serde-1.0.229/src/core}/lib.rs +2 -2
  127. data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/lib.rs +3 -3
  128. data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/.cargo-checksum.json +1 -1
  129. data/ext/cargo-vendor/serde_core-1.0.229/.cargo_vcs_info.json +6 -0
  130. data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/Cargo.lock +11 -11
  131. data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/Cargo.toml +2 -2
  132. data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/Cargo.toml.orig +2 -2
  133. data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/build.rs +5 -5
  134. data/ext/cargo-vendor/{serde-1.0.228/src/core → serde_core-1.0.229/src}/de/impls.rs +4 -4
  135. data/ext/cargo-vendor/{serde-1.0.228/src/core → serde_core-1.0.229/src}/lib.rs +2 -2
  136. data/ext/cargo-vendor/serde_derive-1.0.229/.cargo-checksum.json +1 -0
  137. data/ext/cargo-vendor/serde_derive-1.0.229/.cargo_vcs_info.json +6 -0
  138. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/Cargo.lock +29 -18
  139. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/Cargo.toml +3 -3
  140. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/Cargo.toml.orig +2 -2
  141. data/ext/cargo-vendor/{serde-1.0.228 → serde_derive-1.0.229}/README.md +3 -3
  142. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/bound.rs +80 -59
  143. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/enum_adjacently.rs +46 -45
  144. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/enum_externally.rs +3 -2
  145. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de.rs +10 -7
  146. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/ast.rs +15 -8
  147. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/attr.rs +18 -31
  148. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/ctxt.rs +3 -4
  149. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/receiver.rs +2 -2
  150. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/lib.rs +1 -1
  151. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/pretend.rs +7 -7
  152. data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/ser.rs +94 -94
  153. data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/.cargo-checksum.json +1 -1
  154. data/ext/cargo-vendor/serde_magnus-0.11.0/.cargo_vcs_info.json +6 -0
  155. data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/Cargo.lock +71 -73
  156. data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/Cargo.toml +2 -2
  157. data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/Cargo.toml.orig +2 -2
  158. data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/README.md +1 -1
  159. data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/de/deserializer.rs +2 -2
  160. data/ext/cargo-vendor/syn-3.0.9/.cargo-checksum.json +1 -0
  161. data/ext/cargo-vendor/syn-3.0.9/.cargo_vcs_info.json +6 -0
  162. data/ext/cargo-vendor/syn-3.0.9/Cargo.lock +1948 -0
  163. data/ext/cargo-vendor/syn-3.0.9/Cargo.toml +268 -0
  164. data/ext/cargo-vendor/syn-3.0.9/Cargo.toml.orig +95 -0
  165. data/ext/cargo-vendor/{lazycell-1.3.0 → syn-3.0.9}/LICENSE-APACHE +0 -25
  166. data/ext/cargo-vendor/syn-3.0.9/README.md +297 -0
  167. data/ext/cargo-vendor/syn-3.0.9/benches/file.rs +59 -0
  168. data/ext/cargo-vendor/syn-3.0.9/benches/rust.rs +189 -0
  169. data/ext/cargo-vendor/syn-3.0.9/src/attr.rs +841 -0
  170. data/ext/cargo-vendor/syn-3.0.9/src/bigint.rs +68 -0
  171. data/ext/cargo-vendor/syn-3.0.9/src/buffer.rs +462 -0
  172. data/ext/cargo-vendor/syn-3.0.9/src/classify.rs +311 -0
  173. data/ext/cargo-vendor/syn-3.0.9/src/custom_keyword.rs +260 -0
  174. data/ext/cargo-vendor/syn-3.0.9/src/custom_punctuation.rs +305 -0
  175. data/ext/cargo-vendor/syn-3.0.9/src/data.rs +489 -0
  176. data/ext/cargo-vendor/syn-3.0.9/src/derive.rs +260 -0
  177. data/ext/cargo-vendor/syn-3.0.9/src/discouraged.rs +233 -0
  178. data/ext/cargo-vendor/syn-3.0.9/src/drops.rs +58 -0
  179. data/ext/cargo-vendor/syn-3.0.9/src/error.rs +552 -0
  180. data/ext/cargo-vendor/syn-3.0.9/src/export.rs +73 -0
  181. data/ext/cargo-vendor/syn-3.0.9/src/expr.rs +4249 -0
  182. data/ext/cargo-vendor/syn-3.0.9/src/ext.rs +180 -0
  183. data/ext/cargo-vendor/syn-3.0.9/src/file.rs +136 -0
  184. data/ext/cargo-vendor/syn-3.0.9/src/fixup.rs +773 -0
  185. data/ext/cargo-vendor/syn-3.0.9/src/gen/clone.rs +2394 -0
  186. data/ext/cargo-vendor/syn-3.0.9/src/gen/debug.rs +3399 -0
  187. data/ext/cargo-vendor/syn-3.0.9/src/gen/eq.rs +2459 -0
  188. data/ext/cargo-vendor/syn-3.0.9/src/gen/fold.rs +3934 -0
  189. data/ext/cargo-vendor/syn-3.0.9/src/gen/hash.rs +3040 -0
  190. data/ext/cargo-vendor/syn-3.0.9/src/gen/token.css +744 -0
  191. data/ext/cargo-vendor/syn-3.0.9/src/gen/visit.rs +4037 -0
  192. data/ext/cargo-vendor/syn-3.0.9/src/gen/visit_mut.rs +3824 -0
  193. data/ext/cargo-vendor/syn-3.0.9/src/generics.rs +1490 -0
  194. data/ext/cargo-vendor/syn-3.0.9/src/group.rs +294 -0
  195. data/ext/cargo-vendor/syn-3.0.9/src/ident.rs +109 -0
  196. data/ext/cargo-vendor/syn-3.0.9/src/item.rs +3923 -0
  197. data/ext/cargo-vendor/syn-3.0.9/src/lib.rs +1132 -0
  198. data/ext/cargo-vendor/syn-3.0.9/src/lifetime.rs +193 -0
  199. data/ext/cargo-vendor/syn-3.0.9/src/lit.rs +1881 -0
  200. data/ext/cargo-vendor/syn-3.0.9/src/lookahead.rs +350 -0
  201. data/ext/cargo-vendor/syn-3.0.9/src/mac.rs +225 -0
  202. data/ext/cargo-vendor/syn-3.0.9/src/macros.rs +151 -0
  203. data/ext/cargo-vendor/syn-3.0.9/src/meta.rs +427 -0
  204. data/ext/cargo-vendor/syn-3.0.9/src/op.rs +219 -0
  205. data/ext/cargo-vendor/syn-3.0.9/src/parse.rs +1420 -0
  206. data/ext/cargo-vendor/syn-3.0.9/src/parse_macro_input.rs +128 -0
  207. data/ext/cargo-vendor/syn-3.0.9/src/parse_quote.rs +261 -0
  208. data/ext/cargo-vendor/syn-3.0.9/src/pat.rs +994 -0
  209. data/ext/cargo-vendor/syn-3.0.9/src/path.rs +972 -0
  210. data/ext/cargo-vendor/syn-3.0.9/src/precedence.rs +210 -0
  211. data/ext/cargo-vendor/syn-3.0.9/src/print.rs +16 -0
  212. data/ext/cargo-vendor/syn-3.0.9/src/punctuated.rs +1200 -0
  213. data/ext/cargo-vendor/syn-3.0.9/src/restriction.rs +160 -0
  214. data/ext/cargo-vendor/syn-3.0.9/src/scan_expr.rs +270 -0
  215. data/ext/cargo-vendor/syn-3.0.9/src/sealed.rs +4 -0
  216. data/ext/cargo-vendor/syn-3.0.9/src/span.rs +63 -0
  217. data/ext/cargo-vendor/syn-3.0.9/src/spanned.rs +118 -0
  218. data/ext/cargo-vendor/syn-3.0.9/src/stmt.rs +536 -0
  219. data/ext/cargo-vendor/syn-3.0.9/src/thread.rs +60 -0
  220. data/ext/cargo-vendor/syn-3.0.9/src/token.rs +1103 -0
  221. data/ext/cargo-vendor/syn-3.0.9/src/tt.rs +97 -0
  222. data/ext/cargo-vendor/syn-3.0.9/src/ty.rs +1347 -0
  223. data/ext/cargo-vendor/syn-3.0.9/src/verbatim.rs +32 -0
  224. data/ext/cargo-vendor/syn-3.0.9/src/whitespace.rs +65 -0
  225. data/ext/cargo-vendor/syn-3.0.9/tests/common/eq.rs +939 -0
  226. data/ext/cargo-vendor/syn-3.0.9/tests/common/mod.rs +6 -0
  227. data/ext/cargo-vendor/syn-3.0.9/tests/common/parse.rs +51 -0
  228. data/ext/cargo-vendor/syn-3.0.9/tests/common/visit.rs +119 -0
  229. data/ext/cargo-vendor/syn-3.0.9/tests/debug/gen.rs +5394 -0
  230. data/ext/cargo-vendor/syn-3.0.9/tests/debug/mod.rs +147 -0
  231. data/ext/cargo-vendor/syn-3.0.9/tests/macros/mod.rs +7 -0
  232. data/ext/cargo-vendor/syn-3.0.9/tests/regression/issue1108.rs +5 -0
  233. data/ext/cargo-vendor/syn-3.0.9/tests/regression/issue1235.rs +32 -0
  234. data/ext/cargo-vendor/syn-3.0.9/tests/regression.rs +5 -0
  235. data/ext/cargo-vendor/syn-3.0.9/tests/repo/mod.rs +789 -0
  236. data/ext/cargo-vendor/syn-3.0.9/tests/repo/progress.rs +37 -0
  237. data/ext/cargo-vendor/syn-3.0.9/tests/snapshot/mod.rs +68 -0
  238. data/ext/cargo-vendor/syn-3.0.9/tests/test_attribute.rs +231 -0
  239. data/ext/cargo-vendor/syn-3.0.9/tests/test_derive_input.rs +801 -0
  240. data/ext/cargo-vendor/syn-3.0.9/tests/test_expr.rs +1721 -0
  241. data/ext/cargo-vendor/syn-3.0.9/tests/test_generics.rs +363 -0
  242. data/ext/cargo-vendor/syn-3.0.9/tests/test_grouping.rs +59 -0
  243. data/ext/cargo-vendor/syn-3.0.9/tests/test_ident.rs +87 -0
  244. data/ext/cargo-vendor/syn-3.0.9/tests/test_item.rs +374 -0
  245. data/ext/cargo-vendor/syn-3.0.9/tests/test_lit.rs +335 -0
  246. data/ext/cargo-vendor/syn-3.0.9/tests/test_meta.rs +180 -0
  247. data/ext/cargo-vendor/syn-3.0.9/tests/test_parse_buffer.rs +104 -0
  248. data/ext/cargo-vendor/syn-3.0.9/tests/test_parse_quote.rs +175 -0
  249. data/ext/cargo-vendor/syn-3.0.9/tests/test_parse_stream.rs +187 -0
  250. data/ext/cargo-vendor/syn-3.0.9/tests/test_pat.rs +158 -0
  251. data/ext/cargo-vendor/syn-3.0.9/tests/test_path.rs +117 -0
  252. data/ext/cargo-vendor/syn-3.0.9/tests/test_precedence.rs +560 -0
  253. data/ext/cargo-vendor/syn-3.0.9/tests/test_punctuated.rs +92 -0
  254. data/ext/cargo-vendor/syn-3.0.9/tests/test_receiver.rs +275 -0
  255. data/ext/cargo-vendor/syn-3.0.9/tests/test_round_trip.rs +226 -0
  256. data/ext/cargo-vendor/syn-3.0.9/tests/test_shebang.rs +77 -0
  257. data/ext/cargo-vendor/syn-3.0.9/tests/test_size.rs +54 -0
  258. data/ext/cargo-vendor/syn-3.0.9/tests/test_stmt.rs +378 -0
  259. data/ext/cargo-vendor/syn-3.0.9/tests/test_token_trees.rs +38 -0
  260. data/ext/cargo-vendor/syn-3.0.9/tests/test_ty.rs +479 -0
  261. data/ext/cargo-vendor/syn-3.0.9/tests/test_unparenthesize.rs +71 -0
  262. data/ext/cargo-vendor/syn-3.0.9/tests/test_visibility.rs +193 -0
  263. data/ext/cargo-vendor/syn-3.0.9/tests/zzz_stable.rs +33 -0
  264. data/ext/code_ownership/Cargo.toml +1 -1
  265. data/ext/code_ownership/src/lib.rs +2 -2
  266. data/lib/code_ownership/version.rb +1 -1
  267. data/lib/code_ownership.rb +1 -1
  268. metadata +400 -293
  269. data/ext/cargo-vendor/bindgen-0.69.5/.cargo-checksum.json +0 -1
  270. data/ext/cargo-vendor/bindgen-0.69.5/.cargo_vcs_info.json +0 -6
  271. data/ext/cargo-vendor/bindgen-0.69.5/features.rs +0 -296
  272. data/ext/cargo-vendor/lazycell-1.3.0/.cargo-checksum.json +0 -1
  273. data/ext/cargo-vendor/lazycell-1.3.0/.cargo_vcs_info.json +0 -5
  274. data/ext/cargo-vendor/lazycell-1.3.0/CHANGELOG.md +0 -197
  275. data/ext/cargo-vendor/lazycell-1.3.0/Cargo.toml +0 -34
  276. data/ext/cargo-vendor/lazycell-1.3.0/Cargo.toml.orig +0 -27
  277. data/ext/cargo-vendor/lazycell-1.3.0/LICENSE-MIT +0 -26
  278. data/ext/cargo-vendor/lazycell-1.3.0/README.md +0 -73
  279. data/ext/cargo-vendor/lazycell-1.3.0/src/lib.rs +0 -680
  280. data/ext/cargo-vendor/lazycell-1.3.0/src/serde_impl.rs +0 -86
  281. data/ext/cargo-vendor/rb-sys-0.9.117/.cargo-checksum.json +0 -1
  282. data/ext/cargo-vendor/rb-sys-0.9.117/.cargo_vcs_info.json +0 -6
  283. data/ext/cargo-vendor/rb-sys-0.9.117/src/macros.rs +0 -371
  284. data/ext/cargo-vendor/rb-sys-0.9.117/src/stable_api/ruby_2_6.rs +0 -324
  285. data/ext/cargo-vendor/rb-sys-0.9.117/src/stable_api/ruby_2_7.rs +0 -324
  286. data/ext/cargo-vendor/rb-sys-0.9.117/src/stable_api/ruby_3_0.rs +0 -332
  287. data/ext/cargo-vendor/rb-sys-0.9.117/src/stable_api/ruby_3_1.rs +0 -325
  288. data/ext/cargo-vendor/rb-sys-0.9.117/src/stable_api/ruby_3_2.rs +0 -323
  289. data/ext/cargo-vendor/rb-sys-0.9.117/src/stable_api/ruby_3_3.rs +0 -339
  290. data/ext/cargo-vendor/rb-sys-0.9.117/src/stable_api/ruby_3_4.rs +0 -339
  291. data/ext/cargo-vendor/rb-sys-build-0.9.117/.cargo-checksum.json +0 -1
  292. data/ext/cargo-vendor/rb-sys-env-0.2.2/.cargo-checksum.json +0 -1
  293. data/ext/cargo-vendor/rb-sys-env-0.2.2/.cargo_vcs_info.json +0 -6
  294. data/ext/cargo-vendor/rustc-hash-1.1.0/.cargo-checksum.json +0 -1
  295. data/ext/cargo-vendor/rustc-hash-1.1.0/.cargo_vcs_info.json +0 -5
  296. data/ext/cargo-vendor/rustc-hash-1.1.0/CODE_OF_CONDUCT.md +0 -40
  297. data/ext/cargo-vendor/rustc-hash-1.1.0/Cargo.toml +0 -25
  298. data/ext/cargo-vendor/rustc-hash-1.1.0/Cargo.toml.orig +0 -13
  299. data/ext/cargo-vendor/rustc-hash-1.1.0/LICENSE-APACHE +0 -201
  300. data/ext/cargo-vendor/rustc-hash-1.1.0/README.md +0 -38
  301. data/ext/cargo-vendor/rustc-hash-1.1.0/src/lib.rs +0 -148
  302. data/ext/cargo-vendor/serde-1.0.228/.cargo_vcs_info.json +0 -6
  303. data/ext/cargo-vendor/serde_core-1.0.228/.cargo_vcs_info.json +0 -6
  304. data/ext/cargo-vendor/serde_derive-1.0.228/.cargo-checksum.json +0 -1
  305. data/ext/cargo-vendor/serde_derive-1.0.228/.cargo_vcs_info.json +0 -6
  306. data/ext/cargo-vendor/serde_magnus-0.10.0/.cargo_vcs_info.json +0 -6
  307. /data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/LICENSE +0 -0
  308. /data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/codegen/postprocessing/mod.rs +0 -0
  309. /data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/ir/mod.rs +0 -0
  310. /data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/options/helpers.rs +0 -0
  311. /data/ext/cargo-vendor/{bindgen-0.69.5 → bindgen-0.72.1}/parse.rs +0 -0
  312. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/LICENSE-APACHE +0 -0
  313. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/LICENSE-MIT +0 -0
  314. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/bin/release.sh +0 -0
  315. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/build/features.rs +0 -0
  316. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/readme.md +0 -0
  317. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/hidden.rs +0 -0
  318. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/lib.rs +0 -0
  319. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/ruby_abi_version.rs +0 -0
  320. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/special_consts.rs +0 -0
  321. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/symbol.rs +0 -0
  322. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/tracking_allocator.rs +0 -0
  323. /data/ext/cargo-vendor/{rb-sys-0.9.117 → rb-sys-0.9.130}/src/value_type.rs +0 -0
  324. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/LICENSE-APACHE +0 -0
  325. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/LICENSE-MIT +0 -0
  326. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/bindings/sanitizer.rs +0 -0
  327. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/bindings/wrapper.h +0 -0
  328. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/lib.rs +0 -0
  329. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/rb_config/flags.rs +0 -0
  330. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/rb_config/library.rs +0 -0
  331. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/rb_config/search_path.rs +0 -0
  332. /data/ext/cargo-vendor/{rb-sys-build-0.9.117 → rb-sys-build-0.9.130}/src/utils.rs +0 -0
  333. /data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/LICENSE-APACHE +0 -0
  334. /data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/LICENSE-MIT +0 -0
  335. /data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/build.rs +0 -0
  336. /data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/src/defines.rs +0 -0
  337. /data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/src/lib.rs +0 -0
  338. /data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/src/rb_env.rs +0 -0
  339. /data/ext/cargo-vendor/{rb-sys-env-0.2.2 → rb-sys-env-0.2.3}/src/utils.rs +0 -0
  340. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/LICENSE-APACHE +0 -0
  341. /data/ext/cargo-vendor/{rustc-hash-1.1.0 → serde-1.0.229}/LICENSE-MIT +0 -0
  342. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/crates-io.md +0 -0
  343. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/crate_root.rs +0 -0
  344. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/de/ignored_any.rs +0 -0
  345. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/de/mod.rs +0 -0
  346. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/de/value.rs +0 -0
  347. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/format.rs +0 -0
  348. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/macros.rs +0 -0
  349. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/private/content.rs +0 -0
  350. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/private/doc.rs +0 -0
  351. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/private/mod.rs +0 -0
  352. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/private/seed.rs +0 -0
  353. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/private/size_hint.rs +0 -0
  354. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/private/string.rs +0 -0
  355. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/ser/fmt.rs +0 -0
  356. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/ser/impls.rs +0 -0
  357. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/ser/impossible.rs +0 -0
  358. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/ser/mod.rs +0 -0
  359. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/core/std_error.rs +0 -0
  360. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/integer128.rs +0 -0
  361. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/private/de.rs +0 -0
  362. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/private/mod.rs +0 -0
  363. /data/ext/cargo-vendor/{serde-1.0.228 → serde-1.0.229}/src/private/ser.rs +0 -0
  364. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/LICENSE-APACHE +0 -0
  365. /data/ext/cargo-vendor/{serde-1.0.228 → serde_core-1.0.229}/LICENSE-MIT +0 -0
  366. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/README.md +0 -0
  367. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/crate_root.rs +0 -0
  368. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/de/ignored_any.rs +0 -0
  369. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/de/mod.rs +0 -0
  370. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/de/value.rs +0 -0
  371. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/format.rs +0 -0
  372. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/macros.rs +0 -0
  373. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/private/content.rs +0 -0
  374. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/private/doc.rs +0 -0
  375. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/private/mod.rs +0 -0
  376. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/private/seed.rs +0 -0
  377. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/private/size_hint.rs +0 -0
  378. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/private/string.rs +0 -0
  379. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/ser/fmt.rs +0 -0
  380. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/ser/impls.rs +0 -0
  381. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/ser/impossible.rs +0 -0
  382. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/ser/mod.rs +0 -0
  383. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_core-1.0.229}/src/std_error.rs +0 -0
  384. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/LICENSE-APACHE +0 -0
  385. /data/ext/cargo-vendor/{serde_core-1.0.228 → serde_derive-1.0.229}/LICENSE-MIT +0 -0
  386. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/crates-io.md +0 -0
  387. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/enum_.rs +0 -0
  388. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/enum_internally.rs +0 -0
  389. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/enum_untagged.rs +0 -0
  390. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/identifier.rs +0 -0
  391. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/struct_.rs +0 -0
  392. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/tuple.rs +0 -0
  393. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/de/unit.rs +0 -0
  394. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/deprecated.rs +0 -0
  395. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/dummy.rs +0 -0
  396. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/fragment.rs +0 -0
  397. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/case.rs +0 -0
  398. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/check.rs +0 -0
  399. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/mod.rs +0 -0
  400. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/name.rs +0 -0
  401. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/respan.rs +0 -0
  402. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/internals/symbol.rs +0 -0
  403. /data/ext/cargo-vendor/{serde_derive-1.0.228 → serde_derive-1.0.229}/src/this.rs +0 -0
  404. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/LICENSE +0 -0
  405. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/de/array_deserializer.rs +0 -0
  406. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/de/array_enumerator.rs +0 -0
  407. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/de/enum_deserializer.rs +0 -0
  408. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/de/hash_deserializer.rs +0 -0
  409. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/de/mod.rs +0 -0
  410. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/de/variant_deserializer.rs +0 -0
  411. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/error.rs +0 -0
  412. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/lib.rs +0 -0
  413. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/enums.rs +0 -0
  414. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/map_serializer.rs +0 -0
  415. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/mod.rs +0 -0
  416. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/seq_serializer.rs +0 -0
  417. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/serializer.rs +0 -0
  418. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/struct_serializer.rs +0 -0
  419. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/struct_variant_serializer.rs +0 -0
  420. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/src/ser/tuple_variant_serializer.rs +0 -0
  421. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_arrays.rs +0 -0
  422. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_booleans.rs +0 -0
  423. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_enums.rs +0 -0
  424. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_floats.rs +0 -0
  425. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_integers.rs +0 -0
  426. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_maps.rs +0 -0
  427. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_options.rs +0 -0
  428. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_results.rs +0 -0
  429. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_strings.rs +0 -0
  430. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_structs.rs +0 -0
  431. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_tuples.rs +0 -0
  432. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/deserializing_vecs.rs +0 -0
  433. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_arrays.rs +0 -0
  434. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_booleans.rs +0 -0
  435. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_enums.rs +0 -0
  436. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_floats.rs +0 -0
  437. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_integers.rs +0 -0
  438. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_maps.rs +0 -0
  439. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_options.rs +0 -0
  440. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_results.rs +0 -0
  441. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_strings.rs +0 -0
  442. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_structs.rs +0 -0
  443. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_tuples.rs +0 -0
  444. /data/ext/cargo-vendor/{serde_magnus-0.10.0 → serde_magnus-0.11.0}/tests/serializing_vecs.rs +0 -0
  445. /data/ext/cargo-vendor/{serde_derive-1.0.228 → syn-3.0.9}/LICENSE-MIT +0 -0
@@ -0,0 +1,1721 @@
1
+ #![cfg(not(miri))]
2
+ #![recursion_limit = "1024"]
3
+ #![feature(rustc_private)]
4
+ #![allow(
5
+ clippy::assert_is_empty,
6
+ clippy::elidable_lifetime_names,
7
+ clippy::match_like_matches_macro,
8
+ clippy::needless_lifetimes,
9
+ clippy::single_element_loop,
10
+ clippy::too_many_lines,
11
+ clippy::uninlined_format_args,
12
+ clippy::unreadable_literal
13
+ )]
14
+
15
+ #[macro_use]
16
+ mod macros;
17
+ #[macro_use]
18
+ mod snapshot;
19
+
20
+ mod common;
21
+ mod debug;
22
+
23
+ use crate::common::visit::{AsIfPrinted, FlattenParens};
24
+ use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream};
25
+ use quote::{quote, ToTokens as _};
26
+ use std::process::ExitCode;
27
+ use syn::punctuated::Punctuated;
28
+ use syn::visit_mut::VisitMut as _;
29
+ use syn::{
30
+ parse_quote, token, AngleBracketedGenericArguments, Arm, BinOp, Block, BlockModifiers,
31
+ ClosureModifiers, Expr, ExprArray, ExprAssign, ExprAsync, ExprAwait, ExprBinary, ExprBlock,
32
+ ExprBreak, ExprCall, ExprCast, ExprClosure, ExprConst, ExprContinue, ExprField, ExprForLoop,
33
+ ExprIf, ExprIndex, ExprLet, ExprLit, ExprLoop, ExprMacro, ExprMatch, ExprMethodCall, ExprPath,
34
+ ExprRange, ExprRawAddr, ExprReference, ExprReturn, ExprStruct, ExprTry, ExprTryBlock,
35
+ ExprTuple, ExprUnary, ExprUnsafe, ExprWhile, ExprYield, GenericArgument, Label, Lifetime, Lit,
36
+ LitInt, Macro, MacroDelimiter, Member, Pat, PatGuard, PatWild, Path, PathArguments,
37
+ PathSegment, PointerMutability, QSelf, RangeLimits, ReturnType, Stmt, Token, Type, TypePath,
38
+ UnOp,
39
+ };
40
+
41
+ #[test]
42
+ fn test_expr_parse() {
43
+ let tokens = quote!(..100u32);
44
+ snapshot!(tokens as Expr, @r#"
45
+ Expr::Range {
46
+ limits: RangeLimits::HalfOpen,
47
+ end: Some(Expr::Lit {
48
+ lit: 100u32,
49
+ }),
50
+ }
51
+ "#);
52
+
53
+ let tokens = quote!(..100u32);
54
+ snapshot!(tokens as ExprRange, @r#"
55
+ ExprRange {
56
+ limits: RangeLimits::HalfOpen,
57
+ end: Some(Expr::Lit {
58
+ lit: 100u32,
59
+ }),
60
+ }
61
+ "#);
62
+ }
63
+
64
+ #[test]
65
+ fn test_await() {
66
+ // Must not parse as Expr::Field.
67
+ let tokens = quote!(fut.await);
68
+
69
+ snapshot!(tokens as Expr, @r#"
70
+ Expr::Await {
71
+ base: Expr::Path {
72
+ path: Path {
73
+ segments: [
74
+ PathSegment {
75
+ ident: "fut",
76
+ },
77
+ ],
78
+ },
79
+ },
80
+ }
81
+ "#);
82
+ }
83
+
84
+ #[rustfmt::skip]
85
+ #[test]
86
+ fn test_tuple_multi_index() {
87
+ let expected = snapshot!("tuple.0.0" as Expr, @r#"
88
+ Expr::Field {
89
+ base: Expr::Field {
90
+ base: Expr::Path {
91
+ path: Path {
92
+ segments: [
93
+ PathSegment {
94
+ ident: "tuple",
95
+ },
96
+ ],
97
+ },
98
+ },
99
+ member: Member::Unnamed(Index {
100
+ index: 0,
101
+ }),
102
+ },
103
+ member: Member::Unnamed(Index {
104
+ index: 0,
105
+ }),
106
+ }
107
+ "#);
108
+
109
+ for &input in &[
110
+ "tuple .0.0",
111
+ "tuple. 0.0",
112
+ "tuple.0 .0",
113
+ "tuple.0. 0",
114
+ "tuple . 0 . 0",
115
+ ] {
116
+ assert_eq!(expected, syn::parse_str(input).unwrap());
117
+ }
118
+
119
+ for tokens in [
120
+ quote!(tuple.0.0),
121
+ quote!(tuple .0.0),
122
+ quote!(tuple. 0.0),
123
+ quote!(tuple.0 .0),
124
+ quote!(tuple.0. 0),
125
+ quote!(tuple . 0 . 0),
126
+ ] {
127
+ assert_eq!(expected, syn::parse2(tokens).unwrap());
128
+ }
129
+ }
130
+
131
+ #[test]
132
+ fn test_macro_variable_func() {
133
+ // mimics the token stream corresponding to `$fn()`
134
+ let path = Group::new(Delimiter::None, quote!(f));
135
+ let tokens = quote!(#path());
136
+
137
+ snapshot!(tokens as Expr, @r#"
138
+ Expr::Call {
139
+ func: Expr::Group {
140
+ expr: Expr::Path {
141
+ path: Path {
142
+ segments: [
143
+ PathSegment {
144
+ ident: "f",
145
+ },
146
+ ],
147
+ },
148
+ },
149
+ },
150
+ }
151
+ "#);
152
+
153
+ let path = Group::new(Delimiter::None, quote! { #[inside] f });
154
+ let tokens = quote!(#[outside] #path());
155
+
156
+ snapshot!(tokens as Expr, @r#"
157
+ Expr::Call {
158
+ attrs: [
159
+ Attribute {
160
+ style: AttrStyle::Outer,
161
+ meta: Meta::Path {
162
+ segments: [
163
+ PathSegment {
164
+ ident: "outside",
165
+ },
166
+ ],
167
+ },
168
+ },
169
+ ],
170
+ func: Expr::Group {
171
+ expr: Expr::Path {
172
+ attrs: [
173
+ Attribute {
174
+ style: AttrStyle::Outer,
175
+ meta: Meta::Path {
176
+ segments: [
177
+ PathSegment {
178
+ ident: "inside",
179
+ },
180
+ ],
181
+ },
182
+ },
183
+ ],
184
+ path: Path {
185
+ segments: [
186
+ PathSegment {
187
+ ident: "f",
188
+ },
189
+ ],
190
+ },
191
+ },
192
+ },
193
+ }
194
+ "#);
195
+ }
196
+
197
+ #[test]
198
+ fn test_macro_variable_macro() {
199
+ // mimics the token stream corresponding to `$macro!()`
200
+ let mac = Group::new(Delimiter::None, quote!(m));
201
+ let tokens = quote!(#mac!());
202
+
203
+ snapshot!(tokens as Expr, @r#"
204
+ Expr::Macro {
205
+ mac: Macro {
206
+ path: Path {
207
+ segments: [
208
+ PathSegment {
209
+ ident: "m",
210
+ },
211
+ ],
212
+ },
213
+ delimiter: MacroDelimiter::Paren,
214
+ tokens: TokenStream(``),
215
+ },
216
+ }
217
+ "#);
218
+ }
219
+
220
+ #[test]
221
+ fn test_macro_variable_struct() {
222
+ // mimics the token stream corresponding to `$struct {}`
223
+ let s = Group::new(Delimiter::None, quote! { S });
224
+ let tokens = quote!(#s {});
225
+
226
+ snapshot!(tokens as Expr, @r#"
227
+ Expr::Struct {
228
+ path: Path {
229
+ segments: [
230
+ PathSegment {
231
+ ident: "S",
232
+ },
233
+ ],
234
+ },
235
+ }
236
+ "#);
237
+ }
238
+
239
+ #[test]
240
+ fn test_macro_variable_unary() {
241
+ // mimics the token stream corresponding to `$expr.method()` where expr is `&self`
242
+ let inner = Group::new(Delimiter::None, quote!(&self));
243
+ let tokens = quote!(#inner.method());
244
+ snapshot!(tokens as Expr, @r#"
245
+ Expr::MethodCall {
246
+ receiver: Expr::Group {
247
+ expr: Expr::Reference {
248
+ expr: Expr::Path {
249
+ path: Path {
250
+ segments: [
251
+ PathSegment {
252
+ ident: "self",
253
+ },
254
+ ],
255
+ },
256
+ },
257
+ },
258
+ },
259
+ method: "method",
260
+ }
261
+ "#);
262
+ }
263
+
264
+ #[test]
265
+ fn test_macro_variable_match_arm() {
266
+ // mimics the token stream corresponding to `match v { _ => $expr }`
267
+ let expr = Group::new(Delimiter::None, quote! { #[a] () });
268
+ let tokens = quote!(match v { _ => #expr });
269
+ snapshot!(tokens as Expr, @r#"
270
+ Expr::Match {
271
+ expr: Expr::Path {
272
+ path: Path {
273
+ segments: [
274
+ PathSegment {
275
+ ident: "v",
276
+ },
277
+ ],
278
+ },
279
+ },
280
+ arms: [
281
+ Arm {
282
+ pat: Pat::Wild,
283
+ body: Expr::Group {
284
+ expr: Expr::Tuple {
285
+ attrs: [
286
+ Attribute {
287
+ style: AttrStyle::Outer,
288
+ meta: Meta::Path {
289
+ segments: [
290
+ PathSegment {
291
+ ident: "a",
292
+ },
293
+ ],
294
+ },
295
+ },
296
+ ],
297
+ },
298
+ },
299
+ },
300
+ ],
301
+ }
302
+ "#);
303
+
304
+ let expr = Group::new(Delimiter::None, quote!(loop {} + 1));
305
+ let tokens = quote!(match v { _ => #expr });
306
+ snapshot!(tokens as Expr, @r#"
307
+ Expr::Match {
308
+ expr: Expr::Path {
309
+ path: Path {
310
+ segments: [
311
+ PathSegment {
312
+ ident: "v",
313
+ },
314
+ ],
315
+ },
316
+ },
317
+ arms: [
318
+ Arm {
319
+ pat: Pat::Wild,
320
+ body: Expr::Group {
321
+ expr: Expr::Binary {
322
+ left: Expr::Loop {
323
+ body: Block {
324
+ stmts: [],
325
+ },
326
+ },
327
+ op: BinOp::Add,
328
+ right: Expr::Lit {
329
+ lit: 1,
330
+ },
331
+ },
332
+ },
333
+ },
334
+ ],
335
+ }
336
+ "#);
337
+ }
338
+
339
+ // https://github.com/dtolnay/syn/issues/1019
340
+ #[test]
341
+ fn test_closure_vs_rangefull() {
342
+ #[rustfmt::skip] // rustfmt bug: https://github.com/rust-lang/rustfmt/issues/4808
343
+ let tokens = quote!(|| .. .method());
344
+ snapshot!(tokens as Expr, @r#"
345
+ Expr::MethodCall {
346
+ receiver: Expr::Closure {
347
+ modifiers: ClosureModifiers,
348
+ output: ReturnType::Default,
349
+ body: Expr::Range {
350
+ limits: RangeLimits::HalfOpen,
351
+ },
352
+ },
353
+ method: "method",
354
+ }
355
+ "#);
356
+ }
357
+
358
+ #[test]
359
+ fn test_postfix_operator_after_cast() {
360
+ syn::parse_str::<Expr>("|| &x as T[0]").unwrap_err();
361
+ syn::parse_str::<Expr>("|| () as ()()").unwrap_err();
362
+ }
363
+
364
+ #[test]
365
+ fn test_range_kinds() {
366
+ syn::parse_str::<Expr>("..").unwrap();
367
+ syn::parse_str::<Expr>("..hi").unwrap();
368
+ syn::parse_str::<Expr>("lo..").unwrap();
369
+ syn::parse_str::<Expr>("lo..hi").unwrap();
370
+
371
+ syn::parse_str::<Expr>("..=").unwrap_err();
372
+ syn::parse_str::<Expr>("..=hi").unwrap();
373
+ syn::parse_str::<Expr>("lo..=").unwrap_err();
374
+ syn::parse_str::<Expr>("lo..=hi").unwrap();
375
+
376
+ syn::parse_str::<Expr>("...").unwrap_err();
377
+ syn::parse_str::<Expr>("...hi").unwrap_err();
378
+ syn::parse_str::<Expr>("lo...").unwrap_err();
379
+ syn::parse_str::<Expr>("lo...hi").unwrap_err();
380
+ }
381
+
382
+ #[test]
383
+ fn test_range_precedence() {
384
+ snapshot!(".. .." as Expr, @r#"
385
+ Expr::Range {
386
+ limits: RangeLimits::HalfOpen,
387
+ end: Some(Expr::Range {
388
+ limits: RangeLimits::HalfOpen,
389
+ }),
390
+ }
391
+ "#);
392
+
393
+ snapshot!(".. .. ()" as Expr, @r#"
394
+ Expr::Range {
395
+ limits: RangeLimits::HalfOpen,
396
+ end: Some(Expr::Range {
397
+ limits: RangeLimits::HalfOpen,
398
+ end: Some(Expr::Tuple),
399
+ }),
400
+ }
401
+ "#);
402
+
403
+ snapshot!("() .. .." as Expr, @r#"
404
+ Expr::Range {
405
+ start: Some(Expr::Tuple),
406
+ limits: RangeLimits::HalfOpen,
407
+ end: Some(Expr::Range {
408
+ limits: RangeLimits::HalfOpen,
409
+ }),
410
+ }
411
+ "#);
412
+
413
+ snapshot!("() = .. + ()" as Expr, @r"
414
+ Expr::Binary {
415
+ left: Expr::Assign {
416
+ left: Expr::Tuple,
417
+ right: Expr::Range {
418
+ limits: RangeLimits::HalfOpen,
419
+ },
420
+ },
421
+ op: BinOp::Add,
422
+ right: Expr::Tuple,
423
+ }
424
+ ");
425
+
426
+ // A range with a lower bound cannot be the upper bound of another range,
427
+ // and a range with an upper bound cannot be the lower bound of another
428
+ // range.
429
+ syn::parse_str::<Expr>(".. x ..").unwrap_err();
430
+ syn::parse_str::<Expr>("x .. x ..").unwrap_err();
431
+ }
432
+
433
+ #[test]
434
+ fn test_range_attrs() {
435
+ // Attributes are not allowed on range expressions starting with `..`
436
+ syn::parse_str::<Expr>("#[allow()] ..").unwrap_err();
437
+ syn::parse_str::<Expr>("#[allow()] .. hi").unwrap_err();
438
+
439
+ snapshot!("#[allow()] lo .. hi" as Expr, @r#"
440
+ Expr::Range {
441
+ start: Some(Expr::Path {
442
+ attrs: [
443
+ Attribute {
444
+ style: AttrStyle::Outer,
445
+ meta: Meta::List {
446
+ path: Path {
447
+ segments: [
448
+ PathSegment {
449
+ ident: "allow",
450
+ },
451
+ ],
452
+ },
453
+ delimiter: MacroDelimiter::Paren,
454
+ tokens: TokenStream(``),
455
+ },
456
+ },
457
+ ],
458
+ path: Path {
459
+ segments: [
460
+ PathSegment {
461
+ ident: "lo",
462
+ },
463
+ ],
464
+ },
465
+ }),
466
+ limits: RangeLimits::HalfOpen,
467
+ end: Some(Expr::Path {
468
+ path: Path {
469
+ segments: [
470
+ PathSegment {
471
+ ident: "hi",
472
+ },
473
+ ],
474
+ },
475
+ }),
476
+ }
477
+ "#);
478
+ }
479
+
480
+ #[test]
481
+ fn test_ranges_bailout() {
482
+ syn::parse_str::<Expr>(".. ?").unwrap_err();
483
+ syn::parse_str::<Expr>(".. .field").unwrap_err();
484
+
485
+ snapshot!("return .. ?" as Expr, @r"
486
+ Expr::Try {
487
+ expr: Expr::Return {
488
+ expr: Some(Expr::Range {
489
+ limits: RangeLimits::HalfOpen,
490
+ }),
491
+ },
492
+ }
493
+ ");
494
+
495
+ snapshot!("break .. ?" as Expr, @r"
496
+ Expr::Try {
497
+ expr: Expr::Break {
498
+ expr: Some(Expr::Range {
499
+ limits: RangeLimits::HalfOpen,
500
+ }),
501
+ },
502
+ }
503
+ ");
504
+
505
+ snapshot!("|| .. ?" as Expr, @"
506
+ Expr::Try {
507
+ expr: Expr::Closure {
508
+ modifiers: ClosureModifiers,
509
+ output: ReturnType::Default,
510
+ body: Expr::Range {
511
+ limits: RangeLimits::HalfOpen,
512
+ },
513
+ },
514
+ }
515
+ ");
516
+
517
+ snapshot!("return .. .field" as Expr, @r#"
518
+ Expr::Field {
519
+ base: Expr::Return {
520
+ expr: Some(Expr::Range {
521
+ limits: RangeLimits::HalfOpen,
522
+ }),
523
+ },
524
+ member: Member::Named("field"),
525
+ }
526
+ "#);
527
+
528
+ snapshot!("break .. .field" as Expr, @r#"
529
+ Expr::Field {
530
+ base: Expr::Break {
531
+ expr: Some(Expr::Range {
532
+ limits: RangeLimits::HalfOpen,
533
+ }),
534
+ },
535
+ member: Member::Named("field"),
536
+ }
537
+ "#);
538
+
539
+ snapshot!("|| .. .field" as Expr, @r#"
540
+ Expr::Field {
541
+ base: Expr::Closure {
542
+ modifiers: ClosureModifiers,
543
+ output: ReturnType::Default,
544
+ body: Expr::Range {
545
+ limits: RangeLimits::HalfOpen,
546
+ },
547
+ },
548
+ member: Member::Named("field"),
549
+ }
550
+ "#);
551
+
552
+ snapshot!("return .. = ()" as Expr, @r"
553
+ Expr::Assign {
554
+ left: Expr::Return {
555
+ expr: Some(Expr::Range {
556
+ limits: RangeLimits::HalfOpen,
557
+ }),
558
+ },
559
+ right: Expr::Tuple,
560
+ }
561
+ ");
562
+
563
+ snapshot!("return .. += ()" as Expr, @r"
564
+ Expr::Binary {
565
+ left: Expr::Return {
566
+ expr: Some(Expr::Range {
567
+ limits: RangeLimits::HalfOpen,
568
+ }),
569
+ },
570
+ op: BinOp::AddAssign,
571
+ right: Expr::Tuple,
572
+ }
573
+ ");
574
+ }
575
+
576
+ #[test]
577
+ fn test_ambiguous_label() {
578
+ for stmt in [
579
+ quote! {
580
+ return 'label: loop { break 'label 42; };
581
+ },
582
+ quote! {
583
+ break ('label: loop { break 'label 42; });
584
+ },
585
+ quote! {
586
+ break 1 + 'label: loop { break 'label 42; };
587
+ },
588
+ quote! {
589
+ break 'outer 'inner: loop { break 'inner 42; };
590
+ },
591
+ quote! {
592
+ break 'outer ::lib::foo();
593
+ },
594
+ ] {
595
+ syn::parse2::<Stmt>(stmt).unwrap();
596
+ }
597
+
598
+ for stmt in [
599
+ // Parentheses required. See https://github.com/rust-lang/rust/pull/87026.
600
+ quote! {
601
+ break 'label: loop { break 'label 42; };
602
+ },
603
+ ] {
604
+ syn::parse2::<Stmt>(stmt).unwrap_err();
605
+ }
606
+ }
607
+
608
+ #[test]
609
+ fn test_extended_interpolated_path() {
610
+ let path = Group::new(Delimiter::None, quote!(a::b));
611
+
612
+ let tokens = quote!(if #path {});
613
+ snapshot!(tokens as Expr, @r#"
614
+ Expr::If {
615
+ cond: Expr::Group {
616
+ expr: Expr::Path {
617
+ path: Path {
618
+ segments: [
619
+ PathSegment {
620
+ ident: "a",
621
+ },
622
+ Token![::],
623
+ PathSegment {
624
+ ident: "b",
625
+ },
626
+ ],
627
+ },
628
+ },
629
+ },
630
+ then_branch: Block {
631
+ stmts: [],
632
+ },
633
+ }
634
+ "#);
635
+
636
+ let tokens = quote!(#path {});
637
+ snapshot!(tokens as Expr, @r#"
638
+ Expr::Struct {
639
+ path: Path {
640
+ segments: [
641
+ PathSegment {
642
+ ident: "a",
643
+ },
644
+ Token![::],
645
+ PathSegment {
646
+ ident: "b",
647
+ },
648
+ ],
649
+ },
650
+ }
651
+ "#);
652
+
653
+ let tokens = quote!(#path :: c);
654
+ snapshot!(tokens as Expr, @r#"
655
+ Expr::Path {
656
+ path: Path {
657
+ segments: [
658
+ PathSegment {
659
+ ident: "a",
660
+ },
661
+ Token![::],
662
+ PathSegment {
663
+ ident: "b",
664
+ },
665
+ Token![::],
666
+ PathSegment {
667
+ ident: "c",
668
+ },
669
+ ],
670
+ },
671
+ }
672
+ "#);
673
+
674
+ let nested = Group::new(Delimiter::None, quote!(a::b || true));
675
+ let tokens = quote!(if #nested && false {});
676
+ snapshot!(tokens as Expr, @r#"
677
+ Expr::If {
678
+ cond: Expr::Binary {
679
+ left: Expr::Group {
680
+ expr: Expr::Binary {
681
+ left: Expr::Path {
682
+ path: Path {
683
+ segments: [
684
+ PathSegment {
685
+ ident: "a",
686
+ },
687
+ Token![::],
688
+ PathSegment {
689
+ ident: "b",
690
+ },
691
+ ],
692
+ },
693
+ },
694
+ op: BinOp::Or,
695
+ right: Expr::Lit {
696
+ lit: Lit::Bool {
697
+ value: true,
698
+ },
699
+ },
700
+ },
701
+ },
702
+ op: BinOp::And,
703
+ right: Expr::Lit {
704
+ lit: Lit::Bool {
705
+ value: false,
706
+ },
707
+ },
708
+ },
709
+ then_branch: Block {
710
+ stmts: [],
711
+ },
712
+ }
713
+ "#);
714
+ }
715
+
716
+ #[test]
717
+ fn test_tuple_comma() {
718
+ let mut expr = ExprTuple {
719
+ attrs: Vec::new(),
720
+ paren_token: token::Paren::default(),
721
+ elems: Punctuated::new(),
722
+ };
723
+ snapshot!(expr.to_token_stream() as Expr, @"Expr::Tuple");
724
+
725
+ expr.elems.push_value(parse_quote!(continue));
726
+ // Must not parse to Expr::Paren
727
+ snapshot!(expr.to_token_stream() as Expr, @r#"
728
+ Expr::Tuple {
729
+ elems: [
730
+ Expr::Continue,
731
+ Token![,],
732
+ ],
733
+ }
734
+ "#);
735
+
736
+ expr.elems.push_punct(<Token![,]>::default());
737
+ snapshot!(expr.to_token_stream() as Expr, @r#"
738
+ Expr::Tuple {
739
+ elems: [
740
+ Expr::Continue,
741
+ Token![,],
742
+ ],
743
+ }
744
+ "#);
745
+
746
+ expr.elems.push_value(parse_quote!(continue));
747
+ snapshot!(expr.to_token_stream() as Expr, @r#"
748
+ Expr::Tuple {
749
+ elems: [
750
+ Expr::Continue,
751
+ Token![,],
752
+ Expr::Continue,
753
+ ],
754
+ }
755
+ "#);
756
+
757
+ expr.elems.push_punct(<Token![,]>::default());
758
+ snapshot!(expr.to_token_stream() as Expr, @r#"
759
+ Expr::Tuple {
760
+ elems: [
761
+ Expr::Continue,
762
+ Token![,],
763
+ Expr::Continue,
764
+ Token![,],
765
+ ],
766
+ }
767
+ "#);
768
+ }
769
+
770
+ #[test]
771
+ fn test_binop_associativity() {
772
+ // Left to right.
773
+ snapshot!("() + () + ()" as Expr, @r#"
774
+ Expr::Binary {
775
+ left: Expr::Binary {
776
+ left: Expr::Tuple,
777
+ op: BinOp::Add,
778
+ right: Expr::Tuple,
779
+ },
780
+ op: BinOp::Add,
781
+ right: Expr::Tuple,
782
+ }
783
+ "#);
784
+
785
+ // Right to left.
786
+ snapshot!("() += () += ()" as Expr, @r#"
787
+ Expr::Binary {
788
+ left: Expr::Tuple,
789
+ op: BinOp::AddAssign,
790
+ right: Expr::Binary {
791
+ left: Expr::Tuple,
792
+ op: BinOp::AddAssign,
793
+ right: Expr::Tuple,
794
+ },
795
+ }
796
+ "#);
797
+
798
+ // Parenthesization is required.
799
+ syn::parse_str::<Expr>("() == () == ()").unwrap_err();
800
+ }
801
+
802
+ #[test]
803
+ fn test_assign_range_precedence() {
804
+ // Range has higher precedence as the right-hand of an assignment, but
805
+ // ambiguous precedence as the left-hand of an assignment.
806
+ snapshot!("() = () .. ()" as Expr, @r#"
807
+ Expr::Assign {
808
+ left: Expr::Tuple,
809
+ right: Expr::Range {
810
+ start: Some(Expr::Tuple),
811
+ limits: RangeLimits::HalfOpen,
812
+ end: Some(Expr::Tuple),
813
+ },
814
+ }
815
+ "#);
816
+
817
+ snapshot!("() += () .. ()" as Expr, @r#"
818
+ Expr::Binary {
819
+ left: Expr::Tuple,
820
+ op: BinOp::AddAssign,
821
+ right: Expr::Range {
822
+ start: Some(Expr::Tuple),
823
+ limits: RangeLimits::HalfOpen,
824
+ end: Some(Expr::Tuple),
825
+ },
826
+ }
827
+ "#);
828
+
829
+ syn::parse_str::<Expr>("() .. () = ()").unwrap_err();
830
+ syn::parse_str::<Expr>("() .. () += ()").unwrap_err();
831
+ }
832
+
833
+ #[test]
834
+ fn test_chained_comparison() {
835
+ // https://github.com/dtolnay/syn/issues/1738
836
+ let _ = syn::parse_str::<Expr>("a = a < a <");
837
+ let _ = syn::parse_str::<Expr>("a = a .. a ..");
838
+ let _ = syn::parse_str::<Expr>("a = a .. a +=");
839
+
840
+ let err = syn::parse_str::<Expr>("a < a < a").unwrap_err();
841
+ assert_eq!("comparison operators cannot be chained", err.to_string());
842
+
843
+ let err = syn::parse_str::<Expr>("a .. a .. a").unwrap_err();
844
+ assert_eq!("unexpected token", err.to_string());
845
+
846
+ let err = syn::parse_str::<Expr>("a .. a += a").unwrap_err();
847
+ assert_eq!("unexpected token", err.to_string());
848
+ }
849
+
850
+ #[test]
851
+ fn test_fixup() {
852
+ for tokens in [
853
+ quote! { 2 * (1 + 1) },
854
+ quote! { 0 + (0 + 0) },
855
+ quote! { (a = b) = c },
856
+ quote! { (x as i32) < 0 },
857
+ quote! { 1 + (x as i32) < 0 },
858
+ quote! { (1 + 1).abs() },
859
+ quote! { (lo..hi)[..] },
860
+ quote! { (a..b)..(c..d) },
861
+ quote! { (x > ..) > x },
862
+ quote! { (&mut fut).await },
863
+ quote! { &mut (x as i32) },
864
+ quote! { -(x as i32) },
865
+ quote! { if (S {}) == 1 {} },
866
+ quote! { { (m! {}) - 1 } },
867
+ quote! { match m { _ => ({}) - 1 } },
868
+ quote! { if let _ = (a && b) && c {} },
869
+ quote! { if let _ = (S {}) {} },
870
+ quote! { if (S {}) == 0 && let Some(_) = x {} },
871
+ quote! { break ('a: loop { break 'a 1 } + 1) },
872
+ quote! { a + (|| b) + c },
873
+ quote! { if let _ = ((break) - 1 || true) {} },
874
+ quote! { if let _ = (break + 1 || true) {} },
875
+ quote! { if break (break) {} },
876
+ quote! { if break break {} {} },
877
+ quote! { if return (..) {} },
878
+ quote! { if return .. {} {} },
879
+ quote! { if || (Struct {}) {} },
880
+ quote! { if || (Struct {}).await {} },
881
+ quote! { if break || Struct {}.await {} },
882
+ quote! { if break 'outer 'block: {} {} },
883
+ quote! { if ..'block: {} {} },
884
+ quote! { if break ({}).await {} },
885
+ quote! { (break)() },
886
+ quote! { (..) = () },
887
+ quote! { (..) += () },
888
+ quote! { (1 < 2) == (3 < 4) },
889
+ quote! { { (let _ = ()) } },
890
+ quote! { (#[attr] thing).field },
891
+ quote! { #[attr] (1 + 1) },
892
+ quote! { #[attr] (x = 1) },
893
+ quote! { #[attr] (x += 1) },
894
+ quote! { #[attr] (1 as T) },
895
+ quote! { (return #[attr] (x + ..)).field },
896
+ quote! { (self.f)() },
897
+ quote! { (return)..=return },
898
+ quote! { 1 + (return)..=1 + return },
899
+ quote! { .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. },
900
+ ] {
901
+ let original: Expr = syn::parse2(tokens).unwrap();
902
+
903
+ let mut flat = original.clone();
904
+ FlattenParens::combine_attrs().visit_expr_mut(&mut flat);
905
+ let reconstructed: Expr = match syn::parse2(flat.to_token_stream()) {
906
+ Ok(reconstructed) => reconstructed,
907
+ Err(err) => panic!("failed to parse `{}`: {}", flat.to_token_stream(), err),
908
+ };
909
+
910
+ assert!(
911
+ original == reconstructed,
912
+ "original: {}\n{:#?}\nreconstructed: {}\n{:#?}",
913
+ original.to_token_stream(),
914
+ crate::debug::Lite(&original),
915
+ reconstructed.to_token_stream(),
916
+ crate::debug::Lite(&reconstructed),
917
+ );
918
+ }
919
+ }
920
+
921
+ #[test]
922
+ fn test_permutations() -> ExitCode {
923
+ fn iter(depth: usize, f: &mut dyn FnMut(Expr)) {
924
+ let span = Span::call_site();
925
+
926
+ // Expr::Path
927
+ f(Expr::Path(ExprPath {
928
+ // `x`
929
+ attrs: Vec::new(),
930
+ qself: None,
931
+ path: Path::from(Ident::new("x", span)),
932
+ }));
933
+ if false {
934
+ f(Expr::Path(ExprPath {
935
+ // `x::<T>`
936
+ attrs: Vec::new(),
937
+ qself: None,
938
+ path: Path {
939
+ leading_colon: None,
940
+ segments: Punctuated::from_iter([PathSegment {
941
+ ident: Ident::new("x", span),
942
+ arguments: PathArguments::AngleBracketed(AngleBracketedGenericArguments {
943
+ colon2_token: Some(Token![::](span)),
944
+ lt_token: Token![<](span),
945
+ args: Punctuated::from_iter([GenericArgument::Type(Type::Path(
946
+ TypePath {
947
+ attrs: Vec::new(),
948
+ qself: None,
949
+ path: Path::from(Ident::new("T", span)),
950
+ },
951
+ ))]),
952
+ gt_token: Token![>](span),
953
+ }),
954
+ }]),
955
+ },
956
+ }));
957
+ f(Expr::Path(ExprPath {
958
+ // `<T as Trait>::CONST`
959
+ attrs: Vec::new(),
960
+ qself: Some(QSelf {
961
+ lt_token: Token![<](span),
962
+ ty: Box::new(Type::Path(TypePath {
963
+ attrs: Vec::new(),
964
+ qself: None,
965
+ path: Path::from(Ident::new("T", span)),
966
+ })),
967
+ position: 1,
968
+ as_token: Some(Token![as](span)),
969
+ gt_token: Token![>](span),
970
+ }),
971
+ path: Path {
972
+ leading_colon: None,
973
+ segments: Punctuated::from_iter([
974
+ PathSegment::from(Ident::new("Trait", span)),
975
+ PathSegment::from(Ident::new("CONST", span)),
976
+ ]),
977
+ },
978
+ }));
979
+ }
980
+
981
+ let Some(depth) = depth.checked_sub(1) else {
982
+ return;
983
+ };
984
+
985
+ // Expr::Assign
986
+ iter(depth, &mut |expr| {
987
+ iter(0, &mut |simple| {
988
+ f(Expr::Assign(ExprAssign {
989
+ // `x = $expr`
990
+ attrs: Vec::new(),
991
+ left: Box::new(simple.clone()),
992
+ eq_token: Token![=](span),
993
+ right: Box::new(expr.clone()),
994
+ }));
995
+ f(Expr::Assign(ExprAssign {
996
+ // `$expr = x`
997
+ attrs: Vec::new(),
998
+ left: Box::new(expr.clone()),
999
+ eq_token: Token![=](span),
1000
+ right: Box::new(simple),
1001
+ }));
1002
+ });
1003
+ });
1004
+
1005
+ // Expr::Binary
1006
+ iter(depth, &mut |expr| {
1007
+ iter(0, &mut |simple| {
1008
+ for op in [
1009
+ BinOp::Add(Token![+](span)),
1010
+ //BinOp::Sub(Token![-](span)),
1011
+ //BinOp::Mul(Token![*](span)),
1012
+ //BinOp::Div(Token![/](span)),
1013
+ //BinOp::Rem(Token![%](span)),
1014
+ //BinOp::And(Token![&&](span)),
1015
+ //BinOp::Or(Token![||](span)),
1016
+ //BinOp::BitXor(Token![^](span)),
1017
+ //BinOp::BitAnd(Token![&](span)),
1018
+ //BinOp::BitOr(Token![|](span)),
1019
+ //BinOp::Shl(Token![<<](span)),
1020
+ //BinOp::Shr(Token![>>](span)),
1021
+ //BinOp::Eq(Token![==](span)),
1022
+ BinOp::Lt(Token![<](span)),
1023
+ //BinOp::Le(Token![<=](span)),
1024
+ //BinOp::Ne(Token![!=](span)),
1025
+ //BinOp::Ge(Token![>=](span)),
1026
+ //BinOp::Gt(Token![>](span)),
1027
+ BinOp::ShlAssign(Token![<<=](span)),
1028
+ ] {
1029
+ f(Expr::Binary(ExprBinary {
1030
+ // `x + $expr`
1031
+ attrs: Vec::new(),
1032
+ left: Box::new(simple.clone()),
1033
+ op,
1034
+ right: Box::new(expr.clone()),
1035
+ }));
1036
+ f(Expr::Binary(ExprBinary {
1037
+ // `$expr + x`
1038
+ attrs: Vec::new(),
1039
+ left: Box::new(expr.clone()),
1040
+ op,
1041
+ right: Box::new(simple.clone()),
1042
+ }));
1043
+ }
1044
+ });
1045
+ });
1046
+
1047
+ // Expr::Block
1048
+ f(Expr::Block(ExprBlock {
1049
+ // `{}`
1050
+ attrs: Vec::new(),
1051
+ label: None,
1052
+ block: Block {
1053
+ brace_token: token::Brace(span),
1054
+ stmts: Vec::new(),
1055
+ },
1056
+ }));
1057
+
1058
+ // Expr::Break
1059
+ f(Expr::Break(ExprBreak {
1060
+ // `break`
1061
+ attrs: Vec::new(),
1062
+ break_token: Token![break](span),
1063
+ label: None,
1064
+ expr: None,
1065
+ }));
1066
+ iter(depth, &mut |expr| {
1067
+ f(Expr::Break(ExprBreak {
1068
+ // `break $expr`
1069
+ attrs: Vec::new(),
1070
+ break_token: Token![break](span),
1071
+ label: None,
1072
+ expr: Some(Box::new(expr)),
1073
+ }));
1074
+ });
1075
+
1076
+ // Expr::Call
1077
+ iter(depth, &mut |expr| {
1078
+ f(Expr::Call(ExprCall {
1079
+ // `$expr()`
1080
+ attrs: Vec::new(),
1081
+ func: Box::new(expr),
1082
+ paren_token: token::Paren(span),
1083
+ args: Punctuated::new(),
1084
+ }));
1085
+ });
1086
+
1087
+ // Expr::Cast
1088
+ iter(depth, &mut |expr| {
1089
+ f(Expr::Cast(ExprCast {
1090
+ // `$expr as T`
1091
+ attrs: Vec::new(),
1092
+ expr: Box::new(expr),
1093
+ as_token: Token![as](span),
1094
+ ty: Box::new(Type::Path(TypePath {
1095
+ attrs: Vec::new(),
1096
+ qself: None,
1097
+ path: Path::from(Ident::new("T", span)),
1098
+ })),
1099
+ }));
1100
+ });
1101
+
1102
+ // Expr::Closure
1103
+ iter(depth, &mut |expr| {
1104
+ f(Expr::Closure(ExprClosure {
1105
+ // `|| $expr`
1106
+ attrs: Vec::new(),
1107
+ lifetimes: None,
1108
+ modifiers: ClosureModifiers::default(),
1109
+ constness: None,
1110
+ asyncness: None,
1111
+ capture: None,
1112
+ inputs_begin: Token![|](span),
1113
+ inputs: Punctuated::new(),
1114
+ inputs_end: Token![|](span),
1115
+ output: ReturnType::Default,
1116
+ body: Box::new(expr),
1117
+ }));
1118
+ });
1119
+
1120
+ // Expr::Field
1121
+ iter(depth, &mut |expr| {
1122
+ f(Expr::Field(ExprField {
1123
+ // `$expr.field`
1124
+ attrs: Vec::new(),
1125
+ base: Box::new(expr),
1126
+ dot_token: Token![.](span),
1127
+ member: Member::Named(Ident::new("field", span)),
1128
+ }));
1129
+ });
1130
+
1131
+ // Expr::If
1132
+ iter(depth, &mut |expr| {
1133
+ f(Expr::If(ExprIf {
1134
+ // `if $expr {}`
1135
+ attrs: Vec::new(),
1136
+ if_token: Token![if](span),
1137
+ cond: Box::new(expr),
1138
+ then_branch: Block {
1139
+ brace_token: token::Brace(span),
1140
+ stmts: Vec::new(),
1141
+ },
1142
+ else_branch: None,
1143
+ }));
1144
+ });
1145
+
1146
+ // Expr::Let
1147
+ iter(depth, &mut |expr| {
1148
+ f(Expr::Let(ExprLet {
1149
+ attrs: Vec::new(),
1150
+ let_token: Token![let](span),
1151
+ pat: Box::new(Pat::Wild(PatWild {
1152
+ attrs: Vec::new(),
1153
+ underscore_token: Token![_](span),
1154
+ })),
1155
+ eq_token: Token![=](span),
1156
+ expr: Box::new(expr),
1157
+ }));
1158
+ });
1159
+
1160
+ // Expr::Range
1161
+ f(Expr::Range(ExprRange {
1162
+ // `..`
1163
+ attrs: Vec::new(),
1164
+ start: None,
1165
+ limits: RangeLimits::HalfOpen(Token![..](span)),
1166
+ end: None,
1167
+ }));
1168
+ iter(depth, &mut |expr| {
1169
+ f(Expr::Range(ExprRange {
1170
+ // `..$expr`
1171
+ attrs: Vec::new(),
1172
+ start: None,
1173
+ limits: RangeLimits::HalfOpen(Token![..](span)),
1174
+ end: Some(Box::new(expr.clone())),
1175
+ }));
1176
+ f(Expr::Range(ExprRange {
1177
+ // `$expr..`
1178
+ attrs: Vec::new(),
1179
+ start: Some(Box::new(expr)),
1180
+ limits: RangeLimits::HalfOpen(Token![..](span)),
1181
+ end: None,
1182
+ }));
1183
+ });
1184
+
1185
+ // Expr::Reference
1186
+ iter(depth, &mut |expr| {
1187
+ f(Expr::Reference(ExprReference {
1188
+ // `&$expr`
1189
+ attrs: Vec::new(),
1190
+ and_token: Token![&](span),
1191
+ mutability: None,
1192
+ expr: Box::new(expr),
1193
+ }));
1194
+ });
1195
+
1196
+ // Expr::Return
1197
+ f(Expr::Return(ExprReturn {
1198
+ // `return`
1199
+ attrs: Vec::new(),
1200
+ return_token: Token![return](span),
1201
+ expr: None,
1202
+ }));
1203
+ iter(depth, &mut |expr| {
1204
+ f(Expr::Return(ExprReturn {
1205
+ // `return $expr`
1206
+ attrs: Vec::new(),
1207
+ return_token: Token![return](span),
1208
+ expr: Some(Box::new(expr)),
1209
+ }));
1210
+ });
1211
+
1212
+ // Expr::Try
1213
+ iter(depth, &mut |expr| {
1214
+ f(Expr::Try(ExprTry {
1215
+ // `$expr?`
1216
+ attrs: Vec::new(),
1217
+ expr: Box::new(expr),
1218
+ question_token: Token![?](span),
1219
+ }));
1220
+ });
1221
+
1222
+ // Expr::Unary
1223
+ iter(depth, &mut |expr| {
1224
+ for op in [
1225
+ UnOp::Deref(Token![*](span)),
1226
+ //UnOp::Not(Token![!](span)),
1227
+ //UnOp::Neg(Token![-](span)),
1228
+ ] {
1229
+ f(Expr::Unary(ExprUnary {
1230
+ // `*$expr`
1231
+ attrs: Vec::new(),
1232
+ op,
1233
+ expr: Box::new(expr.clone()),
1234
+ }));
1235
+ }
1236
+ });
1237
+
1238
+ if false {
1239
+ // Expr::Array
1240
+ f(Expr::Array(ExprArray {
1241
+ // `[]`
1242
+ attrs: Vec::new(),
1243
+ bracket_token: token::Bracket(span),
1244
+ elems: Punctuated::new(),
1245
+ }));
1246
+
1247
+ // Expr::Async
1248
+ f(Expr::Async(ExprAsync {
1249
+ // `async {}`
1250
+ attrs: Vec::new(),
1251
+ async_token: Token![async](span),
1252
+ capture: None,
1253
+ modifiers: BlockModifiers::default(),
1254
+ block: Block {
1255
+ brace_token: token::Brace(span),
1256
+ stmts: Vec::new(),
1257
+ },
1258
+ }));
1259
+
1260
+ // Expr::Await
1261
+ iter(depth, &mut |expr| {
1262
+ f(Expr::Await(ExprAwait {
1263
+ // `$expr.await`
1264
+ attrs: Vec::new(),
1265
+ base: Box::new(expr),
1266
+ dot_token: Token![.](span),
1267
+ await_token: Token![await](span),
1268
+ }));
1269
+ });
1270
+
1271
+ // Expr::Block
1272
+ f(Expr::Block(ExprBlock {
1273
+ // `'a: {}`
1274
+ attrs: Vec::new(),
1275
+ label: Some(Label {
1276
+ name: Lifetime::new("'a", span),
1277
+ colon_token: Token![:](span),
1278
+ }),
1279
+ block: Block {
1280
+ brace_token: token::Brace(span),
1281
+ stmts: Vec::new(),
1282
+ },
1283
+ }));
1284
+ iter(depth, &mut |expr| {
1285
+ f(Expr::Block(ExprBlock {
1286
+ // `{ $expr }`
1287
+ attrs: Vec::new(),
1288
+ label: None,
1289
+ block: Block {
1290
+ brace_token: token::Brace(span),
1291
+ stmts: Vec::from([Stmt::Expr(expr.clone(), None)]),
1292
+ },
1293
+ }));
1294
+ f(Expr::Block(ExprBlock {
1295
+ // `{ $expr; }`
1296
+ attrs: Vec::new(),
1297
+ label: None,
1298
+ block: Block {
1299
+ brace_token: token::Brace(span),
1300
+ stmts: Vec::from([Stmt::Expr(expr, Some(Token![;](span)))]),
1301
+ },
1302
+ }));
1303
+ });
1304
+
1305
+ // Expr::Break
1306
+ f(Expr::Break(ExprBreak {
1307
+ // `break 'a`
1308
+ attrs: Vec::new(),
1309
+ break_token: Token![break](span),
1310
+ label: Some(Lifetime::new("'a", span)),
1311
+ expr: None,
1312
+ }));
1313
+ iter(depth, &mut |expr| {
1314
+ f(Expr::Break(ExprBreak {
1315
+ // `break 'a $expr`
1316
+ attrs: Vec::new(),
1317
+ break_token: Token![break](span),
1318
+ label: Some(Lifetime::new("'a", span)),
1319
+ expr: Some(Box::new(expr)),
1320
+ }));
1321
+ });
1322
+
1323
+ // Expr::Closure
1324
+ f(Expr::Closure(ExprClosure {
1325
+ // `|| -> T {}`
1326
+ attrs: Vec::new(),
1327
+ lifetimes: None,
1328
+ modifiers: ClosureModifiers::default(),
1329
+ constness: None,
1330
+ asyncness: None,
1331
+ capture: None,
1332
+ inputs_begin: Token![|](span),
1333
+ inputs: Punctuated::new(),
1334
+ inputs_end: Token![|](span),
1335
+ output: ReturnType::Type(
1336
+ Token![->](span),
1337
+ Box::new(Type::Path(TypePath {
1338
+ attrs: Vec::new(),
1339
+ qself: None,
1340
+ path: Path::from(Ident::new("T", span)),
1341
+ })),
1342
+ ),
1343
+ body: Box::new(Expr::Block(ExprBlock {
1344
+ attrs: Vec::new(),
1345
+ label: None,
1346
+ block: Block {
1347
+ brace_token: token::Brace(span),
1348
+ stmts: Vec::new(),
1349
+ },
1350
+ })),
1351
+ }));
1352
+
1353
+ // Expr::Const
1354
+ f(Expr::Const(ExprConst {
1355
+ // `const {}`
1356
+ attrs: Vec::new(),
1357
+ const_token: Token![const](span),
1358
+ modifiers: BlockModifiers::default(),
1359
+ block: Block {
1360
+ brace_token: token::Brace(span),
1361
+ stmts: Vec::new(),
1362
+ },
1363
+ }));
1364
+
1365
+ // Expr::Continue
1366
+ f(Expr::Continue(ExprContinue {
1367
+ // `continue`
1368
+ attrs: Vec::new(),
1369
+ continue_token: Token![continue](span),
1370
+ label: None,
1371
+ }));
1372
+ f(Expr::Continue(ExprContinue {
1373
+ // `continue 'a`
1374
+ attrs: Vec::new(),
1375
+ continue_token: Token![continue](span),
1376
+ label: Some(Lifetime::new("'a", span)),
1377
+ }));
1378
+
1379
+ // Expr::ForLoop
1380
+ iter(depth, &mut |expr| {
1381
+ f(Expr::ForLoop(ExprForLoop {
1382
+ // `for _ in $expr {}`
1383
+ attrs: Vec::new(),
1384
+ label: None,
1385
+ for_token: Token![for](span),
1386
+ pat: Box::new(Pat::Wild(PatWild {
1387
+ attrs: Vec::new(),
1388
+ underscore_token: Token![_](span),
1389
+ })),
1390
+ in_token: Token![in](span),
1391
+ expr: Box::new(expr.clone()),
1392
+ body: Block {
1393
+ brace_token: token::Brace(span),
1394
+ stmts: Vec::new(),
1395
+ },
1396
+ }));
1397
+ f(Expr::ForLoop(ExprForLoop {
1398
+ // `'a: for _ in $expr {}`
1399
+ attrs: Vec::new(),
1400
+ label: Some(Label {
1401
+ name: Lifetime::new("'a", span),
1402
+ colon_token: Token![:](span),
1403
+ }),
1404
+ for_token: Token![for](span),
1405
+ pat: Box::new(Pat::Wild(PatWild {
1406
+ attrs: Vec::new(),
1407
+ underscore_token: Token![_](span),
1408
+ })),
1409
+ in_token: Token![in](span),
1410
+ expr: Box::new(expr),
1411
+ body: Block {
1412
+ brace_token: token::Brace(span),
1413
+ stmts: Vec::new(),
1414
+ },
1415
+ }));
1416
+ });
1417
+
1418
+ // Expr::Index
1419
+ iter(depth, &mut |expr| {
1420
+ f(Expr::Index(ExprIndex {
1421
+ // `$expr[0]`
1422
+ attrs: Vec::new(),
1423
+ expr: Box::new(expr),
1424
+ bracket_token: token::Bracket(span),
1425
+ index: Box::new(Expr::Lit(ExprLit {
1426
+ attrs: Vec::new(),
1427
+ lit: Lit::Int(LitInt::new("0", span)),
1428
+ })),
1429
+ }));
1430
+ });
1431
+
1432
+ // Expr::Loop
1433
+ f(Expr::Loop(ExprLoop {
1434
+ // `loop {}`
1435
+ attrs: Vec::new(),
1436
+ label: None,
1437
+ loop_token: Token![loop](span),
1438
+ body: Block {
1439
+ brace_token: token::Brace(span),
1440
+ stmts: Vec::new(),
1441
+ },
1442
+ }));
1443
+ f(Expr::Loop(ExprLoop {
1444
+ // `'a: loop {}`
1445
+ attrs: Vec::new(),
1446
+ label: Some(Label {
1447
+ name: Lifetime::new("'a", span),
1448
+ colon_token: Token![:](span),
1449
+ }),
1450
+ loop_token: Token![loop](span),
1451
+ body: Block {
1452
+ brace_token: token::Brace(span),
1453
+ stmts: Vec::new(),
1454
+ },
1455
+ }));
1456
+
1457
+ // Expr::Macro
1458
+ f(Expr::Macro(ExprMacro {
1459
+ // `m!()`
1460
+ attrs: Vec::new(),
1461
+ mac: Macro {
1462
+ path: Path::from(Ident::new("m", span)),
1463
+ bang_token: Token![!](span),
1464
+ delimiter: MacroDelimiter::Paren(token::Paren(span)),
1465
+ tokens: TokenStream::new(),
1466
+ },
1467
+ }));
1468
+ f(Expr::Macro(ExprMacro {
1469
+ // `m! {}`
1470
+ attrs: Vec::new(),
1471
+ mac: Macro {
1472
+ path: Path::from(Ident::new("m", span)),
1473
+ bang_token: Token![!](span),
1474
+ delimiter: MacroDelimiter::Brace(token::Brace(span)),
1475
+ tokens: TokenStream::new(),
1476
+ },
1477
+ }));
1478
+
1479
+ // Expr::Match
1480
+ iter(depth, &mut |expr| {
1481
+ f(Expr::Match(ExprMatch {
1482
+ // `match $expr {}`
1483
+ attrs: Vec::new(),
1484
+ match_token: Token![match](span),
1485
+ expr: Box::new(expr.clone()),
1486
+ brace_token: token::Brace(span),
1487
+ arms: Vec::new(),
1488
+ }));
1489
+ f(Expr::Match(ExprMatch {
1490
+ // `match x { _ => $expr }`
1491
+ attrs: Vec::new(),
1492
+ match_token: Token![match](span),
1493
+ expr: Box::new(Expr::Path(ExprPath {
1494
+ attrs: Vec::new(),
1495
+ qself: None,
1496
+ path: Path::from(Ident::new("x", span)),
1497
+ })),
1498
+ brace_token: token::Brace(span),
1499
+ arms: Vec::from([Arm {
1500
+ attrs: Vec::new(),
1501
+ pat: Pat::Wild(PatWild {
1502
+ attrs: Vec::new(),
1503
+ underscore_token: Token![_](span),
1504
+ }),
1505
+ fat_arrow_token: Token![=>](span),
1506
+ body: Box::new(expr.clone()),
1507
+ comma: None,
1508
+ }]),
1509
+ }));
1510
+ f(Expr::Match(ExprMatch {
1511
+ // `match x { _ if $expr => {} }`
1512
+ attrs: Vec::new(),
1513
+ match_token: Token![match](span),
1514
+ expr: Box::new(Expr::Path(ExprPath {
1515
+ attrs: Vec::new(),
1516
+ qself: None,
1517
+ path: Path::from(Ident::new("x", span)),
1518
+ })),
1519
+ brace_token: token::Brace(span),
1520
+ arms: Vec::from([Arm {
1521
+ attrs: Vec::new(),
1522
+ pat: Pat::Guard(PatGuard {
1523
+ attrs: Vec::new(),
1524
+ pat: Box::new(Pat::Wild(PatWild {
1525
+ attrs: Vec::new(),
1526
+ underscore_token: Token![_](span),
1527
+ })),
1528
+ if_token: Token![if](span),
1529
+ guard: Box::new(expr),
1530
+ }),
1531
+ fat_arrow_token: Token![=>](span),
1532
+ body: Box::new(Expr::Block(ExprBlock {
1533
+ attrs: Vec::new(),
1534
+ label: None,
1535
+ block: Block {
1536
+ brace_token: token::Brace(span),
1537
+ stmts: Vec::new(),
1538
+ },
1539
+ })),
1540
+ comma: None,
1541
+ }]),
1542
+ }));
1543
+ });
1544
+
1545
+ // Expr::MethodCall
1546
+ iter(depth, &mut |expr| {
1547
+ f(Expr::MethodCall(ExprMethodCall {
1548
+ // `$expr.method()`
1549
+ attrs: Vec::new(),
1550
+ receiver: Box::new(expr.clone()),
1551
+ dot_token: Token![.](span),
1552
+ method: Ident::new("method", span),
1553
+ turbofish: None,
1554
+ paren_token: token::Paren(span),
1555
+ args: Punctuated::new(),
1556
+ }));
1557
+ f(Expr::MethodCall(ExprMethodCall {
1558
+ // `$expr.method::<T>()`
1559
+ attrs: Vec::new(),
1560
+ receiver: Box::new(expr),
1561
+ dot_token: Token![.](span),
1562
+ method: Ident::new("method", span),
1563
+ turbofish: Some(AngleBracketedGenericArguments {
1564
+ colon2_token: Some(Token![::](span)),
1565
+ lt_token: Token![<](span),
1566
+ args: Punctuated::from_iter([GenericArgument::Type(Type::Path(
1567
+ TypePath {
1568
+ attrs: Vec::new(),
1569
+ qself: None,
1570
+ path: Path::from(Ident::new("T", span)),
1571
+ },
1572
+ ))]),
1573
+ gt_token: Token![>](span),
1574
+ }),
1575
+ paren_token: token::Paren(span),
1576
+ args: Punctuated::new(),
1577
+ }));
1578
+ });
1579
+
1580
+ // Expr::RawAddr
1581
+ iter(depth, &mut |expr| {
1582
+ f(Expr::RawAddr(ExprRawAddr {
1583
+ // `&raw const $expr`
1584
+ attrs: Vec::new(),
1585
+ and_token: Token![&](span),
1586
+ raw: Token![raw](span),
1587
+ mutability: PointerMutability::Const(Token![const](span)),
1588
+ expr: Box::new(expr),
1589
+ }));
1590
+ });
1591
+
1592
+ // Expr::Struct
1593
+ f(Expr::Struct(ExprStruct {
1594
+ // `Struct {}`
1595
+ attrs: Vec::new(),
1596
+ qself: None,
1597
+ path: Path::from(Ident::new("Struct", span)),
1598
+ brace_token: token::Brace(span),
1599
+ fields: Punctuated::new(),
1600
+ dot2_token: None,
1601
+ rest: None,
1602
+ }));
1603
+
1604
+ // Expr::TryBlock
1605
+ f(Expr::TryBlock(ExprTryBlock {
1606
+ // `try {}`
1607
+ attrs: Vec::new(),
1608
+ try_token: Token![try](span),
1609
+ modifiers: BlockModifiers::default(),
1610
+ block: Block {
1611
+ brace_token: token::Brace(span),
1612
+ stmts: Vec::new(),
1613
+ },
1614
+ }));
1615
+
1616
+ // Expr::Unsafe
1617
+ f(Expr::Unsafe(ExprUnsafe {
1618
+ // `unsafe {}`
1619
+ attrs: Vec::new(),
1620
+ unsafe_token: Token![unsafe](span),
1621
+ block: Block {
1622
+ brace_token: token::Brace(span),
1623
+ stmts: Vec::new(),
1624
+ },
1625
+ }));
1626
+
1627
+ // Expr::While
1628
+ iter(depth, &mut |expr| {
1629
+ f(Expr::While(ExprWhile {
1630
+ // `while $expr {}`
1631
+ attrs: Vec::new(),
1632
+ label: None,
1633
+ while_token: Token![while](span),
1634
+ cond: Box::new(expr.clone()),
1635
+ body: Block {
1636
+ brace_token: token::Brace(span),
1637
+ stmts: Vec::new(),
1638
+ },
1639
+ }));
1640
+ f(Expr::While(ExprWhile {
1641
+ // `'a: while $expr {}`
1642
+ attrs: Vec::new(),
1643
+ label: Some(Label {
1644
+ name: Lifetime::new("'a", span),
1645
+ colon_token: Token![:](span),
1646
+ }),
1647
+ while_token: Token![while](span),
1648
+ cond: Box::new(expr),
1649
+ body: Block {
1650
+ brace_token: token::Brace(span),
1651
+ stmts: Vec::new(),
1652
+ },
1653
+ }));
1654
+ });
1655
+
1656
+ // Expr::Yield
1657
+ f(Expr::Yield(ExprYield {
1658
+ // `yield`
1659
+ attrs: Vec::new(),
1660
+ yield_token: Token![yield](span),
1661
+ expr: None,
1662
+ }));
1663
+ iter(depth, &mut |expr| {
1664
+ f(Expr::Yield(ExprYield {
1665
+ // `yield $expr`
1666
+ attrs: Vec::new(),
1667
+ yield_token: Token![yield](span),
1668
+ expr: Some(Box::new(expr)),
1669
+ }));
1670
+ });
1671
+ }
1672
+ }
1673
+
1674
+ let mut failures = 0;
1675
+ macro_rules! fail {
1676
+ ($($message:tt)*) => {{
1677
+ eprintln!($($message)*);
1678
+ failures += 1;
1679
+ return;
1680
+ }};
1681
+ }
1682
+ let mut assert = |mut original: Expr| {
1683
+ let tokens = original.to_token_stream();
1684
+ let Ok(mut parsed) = syn::parse2::<Expr>(tokens.clone()) else {
1685
+ fail!(
1686
+ "failed to parse: {}\n{:#?}",
1687
+ tokens,
1688
+ crate::debug::Lite(&original),
1689
+ );
1690
+ };
1691
+ AsIfPrinted.visit_expr_mut(&mut original);
1692
+ FlattenParens::combine_attrs().visit_expr_mut(&mut parsed);
1693
+ if original != parsed {
1694
+ fail!(
1695
+ "before: {}\n{:#?}\nafter: {}\n{:#?}",
1696
+ tokens,
1697
+ crate::debug::Lite(&original),
1698
+ parsed.to_token_stream(),
1699
+ crate::debug::Lite(&parsed),
1700
+ );
1701
+ }
1702
+ let mut tokens_no_paren = tokens.clone();
1703
+ FlattenParens::visit_token_stream_mut(&mut tokens_no_paren);
1704
+ if tokens.to_string() != tokens_no_paren.to_string() {
1705
+ if let Ok(mut parsed2) = syn::parse2::<Expr>(tokens_no_paren) {
1706
+ FlattenParens::combine_attrs().visit_expr_mut(&mut parsed2);
1707
+ if original == parsed2 {
1708
+ fail!("redundant parens: {}", tokens);
1709
+ }
1710
+ }
1711
+ }
1712
+ };
1713
+
1714
+ iter(4, &mut assert);
1715
+ if failures > 0 {
1716
+ eprintln!("FAILURES: {failures}");
1717
+ ExitCode::FAILURE
1718
+ } else {
1719
+ ExitCode::SUCCESS
1720
+ }
1721
+ }