@alloy-js/csharp 0.20.0-dev.3 → 0.20.0-dev.5

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 (346) hide show
  1. package/dist/src/components/Declaration.d.ts +2 -2
  2. package/dist/src/components/Declaration.d.ts.map +1 -1
  3. package/dist/src/components/Declaration.js +5 -14
  4. package/dist/src/components/Declaration.js.map +1 -0
  5. package/dist/src/components/Name.js +2 -1
  6. package/dist/src/components/Name.js.map +1 -0
  7. package/dist/src/components/ProjectDirectory.js +2 -1
  8. package/dist/src/components/ProjectDirectory.js.map +1 -0
  9. package/dist/src/components/Reference.d.ts.map +1 -1
  10. package/dist/src/components/Reference.js +7 -2
  11. package/dist/src/components/Reference.js.map +1 -0
  12. package/dist/src/components/SourceFile.d.ts +8 -9
  13. package/dist/src/components/SourceFile.d.ts.map +1 -1
  14. package/dist/src/components/SourceFile.js +71 -46
  15. package/dist/src/components/SourceFile.js.map +1 -0
  16. package/dist/src/components/UsingDirective.d.ts +5 -1
  17. package/dist/src/components/UsingDirective.d.ts.map +1 -1
  18. package/dist/src/components/UsingDirective.js +5 -2
  19. package/dist/src/components/UsingDirective.js.map +1 -0
  20. package/dist/src/components/attributes/attributes.js +2 -1
  21. package/dist/src/components/attributes/attributes.js.map +1 -0
  22. package/dist/src/components/attributes/attributes.test.js +2 -1
  23. package/dist/src/components/attributes/attributes.test.js.map +1 -0
  24. package/dist/src/components/class/declaration.d.ts +2 -2
  25. package/dist/src/components/class/declaration.d.ts.map +1 -1
  26. package/dist/src/components/class/declaration.js +20 -33
  27. package/dist/src/components/class/declaration.js.map +1 -0
  28. package/dist/src/components/class/declaration.test.js +173 -194
  29. package/dist/src/components/class/declaration.test.js.map +1 -0
  30. package/dist/src/components/constructor/constructor.d.ts.map +1 -1
  31. package/dist/src/components/constructor/constructor.js +13 -17
  32. package/dist/src/components/constructor/constructor.js.map +1 -0
  33. package/dist/src/components/constructor/constructor.test.js +12 -20
  34. package/dist/src/components/constructor/constructor.test.js.map +1 -0
  35. package/dist/src/components/doc/comment.js +2 -1
  36. package/dist/src/components/doc/comment.js.map +1 -0
  37. package/dist/src/components/doc/comment.test.js +2 -1
  38. package/dist/src/components/doc/comment.test.js.map +1 -0
  39. package/dist/src/components/doc/from-markdown.js +2 -1
  40. package/dist/src/components/doc/from-markdown.js.map +1 -0
  41. package/dist/src/components/doc/from-markdown.test.js +2 -1
  42. package/dist/src/components/doc/from-markdown.test.js.map +1 -0
  43. package/dist/src/components/{EnumDeclaration.d.ts → enum/declaration.d.ts} +6 -11
  44. package/dist/src/components/enum/declaration.d.ts.map +1 -0
  45. package/dist/src/components/enum/declaration.js +55 -0
  46. package/dist/src/components/enum/declaration.js.map +1 -0
  47. package/dist/src/components/enum/declaration.ref.test.d.ts +2 -0
  48. package/dist/src/components/enum/declaration.ref.test.d.ts.map +1 -0
  49. package/dist/src/components/enum/declaration.ref.test.js +121 -0
  50. package/dist/src/components/enum/declaration.ref.test.js.map +1 -0
  51. package/dist/src/components/enum/declaration.test.d.ts +2 -0
  52. package/dist/src/components/enum/declaration.test.d.ts.map +1 -0
  53. package/dist/src/components/enum/declaration.test.js +40 -0
  54. package/dist/src/components/enum/declaration.test.js.map +1 -0
  55. package/dist/src/components/enum/member.d.ts +7 -0
  56. package/dist/src/components/enum/member.d.ts.map +1 -0
  57. package/dist/src/components/enum/member.js +30 -0
  58. package/dist/src/components/enum/member.js.map +1 -0
  59. package/dist/src/components/enum/member.test.d.ts +2 -0
  60. package/dist/src/components/enum/member.test.d.ts.map +1 -0
  61. package/dist/src/components/enum/member.test.js +29 -0
  62. package/dist/src/components/enum/member.test.js.map +1 -0
  63. package/dist/src/components/field/field.d.ts.map +1 -1
  64. package/dist/src/components/field/field.js +11 -15
  65. package/dist/src/components/field/field.js.map +1 -0
  66. package/dist/src/components/field/field.test.js +9 -8
  67. package/dist/src/components/field/field.test.js.map +1 -0
  68. package/dist/src/components/index.d.ts +5 -2
  69. package/dist/src/components/index.d.ts.map +1 -1
  70. package/dist/src/components/index.js +7 -3
  71. package/dist/src/components/index.js.map +1 -0
  72. package/dist/src/components/interface/declaration.d.ts.map +1 -1
  73. package/dist/src/components/interface/declaration.js +21 -22
  74. package/dist/src/components/interface/declaration.js.map +1 -0
  75. package/dist/src/components/interface/declaration.test.js +28 -36
  76. package/dist/src/components/interface/declaration.test.js.map +1 -0
  77. package/dist/src/components/interface/method.d.ts.map +1 -1
  78. package/dist/src/components/interface/method.js +9 -16
  79. package/dist/src/components/interface/method.js.map +1 -0
  80. package/dist/src/components/interface/method.test.js +40 -48
  81. package/dist/src/components/interface/method.test.js.map +1 -0
  82. package/dist/src/components/interface/property.d.ts.map +1 -1
  83. package/dist/src/components/interface/property.js +23 -37
  84. package/dist/src/components/interface/property.js.map +1 -0
  85. package/dist/src/components/interface/property.test.js +13 -12
  86. package/dist/src/components/interface/property.test.js.map +1 -0
  87. package/dist/src/components/lexical-scope.d.ts +8 -0
  88. package/dist/src/components/lexical-scope.d.ts.map +1 -0
  89. package/dist/src/components/lexical-scope.js +25 -0
  90. package/dist/src/components/lexical-scope.js.map +1 -0
  91. package/dist/src/components/method/method.d.ts +5 -2
  92. package/dist/src/components/method/method.d.ts.map +1 -1
  93. package/dist/src/components/method/method.js +9 -14
  94. package/dist/src/components/method/method.js.map +1 -0
  95. package/dist/src/components/method/method.test.js +13 -12
  96. package/dist/src/components/method/method.test.js.map +1 -0
  97. package/dist/src/components/method-scope.d.ts +8 -0
  98. package/dist/src/components/method-scope.d.ts.map +1 -0
  99. package/dist/src/components/method-scope.js +25 -0
  100. package/dist/src/components/method-scope.js.map +1 -0
  101. package/dist/src/components/namespace-scopes.d.ts +13 -0
  102. package/dist/src/components/namespace-scopes.d.ts.map +1 -0
  103. package/dist/src/components/namespace-scopes.js +45 -0
  104. package/dist/src/components/namespace-scopes.js.map +1 -0
  105. package/dist/src/components/namespace.d.ts +7 -0
  106. package/dist/src/components/namespace.d.ts.map +1 -0
  107. package/dist/src/components/namespace.js +47 -0
  108. package/dist/src/components/namespace.js.map +1 -0
  109. package/dist/src/components/namespace.ref.test.d.ts +2 -0
  110. package/dist/src/components/namespace.ref.test.d.ts.map +1 -0
  111. package/dist/src/components/namespace.ref.test.js +182 -0
  112. package/dist/src/components/namespace.ref.test.js.map +1 -0
  113. package/dist/src/components/namespace.test.d.ts.map +1 -0
  114. package/dist/src/components/namespace.test.js +79 -0
  115. package/dist/src/components/namespace.test.js.map +1 -0
  116. package/dist/src/components/parameters/parameters.d.ts +2 -2
  117. package/dist/src/components/parameters/parameters.d.ts.map +1 -1
  118. package/dist/src/components/parameters/parameters.js +14 -12
  119. package/dist/src/components/parameters/parameters.js.map +1 -0
  120. package/dist/src/components/parameters/parameters.test.d.ts +2 -0
  121. package/dist/src/components/parameters/parameters.test.d.ts.map +1 -0
  122. package/dist/src/components/parameters/parameters.test.js +88 -0
  123. package/dist/src/components/parameters/parameters.test.js.map +1 -0
  124. package/dist/src/components/property/property.d.ts.map +1 -1
  125. package/dist/src/components/property/property.js +23 -37
  126. package/dist/src/components/property/property.js.map +1 -0
  127. package/dist/src/components/property/property.test.js +16 -15
  128. package/dist/src/components/property/property.test.js.map +1 -0
  129. package/dist/src/components/record/declaration.d.ts.map +1 -1
  130. package/dist/src/components/record/declaration.js +10 -13
  131. package/dist/src/components/record/declaration.js.map +1 -0
  132. package/dist/src/components/record/declaration.test.js +8 -14
  133. package/dist/src/components/record/declaration.test.js.map +1 -0
  134. package/dist/src/components/stc/index.js +2 -1
  135. package/dist/src/components/stc/index.js.map +1 -0
  136. package/dist/src/components/struct/declaration.d.ts.map +1 -1
  137. package/dist/src/components/struct/declaration.js +6 -7
  138. package/dist/src/components/struct/declaration.js.map +1 -0
  139. package/dist/src/components/struct/declaration.test.js +32 -40
  140. package/dist/src/components/struct/declaration.test.js.map +1 -0
  141. package/dist/src/components/type-parameters/type-parameter-constraints.js +2 -1
  142. package/dist/src/components/type-parameters/type-parameter-constraints.js.map +1 -0
  143. package/dist/src/components/type-parameters/type-parameter-constraints.test.js +2 -1
  144. package/dist/src/components/type-parameters/type-parameter-constraints.test.js.map +1 -0
  145. package/dist/src/components/type-parameters/type-parameter.d.ts.map +1 -1
  146. package/dist/src/components/type-parameters/type-parameter.js +9 -11
  147. package/dist/src/components/type-parameters/type-parameter.js.map +1 -0
  148. package/dist/src/components/type-parameters/type-parameters.js +2 -1
  149. package/dist/src/components/type-parameters/type-parameters.js.map +1 -0
  150. package/dist/src/components/type-parameters/type-parameters.test.js +5 -4
  151. package/dist/src/components/type-parameters/type-parameters.test.js.map +1 -0
  152. package/dist/src/components/var/declaration.d.ts.map +1 -1
  153. package/dist/src/components/var/declaration.js +8 -9
  154. package/dist/src/components/var/declaration.js.map +1 -0
  155. package/dist/src/components/var/declaration.test.js +13 -21
  156. package/dist/src/components/var/declaration.test.js.map +1 -0
  157. package/dist/src/contexts/global-namespace.d.ts +5 -0
  158. package/dist/src/contexts/global-namespace.d.ts.map +1 -0
  159. package/dist/src/contexts/global-namespace.js +25 -0
  160. package/dist/src/contexts/global-namespace.js.map +1 -0
  161. package/dist/src/contexts/namespace.d.ts +8 -0
  162. package/dist/src/contexts/namespace.d.ts.map +1 -0
  163. package/dist/src/contexts/namespace.js +6 -0
  164. package/dist/src/contexts/namespace.js.map +1 -0
  165. package/dist/src/index.d.ts +1 -0
  166. package/dist/src/index.d.ts.map +1 -1
  167. package/dist/src/index.js +3 -1
  168. package/dist/src/index.js.map +1 -0
  169. package/dist/src/modifiers.d.ts +11 -0
  170. package/dist/src/modifiers.d.ts.map +1 -1
  171. package/dist/src/modifiers.js +2 -1
  172. package/dist/src/modifiers.js.map +1 -0
  173. package/dist/src/name-policy.js +2 -1
  174. package/dist/src/name-policy.js.map +1 -0
  175. package/dist/src/scopes/class.d.ts +10 -0
  176. package/dist/src/scopes/class.d.ts.map +1 -0
  177. package/dist/src/scopes/class.js +11 -0
  178. package/dist/src/scopes/class.js.map +1 -0
  179. package/dist/src/scopes/contexts.d.ts +9 -0
  180. package/dist/src/scopes/contexts.d.ts.map +1 -0
  181. package/dist/src/scopes/contexts.js +34 -0
  182. package/dist/src/scopes/contexts.js.map +1 -0
  183. package/dist/src/scopes/csharp.d.ts +8 -0
  184. package/dist/src/scopes/csharp.d.ts.map +1 -0
  185. package/dist/src/scopes/csharp.js +12 -0
  186. package/dist/src/scopes/csharp.js.map +1 -0
  187. package/dist/src/scopes/factories.d.ts +9 -0
  188. package/dist/src/scopes/factories.d.ts.map +1 -0
  189. package/dist/src/scopes/factories.js +24 -0
  190. package/dist/src/scopes/factories.js.map +1 -0
  191. package/dist/src/scopes/index.d.ts +10 -0
  192. package/dist/src/scopes/index.d.ts.map +1 -0
  193. package/dist/src/scopes/index.js +10 -0
  194. package/dist/src/scopes/index.js.map +1 -0
  195. package/dist/src/scopes/lexical.d.ts +7 -0
  196. package/dist/src/scopes/lexical.d.ts.map +1 -0
  197. package/dist/src/scopes/lexical.js +8 -0
  198. package/dist/src/scopes/lexical.js.map +1 -0
  199. package/dist/src/scopes/method.d.ts +9 -0
  200. package/dist/src/scopes/method.d.ts.map +1 -0
  201. package/dist/src/scopes/method.js +14 -0
  202. package/dist/src/scopes/method.js.map +1 -0
  203. package/dist/src/scopes/named-type.d.ts +22 -0
  204. package/dist/src/scopes/named-type.d.ts.map +1 -0
  205. package/dist/src/scopes/named-type.js +33 -0
  206. package/dist/src/scopes/named-type.js.map +1 -0
  207. package/dist/src/scopes/namespace.d.ts +11 -0
  208. package/dist/src/scopes/namespace.d.ts.map +1 -0
  209. package/dist/src/scopes/namespace.js +39 -0
  210. package/dist/src/scopes/namespace.js.map +1 -0
  211. package/dist/src/scopes/source-file.d.ts +16 -0
  212. package/dist/src/scopes/source-file.d.ts.map +1 -0
  213. package/dist/src/scopes/source-file.js +44 -0
  214. package/dist/src/scopes/source-file.js.map +1 -0
  215. package/dist/src/symbols/csharp.d.ts +76 -0
  216. package/dist/src/symbols/csharp.d.ts.map +1 -0
  217. package/dist/src/symbols/csharp.js +223 -0
  218. package/dist/src/symbols/csharp.js.map +1 -0
  219. package/dist/src/symbols/factories.d.ts +25 -0
  220. package/dist/src/symbols/factories.d.ts.map +1 -0
  221. package/dist/src/symbols/factories.js +87 -0
  222. package/dist/src/symbols/factories.js.map +1 -0
  223. package/dist/src/symbols/index.d.ts +5 -2
  224. package/dist/src/symbols/index.d.ts.map +1 -1
  225. package/dist/src/symbols/index.js +6 -2
  226. package/dist/src/symbols/index.js.map +1 -0
  227. package/dist/src/symbols/method.d.ts +13 -0
  228. package/dist/src/symbols/method.d.ts.map +1 -0
  229. package/dist/src/symbols/method.js +16 -0
  230. package/dist/src/symbols/method.js.map +1 -0
  231. package/dist/src/symbols/named-type.d.ts +19 -0
  232. package/dist/src/symbols/named-type.d.ts.map +1 -0
  233. package/dist/src/symbols/named-type.js +31 -0
  234. package/dist/src/symbols/named-type.js.map +1 -0
  235. package/dist/src/symbols/namespace.d.ts +22 -0
  236. package/dist/src/symbols/namespace.d.ts.map +1 -0
  237. package/dist/src/symbols/namespace.js +45 -0
  238. package/dist/src/symbols/namespace.js.map +1 -0
  239. package/dist/src/symbols/reference.d.ts +2 -2
  240. package/dist/src/symbols/reference.d.ts.map +1 -1
  241. package/dist/src/symbols/reference.js +38 -44
  242. package/dist/src/symbols/reference.js.map +1 -0
  243. package/dist/test/project-directory.test.js +14 -17
  244. package/dist/test/project-directory.test.js.map +1 -0
  245. package/dist/test/sourcefile.test.js +8 -19
  246. package/dist/test/sourcefile.test.js.map +1 -0
  247. package/dist/test/using.test.js +20 -17
  248. package/dist/test/using.test.js.map +1 -0
  249. package/dist/test/utils.js +4 -3
  250. package/dist/test/utils.js.map +1 -0
  251. package/dist/test/vitest.setup.js +2 -1
  252. package/dist/test/vitest.setup.js.map +1 -0
  253. package/dist/tsconfig.tsbuildinfo +1 -1
  254. package/package.json +9 -3
  255. package/src/components/Declaration.tsx +3 -6
  256. package/src/components/Reference.tsx +3 -1
  257. package/src/components/SourceFile.tsx +68 -55
  258. package/src/components/UsingDirective.tsx +12 -2
  259. package/src/components/class/declaration.test.tsx +120 -143
  260. package/src/components/class/declaration.tsx +19 -32
  261. package/src/components/constructor/constructor.test.tsx +10 -16
  262. package/src/components/constructor/constructor.tsx +13 -27
  263. package/src/components/enum/declaration.ref.test.tsx +93 -0
  264. package/src/components/enum/declaration.test.tsx +34 -0
  265. package/src/components/enum/declaration.tsx +65 -0
  266. package/src/components/enum/member.test.tsx +24 -0
  267. package/src/components/enum/member.tsx +36 -0
  268. package/src/components/field/field.test.tsx +7 -7
  269. package/src/components/field/field.tsx +12 -14
  270. package/src/components/index.ts +5 -2
  271. package/src/components/interface/declaration.test.tsx +26 -32
  272. package/src/components/interface/declaration.tsx +16 -18
  273. package/src/components/interface/method.test.tsx +38 -44
  274. package/src/components/interface/method.tsx +7 -19
  275. package/src/components/interface/property.test.tsx +11 -11
  276. package/src/components/interface/property.tsx +15 -33
  277. package/src/components/lexical-scope.tsx +29 -0
  278. package/src/components/method/method.test.tsx +11 -11
  279. package/src/components/method/method.tsx +12 -18
  280. package/src/components/method-scope.tsx +27 -0
  281. package/src/components/namespace-scopes.tsx +44 -0
  282. package/src/components/namespace.ref.test.tsx +139 -0
  283. package/src/components/namespace.test.tsx +52 -0
  284. package/src/components/namespace.tsx +45 -0
  285. package/src/components/parameters/parameters.test.tsx +71 -0
  286. package/src/components/parameters/parameters.tsx +9 -16
  287. package/src/components/property/property.test.tsx +14 -14
  288. package/src/components/property/property.tsx +17 -38
  289. package/src/components/record/declaration.test.tsx +5 -12
  290. package/src/components/record/declaration.tsx +10 -11
  291. package/src/components/struct/declaration.test.tsx +16 -22
  292. package/src/components/struct/declaration.tsx +4 -6
  293. package/src/components/type-parameters/type-parameter.tsx +14 -11
  294. package/src/components/type-parameters/type-parameters.test.tsx +4 -4
  295. package/src/components/var/declaration.test.tsx +8 -14
  296. package/src/components/var/declaration.tsx +12 -6
  297. package/src/contexts/global-namespace.ts +29 -0
  298. package/src/contexts/namespace.ts +13 -0
  299. package/src/index.ts +1 -0
  300. package/src/modifiers.ts +14 -0
  301. package/src/scopes/class.ts +12 -0
  302. package/src/scopes/contexts.ts +45 -0
  303. package/src/scopes/csharp.ts +18 -0
  304. package/src/scopes/factories.ts +45 -0
  305. package/src/scopes/index.ts +9 -0
  306. package/src/scopes/lexical.ts +10 -0
  307. package/src/scopes/method.ts +22 -0
  308. package/src/scopes/named-type.ts +44 -0
  309. package/src/scopes/namespace.ts +59 -0
  310. package/src/scopes/source-file.ts +67 -0
  311. package/src/symbols/csharp.ts +307 -0
  312. package/src/symbols/factories.ts +199 -0
  313. package/src/symbols/index.ts +5 -2
  314. package/src/symbols/method.ts +26 -0
  315. package/src/symbols/named-type.ts +54 -0
  316. package/src/symbols/namespace.ts +62 -0
  317. package/src/symbols/reference.ts +47 -50
  318. package/temp/api.json +6251 -2454
  319. package/test/project-directory.test.tsx +12 -16
  320. package/test/sourcefile.test.tsx +7 -21
  321. package/test/using.test.tsx +18 -16
  322. package/test/utils.tsx +1 -1
  323. package/tsconfig.json +4 -1
  324. package/dist/src/components/EnumDeclaration.d.ts.map +0 -1
  325. package/dist/src/components/EnumDeclaration.js +0 -82
  326. package/dist/src/components/Namespace.d.ts +0 -11
  327. package/dist/src/components/Namespace.d.ts.map +0 -1
  328. package/dist/src/components/Namespace.js +0 -33
  329. package/dist/src/symbols/csharp-output-symbol.d.ts +0 -8
  330. package/dist/src/symbols/csharp-output-symbol.d.ts.map +0 -1
  331. package/dist/src/symbols/csharp-output-symbol.js +0 -19
  332. package/dist/src/symbols/scopes.d.ts +0 -20
  333. package/dist/src/symbols/scopes.d.ts.map +0 -1
  334. package/dist/src/symbols/scopes.js +0 -42
  335. package/dist/test/enum.test.d.ts +0 -2
  336. package/dist/test/enum.test.d.ts.map +0 -1
  337. package/dist/test/enum.test.js +0 -178
  338. package/dist/test/namespace.test.d.ts.map +0 -1
  339. package/dist/test/namespace.test.js +0 -81
  340. package/src/components/EnumDeclaration.tsx +0 -98
  341. package/src/components/Namespace.tsx +0 -35
  342. package/src/symbols/csharp-output-symbol.ts +0 -22
  343. package/src/symbols/scopes.ts +0 -61
  344. package/test/enum.test.tsx +0 -149
  345. package/test/namespace.test.tsx +0 -55
  346. /package/dist/{test → src/components}/namespace.test.d.ts +0 -0
