@alloy-js/csharp 0.18.0-dev.2 → 0.18.0-dev.21

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 (158) hide show
  1. package/LICENSE +7 -0
  2. package/dist/src/components/ClassDeclaration.d.ts +74 -0
  3. package/dist/src/components/ClassDeclaration.d.ts.map +1 -0
  4. package/dist/src/components/{Class.js → ClassDeclaration.js} +64 -38
  5. package/dist/src/components/ClassMethod.d.ts +26 -5
  6. package/dist/src/components/ClassMethod.d.ts.map +1 -1
  7. package/dist/src/components/ClassMethod.js +27 -9
  8. package/dist/src/components/EnumDeclaration.d.ts +34 -0
  9. package/dist/src/components/EnumDeclaration.d.ts.map +1 -0
  10. package/dist/src/components/{Enum.js → EnumDeclaration.js} +25 -5
  11. package/dist/src/components/doc/comment.d.ts +70 -0
  12. package/dist/src/components/doc/comment.d.ts.map +1 -0
  13. package/dist/src/components/doc/comment.js +88 -0
  14. package/dist/src/components/doc/comment.test.d.ts +2 -0
  15. package/dist/src/components/doc/comment.test.d.ts.map +1 -0
  16. package/dist/src/components/doc/comment.test.js +348 -0
  17. package/dist/src/components/doc/from-markdown.d.ts +6 -0
  18. package/dist/src/components/doc/from-markdown.d.ts.map +1 -0
  19. package/dist/src/components/doc/from-markdown.js +58 -0
  20. package/dist/src/components/doc/from-markdown.test.d.ts +2 -0
  21. package/dist/src/components/doc/from-markdown.test.d.ts.map +1 -0
  22. package/dist/src/components/doc/from-markdown.test.js +83 -0
  23. package/dist/src/components/index.d.ts +13 -4
  24. package/dist/src/components/index.d.ts.map +1 -1
  25. package/dist/src/components/index.js +14 -5
  26. package/dist/src/components/interface/declaration.d.ts +47 -0
  27. package/dist/src/components/interface/declaration.d.ts.map +1 -0
  28. package/dist/src/components/interface/declaration.js +77 -0
  29. package/dist/src/components/interface/declaration.test.d.ts +2 -0
  30. package/dist/src/components/interface/declaration.test.d.ts.map +1 -0
  31. package/dist/src/components/interface/declaration.test.js +153 -0
  32. package/dist/src/components/interface/method.d.ts +32 -0
  33. package/dist/src/components/interface/method.d.ts.map +1 -0
  34. package/dist/src/components/interface/method.js +68 -0
  35. package/dist/src/components/interface/method.test.d.ts +2 -0
  36. package/dist/src/components/interface/method.test.d.ts.map +1 -0
  37. package/dist/src/components/interface/method.test.js +279 -0
  38. package/dist/src/components/interface/property.d.ts +38 -0
  39. package/dist/src/components/interface/property.d.ts.map +1 -0
  40. package/dist/src/components/interface/property.js +67 -0
  41. package/dist/src/components/interface/property.test.d.ts +2 -0
  42. package/dist/src/components/interface/property.test.d.ts.map +1 -0
  43. package/dist/src/components/interface/property.test.js +165 -0
  44. package/dist/src/components/parameters/parameters.d.ts +19 -0
  45. package/dist/src/components/parameters/parameters.d.ts.map +1 -0
  46. package/dist/src/components/parameters/parameters.js +43 -0
  47. package/dist/src/components/property/property.d.ts +57 -0
  48. package/dist/src/components/property/property.d.ts.map +1 -0
  49. package/dist/src/components/property/property.js +70 -0
  50. package/dist/src/components/property/property.test.d.ts +2 -0
  51. package/dist/src/components/property/property.test.d.ts.map +1 -0
  52. package/dist/src/components/property/property.test.js +218 -0
  53. package/dist/src/components/record/declaration.d.ts +35 -0
  54. package/dist/src/components/record/declaration.d.ts.map +1 -0
  55. package/dist/src/components/record/declaration.js +90 -0
  56. package/dist/src/components/record/declaration.test.d.ts +2 -0
  57. package/dist/src/components/record/declaration.test.d.ts.map +1 -0
  58. package/dist/src/components/record/declaration.test.js +94 -0
  59. package/dist/src/components/stc/index.d.ts +2 -2
  60. package/dist/src/components/stc/index.d.ts.map +1 -1
  61. package/dist/src/components/stc/index.js +2 -2
  62. package/dist/src/components/type-parameters/type-parameter-constraints.d.ts +8 -0
  63. package/dist/src/components/type-parameters/type-parameter-constraints.d.ts.map +1 -0
  64. package/dist/src/components/type-parameters/type-parameter-constraints.js +44 -0
  65. package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts +2 -0
  66. package/dist/src/components/type-parameters/type-parameter-constraints.test.d.ts.map +1 -0
  67. package/dist/src/components/type-parameters/type-parameter-constraints.test.js +67 -0
  68. package/dist/src/components/type-parameters/type-parameter.d.ts +20 -0
  69. package/dist/src/components/type-parameters/type-parameter.d.ts.map +1 -0
  70. package/dist/src/components/type-parameters/type-parameter.js +22 -0
  71. package/dist/src/components/type-parameters/type-parameters.d.ts +17 -0
  72. package/dist/src/components/type-parameters/type-parameters.d.ts.map +1 -0
  73. package/dist/src/components/type-parameters/type-parameters.js +54 -0
  74. package/dist/src/components/type-parameters/type-parameters.test.d.ts +2 -0
  75. package/dist/src/components/type-parameters/type-parameters.test.d.ts.map +1 -0
  76. package/dist/src/components/type-parameters/type-parameters.test.js +48 -0
  77. package/dist/src/components/var/declaration.d.ts +35 -0
  78. package/dist/src/components/var/declaration.d.ts.map +1 -0
  79. package/dist/src/components/var/declaration.js +40 -0
  80. package/dist/src/components/var/declaration.test.d.ts +2 -0
  81. package/dist/src/components/var/declaration.test.d.ts.map +1 -0
  82. package/dist/src/components/var/declaration.test.js +73 -0
  83. package/dist/src/modifiers.d.ts +10 -4
  84. package/dist/src/modifiers.d.ts.map +1 -1
  85. package/dist/src/modifiers.js +9 -32
  86. package/dist/src/name-policy.d.ts +1 -1
  87. package/dist/src/name-policy.d.ts.map +1 -1
  88. package/dist/src/name-policy.js +2 -0
  89. package/dist/test/class-declaration.test.d.ts +2 -0
  90. package/dist/test/class-declaration.test.d.ts.map +1 -0
  91. package/dist/test/class-declaration.test.js +463 -0
  92. package/dist/test/class-method.test.js +37 -14
  93. package/dist/test/enum.test.js +12 -12
  94. package/dist/test/namespace.test.js +8 -8
  95. package/dist/test/project-directory.test.d.ts +2 -0
  96. package/dist/test/project-directory.test.d.ts.map +1 -0
  97. package/dist/test/{projectdirectory.test.js → project-directory.test.js} +8 -8
  98. package/dist/test/sourcefile.test.js +4 -4
  99. package/dist/test/using.test.js +9 -9
  100. package/dist/test/vitest.setup.d.ts +2 -0
  101. package/dist/test/vitest.setup.d.ts.map +1 -0
  102. package/dist/test/vitest.setup.js +1 -0
  103. package/dist/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +21 -21
  105. package/src/components/ClassDeclaration.tsx +213 -0
  106. package/src/components/ClassMethod.tsx +54 -15
  107. package/src/components/{Enum.tsx → EnumDeclaration.tsx} +30 -6
  108. package/src/components/doc/comment.test.tsx +337 -0
  109. package/src/components/doc/comment.tsx +152 -0
  110. package/src/components/doc/from-markdown.test.tsx +103 -0
  111. package/src/components/doc/from-markdown.tsx +58 -0
  112. package/src/components/index.ts +13 -4
  113. package/src/components/interface/declaration.test.tsx +143 -0
  114. package/src/components/interface/declaration.tsx +105 -0
  115. package/src/components/interface/method.test.tsx +278 -0
  116. package/src/components/interface/method.tsx +102 -0
  117. package/src/components/interface/property.test.tsx +144 -0
  118. package/src/components/interface/property.tsx +107 -0
  119. package/src/components/parameters/parameters.tsx +74 -0
  120. package/src/components/property/property.test.tsx +187 -0
  121. package/src/components/property/property.tsx +146 -0
  122. package/src/components/record/declaration.test.tsx +73 -0
  123. package/src/components/record/declaration.tsx +109 -0
  124. package/src/components/stc/index.ts +2 -2
  125. package/src/components/type-parameters/type-parameter-constraints.test.tsx +93 -0
  126. package/src/components/type-parameters/type-parameter-constraints.tsx +46 -0
  127. package/src/components/type-parameters/type-parameter.tsx +35 -0
  128. package/src/components/type-parameters/type-parameters.test.tsx +46 -0
  129. package/src/components/type-parameters/type-parameters.tsx +63 -0
  130. package/src/components/var/declaration.test.tsx +59 -0
  131. package/src/components/var/declaration.tsx +47 -0
  132. package/src/modifiers.ts +25 -42
  133. package/src/name-policy.ts +5 -0
  134. package/temp/api.json +5228 -686
  135. package/test/class-declaration.test.tsx +418 -0
  136. package/test/class-method.test.tsx +24 -14
  137. package/test/enum.test.tsx +11 -11
  138. package/test/namespace.test.tsx +4 -4
  139. package/test/{projectdirectory.test.tsx → project-directory.test.tsx} +4 -4
  140. package/test/sourcefile.test.tsx +2 -2
  141. package/test/using.test.tsx +9 -9
  142. package/test/vitest.setup.ts +1 -0
  143. package/vitest.config.ts +3 -0
  144. package/dist/src/components/Class.d.ts +0 -26
  145. package/dist/src/components/Class.d.ts.map +0 -1
  146. package/dist/src/components/Enum.d.ts +0 -15
  147. package/dist/src/components/Enum.d.ts.map +0 -1
  148. package/dist/src/components/Parameters.d.ts +0 -13
  149. package/dist/src/components/Parameters.d.ts.map +0 -1
  150. package/dist/src/components/Parameters.js +0 -34
  151. package/dist/test/class.test.d.ts +0 -2
  152. package/dist/test/class.test.d.ts.map +0 -1
  153. package/dist/test/class.test.js +0 -298
  154. package/dist/test/projectdirectory.test.d.ts +0 -2
  155. package/dist/test/projectdirectory.test.d.ts.map +0 -1
  156. package/src/components/Class.tsx +0 -149
  157. package/src/components/Parameters.tsx +0 -51
  158. package/test/class.test.tsx +0 -292
