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

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 (249) 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 +3 -13
  4. package/dist/src/components/Reference.d.ts.map +1 -1
  5. package/dist/src/components/Reference.js +5 -1
  6. package/dist/src/components/SourceFile.d.ts +8 -9
  7. package/dist/src/components/SourceFile.d.ts.map +1 -1
  8. package/dist/src/components/SourceFile.js +69 -45
  9. package/dist/src/components/UsingDirective.d.ts +5 -1
  10. package/dist/src/components/UsingDirective.d.ts.map +1 -1
  11. package/dist/src/components/UsingDirective.js +3 -1
  12. package/dist/src/components/class/declaration.d.ts +2 -2
  13. package/dist/src/components/class/declaration.d.ts.map +1 -1
  14. package/dist/src/components/class/declaration.js +18 -32
  15. package/dist/src/components/class/declaration.test.js +171 -193
  16. package/dist/src/components/constructor/constructor.d.ts.map +1 -1
  17. package/dist/src/components/constructor/constructor.js +11 -16
  18. package/dist/src/components/constructor/constructor.test.js +10 -19
  19. package/dist/src/components/{EnumDeclaration.d.ts → enum/declaration.d.ts} +6 -11
  20. package/dist/src/components/enum/declaration.d.ts.map +1 -0
  21. package/dist/src/components/enum/declaration.js +54 -0
  22. package/dist/src/components/enum/declaration.ref.test.d.ts +2 -0
  23. package/dist/src/components/enum/declaration.ref.test.d.ts.map +1 -0
  24. package/dist/src/components/enum/declaration.ref.test.js +120 -0
  25. package/dist/src/components/enum/declaration.test.d.ts +2 -0
  26. package/dist/src/components/enum/declaration.test.d.ts.map +1 -0
  27. package/dist/src/components/enum/declaration.test.js +39 -0
  28. package/dist/src/components/enum/member.d.ts +7 -0
  29. package/dist/src/components/enum/member.d.ts.map +1 -0
  30. package/dist/src/components/enum/member.js +29 -0
  31. package/dist/src/components/enum/member.test.d.ts +2 -0
  32. package/dist/src/components/enum/member.test.d.ts.map +1 -0
  33. package/dist/src/components/enum/member.test.js +28 -0
  34. package/dist/src/components/field/field.d.ts.map +1 -1
  35. package/dist/src/components/field/field.js +9 -14
  36. package/dist/src/components/field/field.test.js +7 -7
  37. package/dist/src/components/index.d.ts +5 -2
  38. package/dist/src/components/index.d.ts.map +1 -1
  39. package/dist/src/components/index.js +5 -2
  40. package/dist/src/components/interface/declaration.d.ts.map +1 -1
  41. package/dist/src/components/interface/declaration.js +19 -21
  42. package/dist/src/components/interface/declaration.test.js +26 -35
  43. package/dist/src/components/interface/method.d.ts.map +1 -1
  44. package/dist/src/components/interface/method.js +7 -15
  45. package/dist/src/components/interface/method.test.js +38 -47
  46. package/dist/src/components/interface/property.d.ts.map +1 -1
  47. package/dist/src/components/interface/property.js +21 -36
  48. package/dist/src/components/interface/property.test.js +11 -11
  49. package/dist/src/components/lexical-scope.d.ts +8 -0
  50. package/dist/src/components/lexical-scope.d.ts.map +1 -0
  51. package/dist/src/components/lexical-scope.js +24 -0
  52. package/dist/src/components/method/method.d.ts +5 -2
  53. package/dist/src/components/method/method.d.ts.map +1 -1
  54. package/dist/src/components/method/method.js +7 -13
  55. package/dist/src/components/method/method.test.js +11 -11
  56. package/dist/src/components/method-scope.d.ts +8 -0
  57. package/dist/src/components/method-scope.d.ts.map +1 -0
  58. package/dist/src/components/method-scope.js +24 -0
  59. package/dist/src/components/namespace-scopes.d.ts +13 -0
  60. package/dist/src/components/namespace-scopes.d.ts.map +1 -0
  61. package/dist/src/components/namespace-scopes.js +44 -0
  62. package/dist/src/components/namespace.d.ts +7 -0
  63. package/dist/src/components/namespace.d.ts.map +1 -0
  64. package/dist/src/components/namespace.js +46 -0
  65. package/dist/src/components/namespace.ref.test.d.ts +2 -0
  66. package/dist/src/components/namespace.ref.test.d.ts.map +1 -0
  67. package/dist/src/components/namespace.ref.test.js +181 -0
  68. package/dist/src/components/namespace.test.d.ts.map +1 -0
  69. package/dist/src/components/namespace.test.js +78 -0
  70. package/dist/src/components/parameters/parameters.d.ts +2 -2
  71. package/dist/src/components/parameters/parameters.d.ts.map +1 -1
  72. package/dist/src/components/parameters/parameters.js +12 -11
  73. package/dist/src/components/parameters/parameters.test.d.ts +2 -0
  74. package/dist/src/components/parameters/parameters.test.d.ts.map +1 -0
  75. package/dist/src/components/parameters/parameters.test.js +87 -0
  76. package/dist/src/components/property/property.d.ts.map +1 -1
  77. package/dist/src/components/property/property.js +21 -36
  78. package/dist/src/components/property/property.test.js +14 -14
  79. package/dist/src/components/record/declaration.d.ts.map +1 -1
  80. package/dist/src/components/record/declaration.js +8 -12
  81. package/dist/src/components/record/declaration.test.js +6 -13
  82. package/dist/src/components/struct/declaration.d.ts.map +1 -1
  83. package/dist/src/components/struct/declaration.js +4 -6
  84. package/dist/src/components/struct/declaration.test.js +30 -39
  85. package/dist/src/components/type-parameters/type-parameter.d.ts.map +1 -1
  86. package/dist/src/components/type-parameters/type-parameter.js +7 -10
  87. package/dist/src/components/type-parameters/type-parameters.test.js +3 -3
  88. package/dist/src/components/var/declaration.d.ts.map +1 -1
  89. package/dist/src/components/var/declaration.js +6 -8
  90. package/dist/src/components/var/declaration.test.js +11 -20
  91. package/dist/src/contexts/global-namespace.d.ts +5 -0
  92. package/dist/src/contexts/global-namespace.d.ts.map +1 -0
  93. package/dist/src/contexts/global-namespace.js +24 -0
  94. package/dist/src/contexts/namespace.d.ts +8 -0
  95. package/dist/src/contexts/namespace.d.ts.map +1 -0
  96. package/dist/src/contexts/namespace.js +5 -0
  97. package/dist/src/index.d.ts +1 -0
  98. package/dist/src/index.d.ts.map +1 -1
  99. package/dist/src/index.js +1 -0
  100. package/dist/src/modifiers.d.ts +11 -0
  101. package/dist/src/modifiers.d.ts.map +1 -1
  102. package/dist/src/scopes/class.d.ts +10 -0
  103. package/dist/src/scopes/class.d.ts.map +1 -0
  104. package/dist/src/scopes/class.js +10 -0
  105. package/dist/src/scopes/contexts.d.ts +9 -0
  106. package/dist/src/scopes/contexts.d.ts.map +1 -0
  107. package/dist/src/scopes/contexts.js +33 -0
  108. package/dist/src/scopes/csharp.d.ts +8 -0
  109. package/dist/src/scopes/csharp.d.ts.map +1 -0
  110. package/dist/src/scopes/csharp.js +11 -0
  111. package/dist/src/scopes/factories.d.ts +9 -0
  112. package/dist/src/scopes/factories.d.ts.map +1 -0
  113. package/dist/src/scopes/factories.js +23 -0
  114. package/dist/src/scopes/index.d.ts +10 -0
  115. package/dist/src/scopes/index.d.ts.map +1 -0
  116. package/dist/src/scopes/index.js +9 -0
  117. package/dist/src/scopes/lexical.d.ts +7 -0
  118. package/dist/src/scopes/lexical.d.ts.map +1 -0
  119. package/dist/src/scopes/lexical.js +7 -0
  120. package/dist/src/scopes/method.d.ts +9 -0
  121. package/dist/src/scopes/method.d.ts.map +1 -0
  122. package/dist/src/scopes/method.js +13 -0
  123. package/dist/src/scopes/named-type.d.ts +22 -0
  124. package/dist/src/scopes/named-type.d.ts.map +1 -0
  125. package/dist/src/scopes/named-type.js +32 -0
  126. package/dist/src/scopes/namespace.d.ts +11 -0
  127. package/dist/src/scopes/namespace.d.ts.map +1 -0
  128. package/dist/src/scopes/namespace.js +38 -0
  129. package/dist/src/scopes/source-file.d.ts +16 -0
  130. package/dist/src/scopes/source-file.d.ts.map +1 -0
  131. package/dist/src/scopes/source-file.js +43 -0
  132. package/dist/src/symbols/csharp.d.ts +76 -0
  133. package/dist/src/symbols/csharp.d.ts.map +1 -0
  134. package/dist/src/symbols/csharp.js +222 -0
  135. package/dist/src/symbols/factories.d.ts +25 -0
  136. package/dist/src/symbols/factories.d.ts.map +1 -0
  137. package/dist/src/symbols/factories.js +86 -0
  138. package/dist/src/symbols/index.d.ts +5 -2
  139. package/dist/src/symbols/index.d.ts.map +1 -1
  140. package/dist/src/symbols/index.js +6 -3
  141. package/dist/src/symbols/method.d.ts +13 -0
  142. package/dist/src/symbols/method.d.ts.map +1 -0
  143. package/dist/src/symbols/method.js +15 -0
  144. package/dist/src/symbols/named-type.d.ts +19 -0
  145. package/dist/src/symbols/named-type.d.ts.map +1 -0
  146. package/dist/src/symbols/named-type.js +30 -0
  147. package/dist/src/symbols/namespace.d.ts +22 -0
  148. package/dist/src/symbols/namespace.d.ts.map +1 -0
  149. package/dist/src/symbols/namespace.js +44 -0
  150. package/dist/src/symbols/reference.d.ts +2 -2
  151. package/dist/src/symbols/reference.d.ts.map +1 -1
  152. package/dist/src/symbols/reference.js +36 -43
  153. package/dist/test/project-directory.test.js +12 -16
  154. package/dist/test/sourcefile.test.js +7 -19
  155. package/dist/test/using.test.js +18 -16
  156. package/dist/test/utils.js +2 -2
  157. package/dist/tsconfig.tsbuildinfo +1 -1
  158. package/package.json +6 -2
  159. package/src/components/Declaration.tsx +3 -6
  160. package/src/components/Reference.tsx +3 -1
  161. package/src/components/SourceFile.tsx +68 -55
  162. package/src/components/UsingDirective.tsx +12 -2
  163. package/src/components/class/declaration.test.tsx +120 -143
  164. package/src/components/class/declaration.tsx +19 -32
  165. package/src/components/constructor/constructor.test.tsx +10 -16
  166. package/src/components/constructor/constructor.tsx +13 -27
  167. package/src/components/enum/declaration.ref.test.tsx +93 -0
  168. package/src/components/enum/declaration.test.tsx +34 -0
  169. package/src/components/enum/declaration.tsx +65 -0
  170. package/src/components/enum/member.test.tsx +24 -0
  171. package/src/components/enum/member.tsx +36 -0
  172. package/src/components/field/field.test.tsx +7 -7
  173. package/src/components/field/field.tsx +12 -14
  174. package/src/components/index.ts +5 -2
  175. package/src/components/interface/declaration.test.tsx +26 -32
  176. package/src/components/interface/declaration.tsx +16 -18
  177. package/src/components/interface/method.test.tsx +38 -44
  178. package/src/components/interface/method.tsx +7 -19
  179. package/src/components/interface/property.test.tsx +11 -11
  180. package/src/components/interface/property.tsx +15 -33
  181. package/src/components/lexical-scope.tsx +29 -0
  182. package/src/components/method/method.test.tsx +11 -11
  183. package/src/components/method/method.tsx +12 -18
  184. package/src/components/method-scope.tsx +27 -0
  185. package/src/components/namespace-scopes.tsx +44 -0
  186. package/src/components/namespace.ref.test.tsx +139 -0
  187. package/src/components/namespace.test.tsx +52 -0
  188. package/src/components/namespace.tsx +45 -0
  189. package/src/components/parameters/parameters.test.tsx +71 -0
  190. package/src/components/parameters/parameters.tsx +9 -16
  191. package/src/components/property/property.test.tsx +14 -14
  192. package/src/components/property/property.tsx +17 -38
  193. package/src/components/record/declaration.test.tsx +5 -12
  194. package/src/components/record/declaration.tsx +10 -11
  195. package/src/components/struct/declaration.test.tsx +16 -22
  196. package/src/components/struct/declaration.tsx +4 -6
  197. package/src/components/type-parameters/type-parameter.tsx +14 -11
  198. package/src/components/type-parameters/type-parameters.test.tsx +4 -4
  199. package/src/components/var/declaration.test.tsx +8 -14
  200. package/src/components/var/declaration.tsx +12 -6
  201. package/src/contexts/global-namespace.ts +29 -0
  202. package/src/contexts/namespace.ts +13 -0
  203. package/src/index.ts +1 -0
  204. package/src/modifiers.ts +14 -0
  205. package/src/scopes/class.ts +12 -0
  206. package/src/scopes/contexts.ts +45 -0
  207. package/src/scopes/csharp.ts +18 -0
  208. package/src/scopes/factories.ts +45 -0
  209. package/src/scopes/index.ts +9 -0
  210. package/src/scopes/lexical.ts +10 -0
  211. package/src/scopes/method.ts +22 -0
  212. package/src/scopes/named-type.ts +44 -0
  213. package/src/scopes/namespace.ts +59 -0
  214. package/src/scopes/source-file.ts +67 -0
  215. package/src/symbols/csharp.ts +307 -0
  216. package/src/symbols/factories.ts +199 -0
  217. package/src/symbols/index.ts +5 -2
  218. package/src/symbols/method.ts +26 -0
  219. package/src/symbols/named-type.ts +54 -0
  220. package/src/symbols/namespace.ts +62 -0
  221. package/src/symbols/reference.ts +47 -50
  222. package/temp/api.json +6251 -2454
  223. package/test/project-directory.test.tsx +12 -16
  224. package/test/sourcefile.test.tsx +7 -21
  225. package/test/using.test.tsx +18 -16
  226. package/test/utils.tsx +1 -1
  227. package/dist/src/components/EnumDeclaration.d.ts.map +0 -1
  228. package/dist/src/components/EnumDeclaration.js +0 -82
  229. package/dist/src/components/Namespace.d.ts +0 -11
  230. package/dist/src/components/Namespace.d.ts.map +0 -1
  231. package/dist/src/components/Namespace.js +0 -33
  232. package/dist/src/symbols/csharp-output-symbol.d.ts +0 -8
  233. package/dist/src/symbols/csharp-output-symbol.d.ts.map +0 -1
  234. package/dist/src/symbols/csharp-output-symbol.js +0 -19
  235. package/dist/src/symbols/scopes.d.ts +0 -20
  236. package/dist/src/symbols/scopes.d.ts.map +0 -1
  237. package/dist/src/symbols/scopes.js +0 -42
  238. package/dist/test/enum.test.d.ts +0 -2
  239. package/dist/test/enum.test.d.ts.map +0 -1
  240. package/dist/test/enum.test.js +0 -178
  241. package/dist/test/namespace.test.d.ts.map +0 -1
  242. package/dist/test/namespace.test.js +0 -81
  243. package/src/components/EnumDeclaration.tsx +0 -98
  244. package/src/components/Namespace.tsx +0 -35
  245. package/src/symbols/csharp-output-symbol.ts +0 -22
  246. package/src/symbols/scopes.ts +0 -61
  247. package/test/enum.test.tsx +0 -149
  248. package/test/namespace.test.tsx +0 -55
  249. /package/dist/{test → src/components}/namespace.test.d.ts +0 -0