@@ -0,0 +1,139 @@
1
+ import { Output, refkey } from "@alloy-js/core";
2
+ import { d } from "@alloy-js/core/testing";
3
+ import { expect, it } from "vitest";
4
+ import { ClassDeclaration } from "./class/declaration.jsx";
5
+ import { Namespace } from "./namespace.jsx";
6
+ import { SourceFile } from "./SourceFile.jsx";
7
+
8
+ it("references types in the same namespace", () => {
9
+ const classRef = refkey();
10
+
11
+ const tree = (
12
+ <Output>
13
+ <Namespace name="Test">
14
+ <SourceFile path="test.cs">
15
+ <ClassDeclaration name="TestClass" refkey={classRef} />
16
+ <hbr />
17
+ {classRef};
18
+ </SourceFile>
19
+ </Namespace>
20
+ </Output>
21
+ );
22
+
23
+ expect(tree).toRenderTo(d`
24
+ namespace Test;
25
+
26
+ class TestClass;
27
+ TestClass;
28
+ `);
29
+ });
30
+
31
+ it("references types in a parent namespace", () => {
32
+ const classRef = refkey();
33
+
34
+ const tree = (
35
+ <Output>
36
+ <Namespace name="Test">
37
+ <SourceFile path="test.cs">
38
+ <ClassDeclaration name="TestClass" refkey={classRef} />
39
+ <hbr />
40
+ <Namespace name="Nested">{classRef};</Namespace>
41
+ </SourceFile>
42
+ </Namespace>
43
+ </Output>
44
+ );
45
+
46
+ expect(tree).toRenderTo(d`
47
+ namespace Test {
48
+ class TestClass;
49
+ namespace Nested {
50
+ TestClass;
51
+ }
52
+ }
53
+ `);
54
+ });
55
+
56
+ it("references types in a child namespace", () => {
57
+ const classRef = refkey();
58
+
59
+ const tree = (
60
+ <Output>
61
+ <Namespace name="Test">
62
+ <SourceFile path="test.cs">
63
+ {classRef};<hbr />
64
+ <Namespace name="Nested">
65
+ <ClassDeclaration name="TestClass" refkey={classRef} />
66
+ </Namespace>
67
+ </SourceFile>
68
+ </Namespace>
69
+ </Output>
70
+ );
71
+
72
+ expect(tree).toRenderTo(d`
73
+ namespace Test {
74
+ Nested.TestClass;
75
+ namespace Nested {
76
+ class TestClass;
77
+ }
78
+ }
79
+ `);
80
+ });
81
+
82
+ it("references types in a different top-level namespace declared in the same file", () => {
83
+ const classRef = refkey();
84
+
85
+ const tree = (
86
+ <Output>
87
+ <SourceFile path="test.cs">
88
+ <Namespace name="TestCode1">{classRef}</Namespace>
89
+ <hbr />
90
+ <Namespace name="TestCode2">
91
+ <ClassDeclaration name="TestClass" refkey={classRef} />
92
+ </Namespace>
93
+ </SourceFile>
94
+ </Output>
95
+ );
96
+
97
+ expect(tree).toRenderTo(d`
98
+ using TestCode2;
99
+
100
+ namespace TestCode1 {
101
+ TestClass
102
+ }
103
+ namespace TestCode2 {
104
+ class TestClass;
105
+ }
106
+ `);
107
+ });
108
+
109
+ it("references types in a different top-level namespace declared in a different file", () => {
110
+ const classRef = refkey();
111
+
112
+ const tree = (
113
+ <Output>
114
+ <SourceFile path="test.cs">
115
+ <Namespace name="TestCode1">{classRef};</Namespace>
116
+ </SourceFile>
117
+ <SourceFile path="other.cs">
118
+ <Namespace name="TestCode2">
119
+ <ClassDeclaration name="TestClass" refkey={classRef} />
120
+ </Namespace>
121
+ </SourceFile>
122
+ </Output>
123
+ );
124
+
125
+ expect(tree).toRenderTo({
126
+ "test.cs": d`
127
+ using TestCode2;
128
+
129
+ namespace TestCode1 {
130
+ TestClass;
131
+ }
132
+ `,
133
+ "other.cs": d`
134
+ namespace TestCode2 {
135
+ class TestClass;
136
+ }
137
+ `,
138
+ });
139
+ });
@@ -0,0 +1,52 @@
1
+ import { Output } from "@alloy-js/core";
2
+ import { d } from "@alloy-js/core/testing";
3
+ import { expect, it } from "vitest";
4
+ import { ClassDeclaration } from "./class/declaration.jsx";
5
+ import { Namespace } from "./namespace.jsx";
6
+ import { SourceFile } from "./SourceFile.jsx";
7
+
8
+ it("defines multiple namespaces and source files with unique content", () => {
9
+ const tree = (
10
+ <Output>
11
+ <Namespace name="Namespace1">
12
+ <SourceFile path="Model1.cs">
13
+ <ClassDeclaration public name="Model1" />
14
+ </SourceFile>
15
+ <SourceFile path="Model2.cs">
16
+ <ClassDeclaration public name="Model2" />
17
+ </SourceFile>
18
+ </Namespace>
19
+ <Namespace name="Namespace2">
20
+ <SourceFile path="Model3.cs">
21
+ <ClassDeclaration public name="Model3" />
22
+ </SourceFile>
23
+ <SourceFile path="Model4.cs">
24
+ <ClassDeclaration public name="Model4" />
25
+ </SourceFile>
26
+ </Namespace>
27
+ </Output>
28
+ );
29
+
30
+ expect(tree).toRenderTo({
31
+ "Model1.cs": d`
32
+ namespace Namespace1;
33
+
34
+ public class Model1;
35
+ `,
36
+ "Model2.cs": d`
37
+ namespace Namespace1;
38
+
39
+ public class Model2;
40
+ `,
41
+ "Model3.cs": d`
42
+ namespace Namespace2;
43
+
44
+ public class Model3;
45
+ `,
46
+ "Model4.cs": d`
47
+ namespace Namespace2;
48
+
49
+ public class Model4;
50
+ `,
51
+ });
52
+ });
@@ -0,0 +1,45 @@
1
+ import { Block } from "@alloy-js/core";
2
+ import { Children } from "@alloy-js/core/jsx-runtime";
3
+ import { NamespaceContext } from "../contexts/namespace.js";
4
+ import { useSourceFileScope } from "../scopes/source-file.js";
5
+ import { createNamespaceSymbol } from "../symbols/factories.js";
6
+ import { NamespaceScope } from "./namespace-scopes.jsx";
7
+
8
+ export interface NamespaceProps {
9
+ name: string;
10
+ children?: Children;
11
+ }
12
+
13
+ export function Namespace(props: NamespaceProps) {
14
+ const namespaceSymbol = createNamespaceSymbol(props.name);
15
+ const sfScope = useSourceFileScope();
16
+
17
+ if (!sfScope) {
18
+ return (
19
+ <NamespaceContext.Provider value={{ symbol: namespaceSymbol }}>
20
+ {props.children}
21
+ </NamespaceContext.Provider>
22
+ );
23
+ } else {
24
+ sfScope.hasBlockNamespace = true;
25
+ return (
26
+ <>
27
+ namespace {namespaceSymbol.name}{" "}
28
+ <Block>
29
+ <NamespaceContext.Provider value={{ symbol: namespaceSymbol }}>
30
+ <NamespaceScope symbol={namespaceSymbol}>
31
+ {props.children}
32
+ </NamespaceScope>
33
+ </NamespaceContext.Provider>
34
+ </Block>
35
+ </>
36
+ );
37
+ }
38
+ }
39
+
40
+ /*
41
+ const scope = createCSharpNamespaceScope(namespaceSymbol);
42
+
43
+ return <Scope value={scope}>{props.children}</Scope>;
44
+ }
45
+ */
@@ -0,0 +1,71 @@
1
+ import { ClassDeclaration } from "#components/class/declaration.jsx";
2
+ import { Method } from "#components/method/method.jsx";
3
+ import { List, memberRefkey, namekey } from "@alloy-js/core";
4
+ import { Children } from "@alloy-js/core/jsx-runtime";
5
+ import { expect, it } from "vitest";
6
+ import { TestNamespace } from "../../../test/utils.jsx";
7
+
8
+ const Wrapper = (props: { children: Children }) => (
9
+ <TestNamespace>
10
+ <ClassDeclaration public name="TestClass">
11
+ {props.children}
12
+ </ClassDeclaration>
13
+ </TestNamespace>
14
+ );
15
+
16
+ it("can be referenced", () => {
17
+ const param1Key = namekey("param1");
18
+ const param2Key = namekey("param2");
19
+ expect(
20
+ <Wrapper>
21
+ <Method
22
+ name="MethodOne"
23
+ parameters={[
24
+ { name: param1Key, type: "T1" },
25
+ { name: param2Key, type: "T2" },
26
+ ]}
27
+ />
28
+ </Wrapper>,
29
+ ).toRenderTo(`
30
+ public class TestClass
31
+ {
32
+ void MethodOne(T1 param1, T2 param2) {}
33
+ }
34
+ `);
35
+ });
36
+
37
+ it("members can be referenced", () => {
38
+ const classKey = namekey("TestType");
39
+ const methodKey = namekey("TestMethod");
40
+ const param1Key = namekey("param1");
41
+
42
+ expect(
43
+ <TestNamespace>
44
+ <List>
45
+ <ClassDeclaration name={classKey}>
46
+ <Method name={methodKey} />
47
+ </ClassDeclaration>
48
+ <ClassDeclaration name="Test">
49
+ <Method
50
+ name="Test"
51
+ parameters={[{ name: param1Key, type: classKey }]}
52
+ >
53
+ return {memberRefkey(param1Key, methodKey)}();
54
+ </Method>
55
+ </ClassDeclaration>
56
+ </List>
57
+ </TestNamespace>,
58
+ ).toRenderTo(`
59
+ class TestType
60
+ {
61
+ void TestMethod() {}
62
+ }
63
+ class Test
64
+ {
65
+ void Test(TestType param1)
66
+ {
67
+ return param1.TestMethod();
68
+ }
69
+ }
70
+ `);
71
+ });
@@ -1,20 +1,19 @@
1
1
  import {
2
2
  Children,
3
3
  code,
4
+ createSymbolSlot,
4
5
  Declaration,
5
6
  For,
6
7
  Indent,
8
+ Namekey,
7
9
  OutputSymbol,
8
- refkey,
9
10
  Refkey,
10
11
  } from "@alloy-js/core";