package/vitest.config.ts CHANGED
@@ -6,5 +6,8 @@ export default defineConfig({
6
6
  jsx: "preserve",
7
7
  sourcemap: "both",
8
8
  },
9
+ test: {
10
+ setupFiles: ["./test/vitest.setup.ts"],
11
+ },
9
12
  plugins: [alloyPlugin()],
10
13
  });
@@ -1,26 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifier } from "../modifiers.js";
3
- import { ParameterProps } from "./Parameters.js";
4
- export interface ClassProps extends Omit<core.DeclarationProps, "nameKind"> {
5
- name: string;
6
- refkey?: core.Refkey;
7
- accessModifier?: AccessModifier;
8
- typeParameters?: Record<string, core.Refkey>;
9
- }
10
- export declare function Class(props: ClassProps): core.Children;
11
- export interface ClassConstructorProps {
12
- accessModifier?: AccessModifier;
13
- parameters?: Array<ParameterProps>;
14
- refkey?: core.Refkey;
15
- symbol?: core.OutputSymbol;
16
- children?: core.Children;
17
- }
18
- export declare function ClassConstructor(props: ClassConstructorProps): core.Children;
19
- export interface ClassMemberProps {
20
- name: string;
21
- type: core.Children;
22
- accessModifier?: AccessModifier;
23
- refkey?: core.Refkey;
24
- }
25
- export declare function ClassMember(props: ClassMemberProps): core.Children;
26
- //# sourceMappingURL=Class.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/components/Class.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAKpE,OAAO,EAAE,cAAc,EAAc,MAAM,iBAAiB,CAAC;AAG7D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;CAC9C;AAGD,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,iBAoDtC;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;CAC1B;AAGD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,iBAiC5D;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;CACtB;AAGD,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,iBAwBlD"}
@@ -1,15 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifier } from "../modifiers.js";
3
- export interface EnumProps {
4
- name: string;
5
- refkey?: core.Refkey;
6
- children?: core.Children;
7
- accessModifier?: AccessModifier;
8
- }
9
- export declare function Enum(props: EnumProps): core.Children;
10
- export interface EnumMemberProps {
11
- name: string;
12
- refkey?: core.Refkey;
13
- }
14
- export declare function EnumMember(props: EnumMemberProps): core.Children;
15
- //# sourceMappingURL=Enum.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Enum.d.ts","sourceRoot":"","sources":["../../../src/components/Enum.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAOpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAGD,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,iBA8BpC;AAGD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;CACtB;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,iBAmBhD"}
@@ -1,13 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- export interface ParameterProps {
3
- name: string;
4
- type: core.Children;
5
- refkey?: core.Refkey;
6
- symbol?: core.OutputSymbol;
7
- }
8
- export declare function Parameter(props: ParameterProps): core.Children;
9
- export interface ParametersProps {
10
- parameters: Array<ParameterProps>;
11
- }
12
- export declare function Parameters(props: ParametersProps): core.Children;
13
- //# sourceMappingURL=Parameters.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Parameters.d.ts","sourceRoot":"","sources":["../../../src/components/Parameters.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAMvC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;CAC5B;AAGD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,iBAsB9C;AAED,MAAM,WAAW,eAAe;IAE9B,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CACnC;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,iBAMhD"}
@@ -1,34 +0,0 @@
1
- import { memo as _$memo, createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
2
- import * as core from "@alloy-js/core";
3
- import { useCSharpNamePolicy } from "../name-policy.js";
4
- import { CSharpOutputSymbol } from "../symbols/csharp-output-symbol.js";
5
- import { useCSharpScope } from "../symbols/scopes.js";
6
- import { Name } from "./Name.js";
7
- // a constructor/method parameter
8
- export function Parameter(props) {
9
- const name = useCSharpNamePolicy().getName(props.name, "parameter");
10
- const scope = useCSharpScope();
11
- if (scope.kind !== "member" || scope.name !== "constructor-decl" && scope.name !== "method-decl") {
12
- throw new Error("can't define a parameter outside of a constructor-decl or method-decl scope");
13
- }
14
- const memberSymbol = new CSharpOutputSymbol(name, {
15
- scope,
16
- refkeys: props.refkey ?? core.refkey(props.name)
17
- });
18
- return _$createComponent(core.Declaration, {
19
- symbol: memberSymbol,
20
- get children() {
21
- return [_$memo(() => props.type), " ", _$createComponent(Name, {})];
22
- }
23
- });
24
- }
25
- // a collection of parameters
26
- export function Parameters(props) {
27
- return _$createComponent(core.For, {
28
- get each() {
29
- return props.parameters;
30
- },
31
- joiner: ", ",
32
- children: param => _$createComponent(Parameter, param)
33
- });
34
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=class.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class.test.d.ts","sourceRoot":"","sources":["../../test/class.test.tsx"],"names":[],"mappings":""}
@@ -1,298 +0,0 @@
1
- import { createComponent as _$createComponent, createIntrinsic as _$createIntrinsic } from "@alloy-js/core/jsx-runtime";
2
- import * as core from "@alloy-js/core";
3
- import * as coretest from "@alloy-js/core/testing";
4
- import { expect, it } from "vitest";
5
- import * as csharp from "../src/index.js";
6
- import * as utils from "./utils.js";
7
- it("declares class with no members", () => {
8
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
9
- accessModifier: "public",
10
- name: "TestClass"
11
- }));
12
- expect(res).toBe(coretest.d`
13
- namespace TestCode
14
- {
15
- public class TestClass;
16
- }
17
- `);
18
- });
19
- it("declares class with some members", () => {
20
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
21
- accessModifier: "public",
22
- name: "TestClass",
23
- get children() {
24
- return _$createComponent(core.StatementList, {
25
- get children() {
26
- return [_$createComponent(csharp.ClassMember, {
27
- accessModifier: "public",
28
- name: "MemberOne",
29
- type: "string"
30
- }), _$createComponent(csharp.ClassMember, {
31
- accessModifier: "private",
32
- name: "MemberTwo",
33
- type: "int"
34
- })];
35
- }
36
- });
37
- }
38
- }));
39
- expect(res).toBe(coretest.d`
40
- namespace TestCode
41
- {
42
- public class TestClass
43
- {
44
- public string MemberOne;
45
- private int memberTwo;
46
- }
47
- }
48
- `);
49
- });
50
- it("declares class with some methods", () => {
51
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
52
- accessModifier: "public",
53
- name: "TestClass",
54
- get children() {
55
- return _$createComponent(core.List, {
56
- get children() {
57
- return [_$createComponent(csharp.ClassMethod, {
58
- accessModifier: "public",
59
- name: "MethodOne"
60
- }), _$createComponent(csharp.ClassMethod, {
61
- accessModifier: "private",
62
- methodModifier: "virtual",
63
- name: "MethodTwo"
64
- })];
65
- }
66
- });
67
- }
68
- }));
69
- expect(res).toBe(coretest.d`
70
- namespace TestCode
71
- {
72
- public class TestClass
73
- {
74
- public void MethodOne() {}
75
- private virtual void MethodTwo() {}
76
- }
77
- }
78
- `);
79
- });
80
- it("uses refkeys for members, params, and return type", () => {
81
- const inputTypeRefkey = core.refkey();
82
- const testResultTypeRefkey = core.refkey();
83
- const enumTypeRefkey = core.refkey();
84
- const params = [{
85
- name: "IntParam",
86
- type: "int"
87
- }, {
88
- name: "BodyParam",
89
- type: inputTypeRefkey
90
- }];
91
- const res = core.render(_$createComponent(core.Output, {
92
- get namePolicy() {
93
- return csharp.createCSharpNamePolicy();
94
- },
95
- get children() {
96
- return _$createComponent(csharp.Namespace, {
97
- name: "TestCode",
98
- get children() {
99
- return _$createComponent(csharp.SourceFile, {
100
- path: "Test.cs",
101
- get children() {
102
- return [_$createComponent(csharp.Enum, {
103
- accessModifier: "public",
104
- name: "TestEnum",
105
- refkey: enumTypeRefkey,
106
- get children() {
107
- return _$createComponent(core.List, {
108
- comma: true,
109
- hardline: true,
110
- get children() {
111
- return [_$createComponent(csharp.EnumMember, {
112
- name: "One"
113
- }), _$createComponent(csharp.EnumMember, {
114
- name: "Two"
115
- })];
116
- }
117
- });
118
- }
119
- }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
120
- accessModifier: "public",
121
- name: "TestInput",
122
- refkey: inputTypeRefkey
123
- }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
124
- accessModifier: "public",
125
- name: "TestResult",
126
- refkey: testResultTypeRefkey
127
- }), _$createIntrinsic("hbr", {}), _$createComponent(csharp.Class, {
128
- accessModifier: "public",
129
- name: "TestClass",
130
- get children() {
131
- return [_$createComponent(csharp.ClassMember, {
132
- accessModifier: "private",
133
- name: "MemberOne",
134
- type: enumTypeRefkey
135
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMethod, {
136
- accessModifier: "public",
137
- name: "MethodOne",
138
- parameters: params,
139
- returns: testResultTypeRefkey,
140
- get children() {
141
- return ["return new ", testResultTypeRefkey, "();"];
142
- }
143
- })];
144
- }
145
- })];
146
- }
147
- });
148
- }
149
- });
150
- }
151
- }));
152
- expect(res.contents[0].contents).toBe(coretest.d`
153
- namespace TestCode
154
- {
155
- public enum TestEnum
156
- {
157
- One,
158
- Two
159
- }
160
- public class TestInput;
161
- public class TestResult;
162
- public class TestClass
163
- {
164
- private TestEnum memberOne;
165
- public TestResult MethodOne(int intParam, TestInput bodyParam)
166
- {
167
- return new TestResult();
168
- }
169
- }
170
- }
171
- `);
172
- });
173
- it("declares class with generic parameters", () => {
174
- const typeParameters = {
175
- T: core.refkey(),
176
- U: core.refkey()
177
- };
178
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
179
- accessModifier: "public",
180
- name: "TestClass",
181
- typeParameters: typeParameters,
182
- get children() {
183
- return [_$createComponent(csharp.ClassMember, {
184
- accessModifier: "public",
185
- name: "memberOne",
186
- get type() {
187
- return typeParameters.T;
188
- }
189
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
190
- accessModifier: "private",
191
- name: "memberTwo",
192
- get type() {
193
- return typeParameters.U;
194
- }
195
- }), ";"];
196
- }
197
- }));
198
- expect(res).toBe(coretest.d`
199
- namespace TestCode
200
- {
201
- public class TestClass<T, U>
202
- {
203
- public T MemberOne;
204
- private U memberTwo;
205
- }
206
- }
207
- `);
208
- });
209
- it("declares class with invalid members", () => {
210
- const decl = _$createComponent(csharp.Class, {
211
- accessModifier: "public",
212
- name: "TestClass",
213
- get children() {
214
- return [_$createComponent(csharp.EnumMember, {
215
- name: "One"
216
- }), ",", _$createIntrinsic("hbr", {}), _$createComponent(csharp.EnumMember, {
217
- name: "Two"
218
- })];
219
- }
220
- });
221
- expect(() => utils.toSourceText(decl)).toThrow("can't define an enum member outside of an enum-decl scope");
222
- });
223
- it("declares class with constructor", () => {
224
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
225
- accessModifier: "public",
226
- name: "TestClass",
227
- get children() {
228
- return _$createComponent(csharp.ClassConstructor, {
229
- accessModifier: "public"
230
- });
231
- }
232
- }));
233
- expect(res).toBe(coretest.d`
234
- namespace TestCode
235
- {
236
- public class TestClass
237
- {
238
- public TestClass() {}
239
- }
240
- }
241
- `);
242
- });
243
- it("declares class with constructor params and assigns values to fields", () => {
244
- const thisNameRefkey = core.refkey();
245
- const thisSizeRefkey = core.refkey();
246
- const paramNameRefkey = core.refkey();
247
- const paramSizeRefkey = core.refkey();
248
- const ctorParams = [{
249
- name: "name",
250
- type: "string",
251
- refkey: paramNameRefkey
252
- }, {
253
- name: "size",
254
- type: "int",
255
- refkey: paramSizeRefkey
256
- }];
257
- const res = utils.toSourceText(_$createComponent(csharp.Class, {
258
- accessModifier: "public",
259
- name: "TestClass",
260
- get children() {
261
- return [_$createComponent(csharp.ClassMember, {
262
- accessModifier: "private",
263
- name: "name",
264
- type: "string",
265
- refkey: thisNameRefkey
266
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassMember, {
267
- accessModifier: "private",
268
- name: "size",
269
- type: "int",
270
- refkey: thisSizeRefkey
271
- }), ";", _$createIntrinsic("hbr", {}), _$createComponent(csharp.ClassConstructor, {
272
- accessModifier: "public",
273
- parameters: ctorParams,
274
- get children() {
275
- return [thisNameRefkey, " = ", paramNameRefkey, ";", _$createIntrinsic("hbr", {}), thisSizeRefkey, " = ", paramSizeRefkey, ";"];
276
- }
277
- })];
278
- }
279
- }));
280
-
281
- // TODO: assignments to members should have this. prefix
282
- // e.g. this.name = name;
283
- expect(res).toBe(coretest.d`
284
- namespace TestCode
285
- {
286
- public class TestClass
287
- {
288
- private string name;
289
- private int size;
290
- public TestClass(string name, int size)
291
- {
292
- name = name;
293
- size = size;
294
- }
295
- }
296
- }
297
- `);
298
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=projectdirectory.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectdirectory.test.d.ts","sourceRoot":"","sources":["../../test/projectdirectory.test.tsx"],"names":[],"mappings":""}
@@ -1,149 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { AccessModifier, getAccessModifier } from "../modifiers.js";
3
- import { CSharpElements, useCSharpNamePolicy } from "../name-policy.js";
4
- import { CSharpOutputSymbol } from "../symbols/csharp-output-symbol.js";
5
- import { CSharpMemberScope, useCSharpScope } from "../symbols/scopes.js";
6
- import { Name } from "./Name.js";
7
- import { ParameterProps, Parameters } from "./Parameters.js";
8
-
9
- // properties for creating a class
10
- export interface ClassProps extends Omit<core.DeclarationProps, "nameKind"> {
11
- name: string;
12
- refkey?: core.Refkey;
13
- accessModifier?: AccessModifier;
14
- typeParameters?: Record<string, core.Refkey>;
15
- }
16
-
17
- // a C# class declaration
18
- export function Class(props: ClassProps) {
19
- const name = useCSharpNamePolicy().getName(props.name!, "class");
20
-
21
- const thisClassSymbol = new CSharpOutputSymbol(name, {
22
- refkeys: props.refkey,
23
- });
24
-
25
- // this creates a new scope for the class definition.
26
- // members will automatically "inherit" this scope so
27
- // that refkeys to them will produce the fully-qualified
28
- // name e.g. Foo.Bar.
29
- const thisClassScope = new CSharpMemberScope("class-decl", {
30
- owner: thisClassSymbol,
31
- });
32
-
33
- let typeParams: core.Children;
34
- if (props.typeParameters) {
35
- const typeParamNames = new Array<string>();
36
- for (const entry of Object.entries(props.typeParameters)) {
37
- typeParamNames.push(
38
- useCSharpNamePolicy().getName(entry[0], "type-parameter"),
39
- );
40
- // create a symbol for each type param so its
41
- // refkey resolves to the type param's name
42
- new CSharpOutputSymbol(entry[0], {
43
- scope: thisClassScope,
44
- refkeys: entry[1],
45
- });
46
- }
47
- typeParams = (
48
- <group>
49
- {"<"}
50
- <core.For each={typeParamNames} comma line>
51
- {(name) => name}
52
- </core.For>
53
- {">"}
54
- </group>
55
- );
56
- }
57
-
58
- return (
59
- <core.Declaration symbol={thisClassSymbol}>
60
- {getAccessModifier(props.accessModifier)}class <Name />
61
- {typeParams}
62
- {!props.children && ";"}
63
- {props.children && (
64
- <core.Block newline>
65
- <core.Scope value={thisClassScope}>{props.children}</core.Scope>
66
- </core.Block>
67
- )}
68
- </core.Declaration>
69
- );
70
- }
71
-
72
- export interface ClassConstructorProps {
73
- accessModifier?: AccessModifier;
74
- parameters?: Array<ParameterProps>;
75
- refkey?: core.Refkey;
76
- symbol?: core.OutputSymbol;
77
- children?: core.Children;
78
- }
79
-
80
- // a C# class constructor
81
- export function ClassConstructor(props: ClassConstructorProps) {
82
- const scope = useCSharpScope();
83
- if (scope.kind !== "member" || scope.name !== "class-decl") {
84
- throw new Error(
85
- "can't define a class constructor outside of a class-decl scope",
86
- );
87
- }
88
-
89
- // fetch the class name from the scope
90
- const name = useCSharpNamePolicy().getName(scope.owner!.name, "class-method");
91
- const ctorSymbol = new CSharpOutputSymbol(name, {
92
- scope,
93
- refkeys: props.refkey ?? core.refkey(name),
94
- });
95
-
96
- // scope for ctor declaration
97
- const ctorDeclScope = new CSharpMemberScope("constructor-decl", {
98
- owner: ctorSymbol,
99
- });
100
-
101
- const accessModifier = getAccessModifier(props.accessModifier);
102
- const params =
103
- props.parameters ? <Parameters parameters={props.parameters} /> : "";
104
-
105
- // note that scope wraps the ctor decl so that the params get the correct scope
106
- return (
107
- <core.Declaration symbol={ctorSymbol}>
108
- <core.Scope value={ctorDeclScope}>
109
- {accessModifier}
110
- <Name />({params})<core.Block newline>{props.children}</core.Block>
111
- </core.Scope>
112
- </core.Declaration>
113
- );
114
- }
115
-
116
- // properties for creating a class member
117
- export interface ClassMemberProps {
118
- name: string;
119
- type: core.Children;
120
- accessModifier?: AccessModifier;
121
- refkey?: core.Refkey;
122
- }
123
-
124
- // a C# class member (i.e. a field within a class like "private int count")
125
- export function ClassMember(props: ClassMemberProps) {
126
- let nameElement: CSharpElements = "class-member-private";
127
- if (props.accessModifier === "public") {
128
- nameElement = "class-member-public";
129
- }
130
- const name = useCSharpNamePolicy().getName(props.name, nameElement);
131
- const scope = useCSharpScope();
132
- if (scope.kind !== "member" || scope.name !== "class-decl") {
133
- throw new Error(
134
- "can't define a class member outside of a class-decl scope",
135
- );
136
- }
137
-
138
- const memberSymbol = new CSharpOutputSymbol(name, {
139
- scope,
140
- refkeys: props.refkey ?? core.refkey(props.name),
141
- });
142
-
143
- return (
144
- <core.Declaration symbol={memberSymbol}>
145
- {getAccessModifier(props.accessModifier)}
146
- {props.type} <Name />
147
- </core.Declaration>
148
- );
149
- }
@@ -1,51 +0,0 @@
1
- import * as core from "@alloy-js/core";
2
- import { useCSharpNamePolicy } from "../name-policy.js";
3
- import { CSharpOutputSymbol } from "../symbols/csharp-output-symbol.js";
4
- import { useCSharpScope } from "../symbols/scopes.js";
5
- import { Name } from "./Name.js";
6
-
7
- export interface ParameterProps {
8
- name: string;
9
- type: core.Children;
10
- refkey?: core.Refkey;
11
- symbol?: core.OutputSymbol;
12
- }
13
-
14
- // a constructor/method parameter
15
- export function Parameter(props: ParameterProps) {
16
- const name = useCSharpNamePolicy().getName(props.name, "parameter");
17
- const scope = useCSharpScope();
18
- if (
19
- scope.kind !== "member" ||
20
- (scope.name !== "constructor-decl" && scope.name !== "method-decl")
21
- ) {
22
- throw new Error(
23
- "can't define a parameter outside of a constructor-decl or method-decl scope",
24
- );
25
- }
26
-
27
- const memberSymbol = new CSharpOutputSymbol(name, {
28
- scope,
29
- refkeys: props.refkey ?? core.refkey(props.name),
30
- });
31
-
32
- return (
33
- <core.Declaration symbol={memberSymbol}>
34
- {props.type} <Name />
35
- </core.Declaration>
36
- );
37
- }
38
-
39
- export interface ParametersProps {
40
- // param name and type
41
- parameters: Array<ParameterProps>;
42
- }
43
-
44
- // a collection of parameters
45
- export function Parameters(props: ParametersProps) {
46
- return (
47
- <core.For each={props.parameters} joiner={", "}>
48
- {(param) => <Parameter {...param} />}
49
- </core.For>
50
- );
51
- }