@@ -0,0 +1,44 @@
1
+ import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
+ import { Scope } from "@alloy-js/core";
3
+ import { NamespaceContext } from "../contexts/namespace.js";
4
+ import { createCSharpNamespaceScope } from "../scopes/namespace.js";
5
+ export function NamespaceScope(props) {
6
+ const scope = createCSharpNamespaceScope(props.symbol);
7
+ return _$createComponent(NamespaceContext.Provider, {
8
+ get value() {
9
+ return {
10
+ symbol: props.symbol
11
+ };
12
+ },
13
+ get children() {
14
+ return _$createComponent(Scope, {
15
+ value: scope,
16
+ get children() {
17
+ return props.children;
18
+ }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ export function NamespaceScopes(props) {
24
+ function wrapWithScope(symbol, children) {
25
+ const scopeChildren = _$createComponent(NamespaceScope, {
26
+ symbol: symbol,
27
+ children: children
28
+ });
29
+ if (symbol.enclosingNamespace) {
30
+ return wrapWithScope(symbol.enclosingNamespace, scopeChildren);
31
+ }
32
+ return scopeChildren;
33
+ }
34
+ return _$createComponent(NamespaceContext.Provider, {
35
+ get value() {
36
+ return {
37
+ symbol: props.symbol
38
+ };
39
+ },
40
+ get children() {
41
+ return wrapWithScope(props.symbol, props.children);
42
+ }
43
+ });
44
+ }
@@ -0,0 +1,7 @@
1
+ import { Children } from "@alloy-js/core/jsx-runtime";
2
+ export interface NamespaceProps {
3
+ name: string;
4
+ children?: Children;
5
+ }
6
+ export declare function Namespace(props: NamespaceProps): Children;
7
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../../src/components/namespace.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAMtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,YAyB9C"}
@@ -0,0 +1,46 @@
1
+ import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { Block } from "@alloy-js/core";
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.js";
7
+ export function Namespace(props) {
8
+ const namespaceSymbol = createNamespaceSymbol(props.name);
9
+ const sfScope = useSourceFileScope();
10
+ if (!sfScope) {
11
+ return _$createComponent(NamespaceContext.Provider, {
12
+ value: {
13
+ symbol: namespaceSymbol
14
+ },
15
+ get children() {
16
+ return props.children;
17
+ }
18
+ });
19
+ } else {
20
+ sfScope.hasBlockNamespace = true;
21
+ return ["namespace ", _$memo(() => namespaceSymbol.name), " ", _$createComponent(Block, {
22
+ get children() {
23
+ return _$createComponent(NamespaceContext.Provider, {
24
+ value: {
25
+ symbol: namespaceSymbol
26
+ },
27
+ get children() {
28
+ return _$createComponent(NamespaceScope, {
29
+ symbol: namespaceSymbol,
30
+ get children() {
31
+ return props.children;
32
+ }
33
+ });
34
+ }
35
+ });
36
+ }
37
+ })];
38
+ }
39
+ }
40
+
41
+ /*
42
+ const scope = createCSharpNamespaceScope(namespaceSymbol);
43
+
44
+ return <Scope value={scope}>{props.children}</Scope>;
45
+ }
46
+ */
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=namespace.ref.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.ref.test.d.ts","sourceRoot":"","sources":["../../../src/components/namespace.ref.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
+ import { Output, refkey } from "@alloy-js/core";
3
+ import { d } from "@alloy-js/core/testing";
4
+ import { expect, it } from "vitest";
5
+ import { ClassDeclaration } from "./class/declaration.js";
6
+ import { Namespace } from "./namespace.js";
7
+ import { SourceFile } from "./SourceFile.js";
8
+ it("references types in the same namespace", () => {
9
+ const classRef = refkey();
10
+ const tree = _$createComponent(Output, {
11
+ get children() {
12
+ return _$createComponent(Namespace, {
13
+ name: "Test",
14
+ get children() {
15
+ return _$createComponent(SourceFile, {
16
+ path: "test.cs",
17
+ get children() {
18
+ return [_$createComponent(ClassDeclaration, {
19
+ name: "TestClass",
20
+ refkey: classRef
21
+ }), _$createIntrinsic("hbr", {}), classRef, ";"];
22
+ }
23
+ });
24
+ }
25
+ });
26
+ }
27
+ });
28
+ expect(tree).toRenderTo(d`
29
+ namespace Test;
30
+
31
+ class TestClass;
32
+ TestClass;
33
+ `);
34
+ });
35
+ it("references types in a parent namespace", () => {
36
+ const classRef = refkey();
37
+ const tree = _$createComponent(Output, {
38
+ get children() {
39
+ return _$createComponent(Namespace, {
40
+ name: "Test",
41
+ get children() {
42
+ return _$createComponent(SourceFile, {
43
+ path: "test.cs",
44
+ get children() {
45
+ return [_$createComponent(ClassDeclaration, {
46
+ name: "TestClass",
47
+ refkey: classRef
48
+ }), _$createIntrinsic("hbr", {}), _$createComponent(Namespace, {
49
+ name: "Nested",
50
+ get children() {
51
+ return [classRef, ";"];
52
+ }
53
+ })];
54
+ }
55
+ });
56
+ }
57
+ });
58
+ }
59
+ });
60
+ expect(tree).toRenderTo(d`
61
+ namespace Test {
62
+ class TestClass;
63
+ namespace Nested {
64
+ TestClass;
65
+ }
66
+ }
67
+ `);
68
+ });
69
+ it("references types in a child namespace", () => {
70
+ const classRef = refkey();
71
+ const tree = _$createComponent(Output, {
72
+ get children() {
73
+ return _$createComponent(Namespace, {
74
+ name: "Test",
75
+ get children() {
76
+ return _$createComponent(SourceFile, {
77
+ path: "test.cs",
78
+ get children() {
79
+ return [classRef, ";", _$createIntrinsic("hbr", {}), _$createComponent(Namespace, {
80
+ name: "Nested",
81
+ get children() {
82
+ return _$createComponent(ClassDeclaration, {
83
+ name: "TestClass",
84
+ refkey: classRef
85
+ });
86
+ }
87
+ })];
88
+ }
89
+ });
90
+ }
91
+ });
92
+ }
93
+ });
94
+ expect(tree).toRenderTo(d`
95
+ namespace Test {
96
+ Nested.TestClass;
97
+ namespace Nested {
98
+ class TestClass;
99
+ }
100
+ }
101
+ `);
102
+ });
103
+ it("references types in a different top-level namespace declared in the same file", () => {
104
+ const classRef = refkey();
105
+ const tree = _$createComponent(Output, {
106
+ get children() {
107
+ return _$createComponent(SourceFile, {
108
+ path: "test.cs",
109
+ get children() {
110
+ return [_$createComponent(Namespace, {
111
+ name: "TestCode1",
112
+ children: classRef
113
+ }), _$createIntrinsic("hbr", {}), _$createComponent(Namespace, {
114
+ name: "TestCode2",
115
+ get children() {
116
+ return _$createComponent(ClassDeclaration, {
117
+ name: "TestClass",
118
+ refkey: classRef
119
+ });
120
+ }
121
+ })];
122
+ }
123
+ });
124
+ }
125
+ });
126
+ expect(tree).toRenderTo(d`
127
+ using TestCode2;
128
+
129
+ namespace TestCode1 {
130
+ TestClass
131
+ }
132
+ namespace TestCode2 {
133
+ class TestClass;
134
+ }
135
+ `);
136
+ });
137
+ it("references types in a different top-level namespace declared in a different file", () => {
138
+ const classRef = refkey();
139
+ const tree = _$createComponent(Output, {
140
+ get children() {
141
+ return [_$createComponent(SourceFile, {
142
+ path: "test.cs",
143
+ get children() {
144
+ return _$createComponent(Namespace, {
145
+ name: "TestCode1",
146
+ get children() {
147
+ return [classRef, ";"];
148
+ }
149
+ });
150
+ }
151
+ }), _$createComponent(SourceFile, {
152
+ path: "other.cs",
153
+ get children() {
154
+ return _$createComponent(Namespace, {
155
+ name: "TestCode2",
156
+ get children() {
157
+ return _$createComponent(ClassDeclaration, {
158
+ name: "TestClass",
159
+ refkey: classRef
160
+ });
161
+ }
162
+ });
163
+ }
164
+ })];
165
+ }
166
+ });
167
+ expect(tree).toRenderTo({
168
+ "test.cs": d`
169
+ using TestCode2;
170
+
171
+ namespace TestCode1 {
172
+ TestClass;
173
+ }
174
+ `,
175
+ "other.cs": d`
176
+ namespace TestCode2 {
177
+ class TestClass;
178
+ }
179
+ `
180
+ });
181
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.test.d.ts","sourceRoot":"","sources":["../../../src/components/namespace.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { Output } from "@alloy-js/core";
3
+ import { d } from "@alloy-js/core/testing";
4
+ import { expect, it } from "vitest";
5
+ import { ClassDeclaration } from "./class/declaration.js";
6
+ import { Namespace } from "./namespace.js";
7
+ import { SourceFile } from "./SourceFile.js";
8
+ it("defines multiple namespaces and source files with unique content", () => {
9
+ const tree = _$createComponent(Output, {
10
+ get children() {
11
+ return [_$createComponent(Namespace, {
12
+ name: "Namespace1",
13
+ get children() {
14
+ return [_$createComponent(SourceFile, {
15
+ path: "Model1.cs",
16
+ get children() {
17
+ return _$createComponent(ClassDeclaration, {
18
+ "public": true,
19
+ name: "Model1"
20
+ });
21
+ }
22
+ }), _$createComponent(SourceFile, {
23
+ path: "Model2.cs",
24
+ get children() {
25
+ return _$createComponent(ClassDeclaration, {
26
+ "public": true,
27
+ name: "Model2"
28
+ });
29
+ }
30
+ })];
31
+ }
32
+ }), _$createComponent(Namespace, {
33
+ name: "Namespace2",
34
+ get children() {
35
+ return [_$createComponent(SourceFile, {
36
+ path: "Model3.cs",
37
+ get children() {
38
+ return _$createComponent(ClassDeclaration, {
39
+ "public": true,
40
+ name: "Model3"
41
+ });
42
+ }
43
+ }), _$createComponent(SourceFile, {
44
+ path: "Model4.cs",
45
+ get children() {
46
+ return _$createComponent(ClassDeclaration, {
47
+ "public": true,
48
+ name: "Model4"
49
+ });
50
+ }
51
+ })];
52
+ }
53
+ })];
54
+ }
55
+ });
56
+ expect(tree).toRenderTo({
57
+ "Model1.cs": d`
58
+ namespace Namespace1;
59
+
60
+ public class Model1;
61
+ `,
62
+ "Model2.cs": d`
63
+ namespace Namespace1;
64
+
65
+ public class Model2;
66
+ `,
67
+ "Model3.cs": d`
68
+ namespace Namespace2;
69
+
70
+ public class Model3;
71
+ `,
72
+ "Model4.cs": d`
73
+ namespace Namespace2;
74
+
75
+ public class Model4;
76
+ `
77
+ });
78
+ });
@@ -1,6 +1,6 @@
1
- import { Children, OutputSymbol, Refkey } from "@alloy-js/core";
1
+ import { Children, Namekey, OutputSymbol, Refkey } from "@alloy-js/core";
2
2
  export interface ParameterProps {
3
- name: string;
3
+ name: string | Namekey;
4
4
  type: Children;
5
5
  /** If the parmaeter is optional(without default value) */
6
6
  optional?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../../../src/components/parameters/parameters.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAKR,YAAY,EAEZ,MAAM,EACP,MAAM,gBAAgB,CAAC;AAMxB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,YAqB9C;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;CAC1C;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,YAehD"}
1
+ {"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../../../src/components/parameters/parameters.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EAMR,OAAO,EACP,YAAY,EACZ,MAAM,EACP,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,YAe9C;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;CAC1C;AAED,wCAAwC;AACxC,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,YAehD"}
@@ -1,21 +1,22 @@
1
- import { memo as _$memo, createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
- import { code, Declaration, For, Indent, refkey } from "@alloy-js/core";
3
- import { useCSharpNamePolicy } from "../../name-policy.js";
4
- import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
5
- import { useCSharpMemberScope } from "../../symbols/scopes.js";
1
+ import { createComponent as _$createComponent, memo as _$memo, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
+ import { code, createSymbolSlot, Declaration, For, Indent } from "@alloy-js/core";
3
+ import { createParameterSymbol } from "../../symbols/factories.js";
6
4
  import { Name } from "../Name.js";
7
5
  /** Define a parameter to be used in class or interface method. */
8
6
  export function Parameter(props) {
9
- const name = useCSharpNamePolicy().getName(props.name, "parameter");
10
- const scope = useCSharpMemberScope(["constructor-decl", "method-decl", "class-decl", "record-decl"]);
11
- const memberSymbol = new CSharpOutputSymbol(name, {
12
- scope,
13
- refkeys: props.refkey ?? refkey(props.name)
7
+ const TypeSlot = createSymbolSlot();
8
+ const memberSymbol = createParameterSymbol(props.name, {
9
+ refkeys: props.refkey,
10
+ type: TypeSlot.firstSymbol
14
11
  });
15
12
  return _$createComponent(Declaration, {
16
13
  symbol: memberSymbol,
17
14
  get children() {
18
- return [_$memo(() => props.type), _$memo(() => props.optional ? "?" : ""), " ", _$createComponent(Name, {}), _$memo(() => props.default ? code` = ${props.default}` : "")];
15
+ return [_$createComponent(TypeSlot, {
16
+ get children() {
17
+ return props.type;
18
+ }
19
+ }), _$memo(() => props.optional ? "?" : ""), " ", _$createComponent(Name, {}), _$memo(() => props.default ? code` = ${props.default}` : "")];
19
20
  }
20
21
  });
21
22
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parameters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parameters.test.d.ts","sourceRoot":"","sources":["../../../../src/components/parameters/parameters.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
+ import { ClassDeclaration } from "#components/class/declaration.js";
3
+ import { Method } from "#components/method/method.js";
4
+ import { List, memberRefkey, namekey } from "@alloy-js/core";
5
+ import { expect, it } from "vitest";
6
+ import { TestNamespace } from "../../../test/utils.js";
7
+ const Wrapper = props => _$createComponent(TestNamespace, {
8
+ get children() {
9
+ return _$createComponent(ClassDeclaration, {
10
+ "public": true,
11
+ name: "TestClass",
12
+ get children() {
13
+ return props.children;
14
+ }
15
+ });
16
+ }
17
+ });
18
+ it("can be referenced", () => {
19
+ const param1Key = namekey("param1");
20
+ const param2Key = namekey("param2");
21
+ expect(_$createComponent(Wrapper, {
22
+ get children() {
23
+ return _$createComponent(Method, {
24
+ name: "MethodOne",
25
+ parameters: [{
26
+ name: param1Key,
27
+ type: "T1"
28
+ }, {
29
+ name: param2Key,
30
+ type: "T2"
31
+ }]
32
+ });
33
+ }
34
+ })).toRenderTo(`
35
+ public class TestClass
36
+ {
37
+ void MethodOne(T1 param1, T2 param2) {}
38
+ }
39
+ `);
40
+ });
41
+ it("members can be referenced", () => {
42
+ const classKey = namekey("TestType");
43
+ const methodKey = namekey("TestMethod");
44
+ const param1Key = namekey("param1");
45
+ expect(_$createComponent(TestNamespace, {
46
+ get children() {
47
+ return _$createComponent(List, {
48
+ get children() {
49
+ return [_$createComponent(ClassDeclaration, {
50
+ name: classKey,
51
+ get children() {
52
+ return _$createComponent(Method, {
53
+ name: methodKey
54
+ });
55
+ }
56
+ }), _$createComponent(ClassDeclaration, {
57
+ name: "Test",
58
+ get children() {
59
+ return _$createComponent(Method, {
60
+ name: "Test",
61
+ parameters: [{
62
+ name: param1Key,
63
+ type: classKey
64
+ }],
65
+ get children() {
66
+ return ["return ", _$memo(() => memberRefkey(param1Key, methodKey)), "();"];
67
+ }
68
+ });
69
+ }
70
+ })];
71
+ }
72
+ });
73
+ }
74
+ })).toRenderTo(`
75
+ class TestType
76
+ {
77
+ void TestMethod() {}
78
+ }
79
+ class Test
80
+ {
81
+ void Test(TestType param1)
82
+ {
83
+ return param1.TestMethod();
84
+ }
85
+ }
86
+ `);
87
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"property.d.ts","sourceRoot":"","sources":["../../../../src/components/property/property.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAKR,MAAM,EAEP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,EAIhB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAAiB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG7E,0BAA0B;AAC1B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAcD,gDAAgD;AAChD,MAAM,WAAW,aAAc,SAAQ,eAAe,EAAE,iBAAiB;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oBAAoB;IACpB,IAAI,EAAE,QAAQ,CAAC;IAEf,uCAAuC;IACvC,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,uCAAuC;IACvC,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,kBAAkB;IAClB,GAAG,CAAC,EAAE,QAAQ,CAAC;IAEf;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC;IAEvB;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,YAgD5C"}
1
+ {"version":3,"file":"property.d.ts","sourceRoot":"","sources":["../../../../src/components/property/property.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAKR,MAAM,EACP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,EAIhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAiB,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG7E,0BAA0B;AAC1B,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAcD,gDAAgD;AAChD,MAAM,WAAW,aAAc,SAAQ,eAAe,EAAE,iBAAiB;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oBAAoB;IACpB,IAAI,EAAE,QAAQ,CAAC;IAEf,uCAAuC;IACvC,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,uCAAuC;IACvC,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,kBAAkB;IAClB,GAAG,CAAC,EAAE,QAAQ,CAAC;IAEf;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,QAAQ,CAAC;IAEvB;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,YAiC5C"}
@@ -1,9 +1,7 @@
1
1
  import { createComponent as _$createComponent, memo as _$memo } from "@alloy-js/core/jsx-runtime";
2
- import { Block, code, List, MemberDeclaration, refkey, Scope } from "@alloy-js/core";
2
+ import { Block, code, List, MemberDeclaration, MemberName } from "@alloy-js/core";
3
3
  import { computeModifiersPrefix, getAccessModifier, makeModifiers } from "../../modifiers.js";
4
- import { useCSharpNamePolicy } from "../../name-policy.js";
5
- import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
6
- import { CSharpMemberScope, useCSharpMemberScope } from "../../symbols/scopes.js";
4
+ import { createPropertySymbol } from "../../symbols/factories.js";
7
5
  import { AttributeList } from "../attributes/attributes.js";
8
6
  import { DocWhen } from "../doc/comment.js";
9
7
 
@@ -23,16 +21,8 @@ const getModifiers = makeModifiers(["new", "static", "virtual", "sealed", "overr
23
21
  * ```
24
22
  */
25
23
  export function Property(props) {
26
- const name = useCSharpNamePolicy().getName(props.name, "class-property");
27
- const scope = useCSharpMemberScope(["class-decl", "record-decl", "struct-decl"]);
28
- const propertySymbol = new CSharpOutputSymbol(name, {
29
- scope,
30
- refkeys: props.refkey ?? refkey(props.name)
31
- });
32
-
33
- // scope for property declaration
34
- const propertyScope = new CSharpMemberScope("property-decl", {
35
- owner: propertySymbol
24
+ const propertySymbol = createPropertySymbol(props.name, {
25
+ refkeys: props.refkey
36
26
  });
37
27
  const modifiers = computeModifiersPrefix([getAccessModifier(props), getModifiers(props)]);
38
28
  if (props.init && props.set) {
@@ -42,32 +32,27 @@ export function Property(props) {
42
32
  return _$createComponent(MemberDeclaration, {
43
33
  symbol: propertySymbol,
44
34
  get children() {
45
- return _$createComponent(Scope, {
46
- value: propertyScope,
35
+ return [_$createComponent(DocWhen, {
36
+ get doc() {
37
+ return props.doc;
38
+ }
39
+ }), _$createComponent(AttributeList, {
40
+ get attributes() {
41
+ return props.attributes;
42
+ },
43
+ endline: true
44
+ }), modifiers, _$memo(() => props.type), _$memo(() => props.nullable && "?"), " ", _$createComponent(MemberName, {}), " ", _$createComponent(Block, {
45
+ newline: true,
46
+ inline: true,
47
47
  get children() {
48
- return [_$createComponent(DocWhen, {
49
- get doc() {
50
- return props.doc;
51
- }
52
- }), _$createComponent(AttributeList, {
53
- get attributes() {
54
- return props.attributes;
55
- },
56
- endline: true
57
- }), modifiers, _$memo(() => props.type), _$memo(() => props.nullable && "?"), " ", name, " ", _$createComponent(Block, {
58
- newline: true,
59
- inline: true,
48
+ return _$createComponent(List, {
49
+ joiner: " ",
60
50
  get children() {
61
- return _$createComponent(List, {
62
- joiner: " ",
63
- get children() {
64
- return [_$memo(() => props.get && "get;"), _$memo(() => props.set && "set;"), _$memo(() => props.init && "init;")];
65
- }
66
- });
51
+ return [_$memo(() => props.get && "get;"), _$memo(() => props.set && "set;"), _$memo(() => props.init && "init;")];
67
52
  }
68
- }), _$memo(() => props.initializer && code` = ${props.initializer};`)];
53
+ });
69
54
  }
70
- });
55
+ }), _$memo(() => props.initializer && code` = ${props.initializer};`)];
71
56
  }
72
57
  });
73
58
  }