11
- import { useCSharpNamePolicy } from "../../name-policy.js";
12
- import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
13
- import { useCSharpMemberScope } from "../../symbols/scopes.js";
12
+ import { createParameterSymbol } from "../../symbols/factories.js";
14
13
  import { Name } from "../Name.jsx";
15
14
 
16
15
  export interface ParameterProps {
17
- name: string;
16
+ name: string | Namekey;
18
17
  type: Children;
19
18
  /** If the parmaeter is optional(without default value) */
20
19
  optional?: boolean;
@@ -26,22 +25,16 @@ export interface ParameterProps {
26
25
 
27
26
  /** Define a parameter to be used in class or interface method. */
28
27
  export function Parameter(props: ParameterProps) {
29
- const name = useCSharpNamePolicy().getName(props.name, "parameter");
30
- const scope = useCSharpMemberScope([
31
- "constructor-decl",
32
- "method-decl",
33
- "class-decl",
34
- "record-decl",
35
- ]);
28
+ const TypeSlot = createSymbolSlot();
36
29
 
37
- const memberSymbol = new CSharpOutputSymbol(name, {
38
- scope,
39
- refkeys: props.refkey ?? refkey(props.name),
30
+ const memberSymbol = createParameterSymbol(props.name, {
31
+ refkeys: props.refkey,
32
+ type: TypeSlot.firstSymbol,
40
33
  });
41
34
 
42
35
  return (
43
36
  <Declaration symbol={memberSymbol}>
44
- {props.type}
37
+ <TypeSlot>{props.type}</TypeSlot>
45
38
  {props.optional ? "?" : ""} <Name />
46
39
  {props.default ? code` = ${props.default}` : ""}
47
40
  </Declaration>
@@ -30,7 +30,7 @@ describe("modifiers", () => {
30
30
  ).toRenderTo(`
31
31
  public class TestClass
32
32
  {
33
- ${accessModifier} string TestProp { get; }
33
+ ${accessModifier} string TestProp { get; }
34
34
  }
35
35
  `);
36
36
  },
@@ -61,7 +61,7 @@ describe("modifiers", () => {
61
61
  ).toRenderTo(`
62
62
  public class TestClass
63
63
  {
64
- ${methodModifier} string TestProp { get; }
64
+ ${methodModifier} string TestProp { get; }
65
65
  }
66
66
  `);
67
67
  });
@@ -75,7 +75,7 @@ describe("modifiers", () => {
75
75
  ).toRenderTo(`
76
76
  public class TestClass
77
77
  {
78
- public new string TestProp { get; }
78
+ public new string TestProp { get; }
79
79
  }
80
80
  `);
81
81
  });
@@ -89,7 +89,7 @@ it("applies PascalCase naming policy", () => {
89
89
  ).toRenderTo(`
90
90
  public class TestClass
91
91
  {
92
- string TestProp { get; }
92
+ string TestProp { get; }
93
93
  }
94
94
  `);
95
95
  });
@@ -102,7 +102,7 @@ it("has getter only", () => {
102
102
  ).toRenderTo(`
103
103
  public class TestClass
104
104
  {
105
- string TestProp { get; }
105
+ string TestProp { get; }
106
106
  }
107
107
  `);
108
108
  });
@@ -115,7 +115,7 @@ it("has setter only", () => {
115
115
  ).toRenderTo(`
116
116
  public class TestClass
117
117
  {
118
- string TestProp { set; }
118
+ string TestProp { set; }
119
119
  }
120
120
  `);
121
121
  });
@@ -128,7 +128,7 @@ it("has getter and setter", () => {
128
128
  ).toRenderTo(`
129
129
  public class TestClass
130
130
  {
131
- string TestProp { get; set; }
131
+ string TestProp { get; set; }
132
132
  }
133
133
  `);
134
134
  });
@@ -141,7 +141,7 @@ it("has getter and init", () => {
141
141
  ).toRenderTo(`
142
142
  public class TestClass
143
143
  {
144
- string TestProp { get; init; }
144
+ string TestProp { get; init; }
145
145
  }
146
146
  `);
147
147
  });
@@ -156,8 +156,8 @@ it("specify doc comment", () => {
156
156
  ).toRenderTo(`
157
157
  class Test
158
158
  {
159
- /// This is a test
160
- string Method { get; set; }
159
+ /// This is a test
160
+ string Method { get; set; }
161
161
  }
162
162
  `);
163
163
  });
@@ -170,7 +170,7 @@ it("specify nullable property", () => {
170
170
  ).toRenderTo(`
171
171
  public class TestClass
172
172
  {
173
- string? TestProp { get; set; }
173
+ string? TestProp { get; set; }
174
174
  }
175
175
  `);
176
176
  });
@@ -183,7 +183,7 @@ it("specify initializer", () => {
183
183
  ).toRenderTo(`
184
184
  public class TestClass
185
185
  {
186
- string TestProp { get; set; } = "abc";
186
+ string TestProp { get; set; } = "abc";
187
187
  }
188
188
  `);
189
189
  });
@@ -202,8 +202,8 @@ it("specify attributes", () => {
202
202
  ).toRenderTo(`
203
203
  public class TestClass
204
204
  {
205
- [Test]
206
- int Test { get; set; }
205
+ [Test]
206
+ int Test { get; set; }
207
207
  }
208
208
  `);
209
209
  });
@@ -4,9 +4,8 @@ import {
4
4
  code,
5
5
  List,
6
6
  MemberDeclaration,
7
- refkey,
7
+ MemberName,
8
8
  Refkey,
9
- Scope,
10
9
  } from "@alloy-js/core";
11
10
  import {
12
11
  AccessModifiers,
@@ -14,12 +13,7 @@ import {
14
13
  getAccessModifier,
15
14
  makeModifiers,
16
15
  } from "../../modifiers.js";
17
- import { useCSharpNamePolicy } from "../../name-policy.js";
18
- import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
19
- import {
20
- CSharpMemberScope,
21
- useCSharpMemberScope,
22
- } from "../../symbols/scopes.js";
16
+ import { createPropertySymbol } from "../../symbols/factories.js";
23
17
  import { AttributeList, AttributesProp } from "../attributes/attributes.jsx";
24
18
  import { DocWhen } from "../doc/comment.jsx";
25
19
 
@@ -121,21 +115,8 @@ export interface PropertyProps extends AccessModifiers, PropertyModifiers {
121
115
  * ```
122
116
  */
123
117
  export function Property(props: PropertyProps) {
124
- const name = useCSharpNamePolicy().getName(props.name, "class-property");
125
- const scope = useCSharpMemberScope([
126
- "class-decl",
127
- "record-decl",
128
- "struct-decl",
129
- ]);
130
-
131
- const propertySymbol = new CSharpOutputSymbol(name, {
132
- scope,
133
- refkeys: props.refkey ?? refkey(props.name),
134
- });
135
-
136
- // scope for property declaration
137
- const propertyScope = new CSharpMemberScope("property-decl", {
138
- owner: propertySymbol,
118
+ const propertySymbol = createPropertySymbol(props.name, {
119
+ refkeys: props.refkey,
139
120
  });
140
121
 
141
122
  const modifiers = computeModifiersPrefix([
@@ -151,21 +132,19 @@ export function Property(props: PropertyProps) {
151
132
  // note that scope wraps the method decl so that the params get the correct scope
152
133
  return (
153
134
  <MemberDeclaration symbol={propertySymbol}>
154
- <Scope value={propertyScope}>
155
- <DocWhen doc={props.doc} />
156
- <AttributeList attributes={props.attributes} endline />
157
- {modifiers}
158
- {props.type}
159
- {props.nullable && "?"} {name}{" "}
160
- <Block newline inline>
161
- <List joiner=" ">
162
- {props.get && "get;"}
163
- {props.set && "set;"}
164
- {props.init && "init;"}
165
- </List>
166
- </Block>
167
- {props.initializer && code` = ${props.initializer};`}
168
- </Scope>
135
+ <DocWhen doc={props.doc} />
136
+ <AttributeList attributes={props.attributes} endline />
137
+ {modifiers}
138
+ {props.type}
139
+ {props.nullable && "?"} <MemberName />{" "}
140
+ <Block newline inline>
141
+ <List joiner=" ">
142
+ {props.get && "get;"}
143
+ {props.set && "set;"}
144
+ {props.init && "init;"}
145
+ </List>
146
+ </Block>
147
+ {props.initializer && code` = ${props.initializer};`}
169
148
  </MemberDeclaration>
170
149
  );
171
150
  }
@@ -2,15 +2,11 @@ import { Children, code, refkey } from "@alloy-js/core";
2
2
  import { describe, expect, it } from "vitest";
3
3
  import { TestNamespace } from "../../../test/utils.jsx";
4
4
  import { Property } from "../property/property.jsx";
5
- import { SourceFile } from "../SourceFile.jsx";
6
5
  import { RecordDeclaration } from "./declaration.jsx";
7
6
 
7
+ // Remove Wrapper that added <SourceFile> because TestNamespace already does
8
8
  function Wrapper({ children }: { children: Children }) {
9
- return (
10
- <TestNamespace>
11
- <SourceFile path="Test.cs">{children}</SourceFile>
12
- </TestNamespace>
13
- );
9
+ return <TestNamespace>{children}</TestNamespace>;
14
10
  }
15
11
 
16
12
  it("declares record with no members", () => {
@@ -77,7 +73,7 @@ it("specify record property inside", () => {
77
73
  /// This is a test
78
74
  record TestRecord
79
75
  {
80
- string Prop { get; set; }
76
+ string Prop { get; set; }
81
77
  }
82
78
  `);
83
79
  });
@@ -112,12 +108,9 @@ describe("constructor", () => {
112
108
  </RecordDeclaration>
113
109
  </Wrapper>,
114
110
  ).toRenderTo(`
115
- namespace TestCode
111
+ public record Test(string name, int size)
116
112
  {
117
- public record Test(string name, int size)
118
- {
119
- string PrettyName { get; } = $"{name} {size}";
120
- }
113
+ string PrettyName { get; } = $"{name} {size}";
121
114
  }
122
115
  `);
123
116
  });
@@ -6,8 +6,11 @@ import {
6
6
  makeModifiers,
7
7
  } from "../../modifiers.js";
8
8
  import { useCSharpNamePolicy } from "../../name-policy.js";
9
- import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
10
- import { CSharpMemberScope } from "../../symbols/scopes.js";
9
+ import { createClassScope } from "../../scopes/factories.js";
10
+ import {
11
+ createNamedTypeSymbol,
12
+ createTypeParameterSymbol,
13
+ } from "../../symbols/factories.js";
11
14
  import { DocWhen } from "../doc/comment.jsx";
12
15
  import { Name } from "../Name.jsx";
13
16
  import { ParameterProps, Parameters } from "../parameters/parameters.jsx";
@@ -72,17 +75,13 @@ export interface RecordDeclarationProps
72
75
  export function RecordDeclaration(props: RecordDeclarationProps) {
73
76
  const name = useCSharpNamePolicy().getName(props.name!, "record");
74
77
 
75
- const thisRecordSymbol = new CSharpOutputSymbol(name, {
78
+ // records don't have their own type kind but instead use class or struct
79
+ // depending on what kind of record we have.
80
+ const thisRecordSymbol = createNamedTypeSymbol(name, "record", {
76
81
  refkeys: props.refkey,
77
82
  });
78
83
 
79
- // this creates a new scope for the record definition.
80
- // members will automatically "inherit" this scope so
81
- // that refkeys to them will produce the fully-qualified
82
- // name e.g. Foo.Bar.
83
- const thisRecordScope = new CSharpMemberScope("record-decl", {
84
- owner: thisRecordSymbol,
85
- });
84
+ const thisRecordScope = createClassScope(thisRecordSymbol);
86
85
 
87
86
  let typeParams: core.Children;
88
87
  if (props.typeParameters) {
@@ -93,7 +92,7 @@ export function RecordDeclaration(props: RecordDeclarationProps) {
93
92
  );
94
93
  // create a symbol for each type param so its
95
94
  // refkey resolves to the type param's name
96
- new CSharpOutputSymbol(entry[0], {
95
+ createTypeParameterSymbol(entry[0], {
97
96
  scope: thisRecordScope,
98
97
  refkeys: entry[1],
99
98
  });