@alloy-js/csharp 0.20.0-dev.1 → 0.20.0-dev.10
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.
- package/dist/src/components/Declaration.d.ts +2 -2
- package/dist/src/components/Declaration.d.ts.map +1 -1
- package/dist/src/components/Declaration.js +5 -14
- package/dist/src/components/Declaration.js.map +1 -0
- package/dist/src/components/Name.js +2 -1
- package/dist/src/components/Name.js.map +1 -0
- package/dist/src/components/ProjectDirectory.js +2 -1
- package/dist/src/components/ProjectDirectory.js.map +1 -0
- package/dist/src/components/Reference.d.ts.map +1 -1
- package/dist/src/components/Reference.js +7 -2
- package/dist/src/components/Reference.js.map +1 -0
- package/dist/src/components/UsingDirective.d.ts +5 -1
- package/dist/src/components/UsingDirective.d.ts.map +1 -1
- package/dist/src/components/UsingDirective.js +5 -2
- package/dist/src/components/UsingDirective.js.map +1 -0
- package/dist/src/components/access-expression/access-expression.d.ts +54 -0
- package/dist/src/components/access-expression/access-expression.d.ts.map +1 -0
- package/dist/src/components/access-expression/access-expression.js +277 -0
- package/dist/src/components/access-expression/access-expression.js.map +1 -0
- package/dist/src/components/access-expression/access-expression.test.d.ts +2 -0
- package/dist/src/components/access-expression/access-expression.test.d.ts.map +1 -0
- package/dist/src/components/access-expression/access-expression.test.js +336 -0
- package/dist/src/components/access-expression/access-expression.test.js.map +1 -0
- package/dist/src/components/access-expression/part-descriptors.d.ts +32 -0
- package/dist/src/components/access-expression/part-descriptors.d.ts.map +1 -0
- package/dist/src/components/access-expression/part-descriptors.js +99 -0
- package/dist/src/components/access-expression/part-descriptors.js.map +1 -0
- package/dist/src/components/attributes/attributes.js +2 -1
- package/dist/src/components/attributes/attributes.js.map +1 -0
- package/dist/src/components/attributes/attributes.test.js +2 -1
- package/dist/src/components/attributes/attributes.test.js.map +1 -0
- package/dist/src/components/class/declaration.d.ts +2 -2
- package/dist/src/components/class/declaration.d.ts.map +1 -1
- package/dist/src/components/class/declaration.js +21 -34
- package/dist/src/components/class/declaration.js.map +1 -0
- package/dist/src/components/class/declaration.test.js +199 -200
- package/dist/src/components/class/declaration.test.js.map +1 -0
- package/dist/src/components/constructor/constructor.d.ts.map +1 -1
- package/dist/src/components/constructor/constructor.js +13 -20
- package/dist/src/components/constructor/constructor.js.map +1 -0
- package/dist/src/components/constructor/constructor.test.js +12 -20
- package/dist/src/components/constructor/constructor.test.js.map +1 -0
- package/dist/src/components/doc/comment.js +2 -1
- package/dist/src/components/doc/comment.js.map +1 -0
- package/dist/src/components/doc/comment.test.js +2 -1
- package/dist/src/components/doc/comment.test.js.map +1 -0
- package/dist/src/components/doc/from-markdown.js +2 -1
- package/dist/src/components/doc/from-markdown.js.map +1 -0
- package/dist/src/components/doc/from-markdown.test.js +2 -1
- package/dist/src/components/doc/from-markdown.test.js.map +1 -0
- package/dist/src/components/{EnumDeclaration.d.ts → enum/declaration.d.ts} +6 -11
- package/dist/src/components/enum/declaration.d.ts.map +1 -0
- package/dist/src/components/enum/declaration.js +55 -0
- package/dist/src/components/enum/declaration.js.map +1 -0
- package/dist/src/components/enum/declaration.ref.test.d.ts +2 -0
- package/dist/src/components/enum/declaration.ref.test.d.ts.map +1 -0
- package/dist/src/components/enum/declaration.ref.test.js +121 -0
- package/dist/src/components/enum/declaration.ref.test.js.map +1 -0
- package/dist/src/components/enum/declaration.test.d.ts +2 -0
- package/dist/src/components/enum/declaration.test.d.ts.map +1 -0
- package/dist/src/components/enum/declaration.test.js +40 -0
- package/dist/src/components/enum/declaration.test.js.map +1 -0
- package/dist/src/components/enum/member.d.ts +7 -0
- package/dist/src/components/enum/member.d.ts.map +1 -0
- package/dist/src/components/enum/member.js +30 -0
- package/dist/src/components/enum/member.js.map +1 -0
- package/dist/src/components/enum/member.test.d.ts +2 -0
- package/dist/src/components/enum/member.test.d.ts.map +1 -0
- package/dist/src/components/enum/member.test.js +29 -0
- package/dist/src/components/enum/member.test.js.map +1 -0
- package/dist/src/components/field/field.d.ts.map +1 -1
- package/dist/src/components/field/field.js +11 -18
- package/dist/src/components/field/field.js.map +1 -0
- package/dist/src/components/field/field.test.js +9 -8
- package/dist/src/components/field/field.test.js.map +1 -0
- package/dist/src/components/index.d.ts +7 -3
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/components/index.js +9 -4
- package/dist/src/components/index.js.map +1 -0
- package/dist/src/components/interface/declaration.d.ts.map +1 -1
- package/dist/src/components/interface/declaration.js +21 -22
- package/dist/src/components/interface/declaration.js.map +1 -0
- package/dist/src/components/interface/declaration.test.js +28 -36
- package/dist/src/components/interface/declaration.test.js.map +1 -0
- package/dist/src/components/interface/method.d.ts.map +1 -1
- package/dist/src/components/interface/method.js +9 -19
- package/dist/src/components/interface/method.js.map +1 -0
- package/dist/src/components/interface/method.test.js +40 -48
- package/dist/src/components/interface/method.test.js.map +1 -0
- package/dist/src/components/interface/property.d.ts.map +1 -1
- package/dist/src/components/interface/property.js +23 -40
- package/dist/src/components/interface/property.js.map +1 -0
- package/dist/src/components/interface/property.test.js +13 -12
- package/dist/src/components/interface/property.test.js.map +1 -0
- package/dist/src/components/invocation-expression/invocation-expression.d.ts +29 -0
- package/dist/src/components/invocation-expression/invocation-expression.d.ts.map +1 -0
- package/dist/src/components/invocation-expression/invocation-expression.js +70 -0
- package/dist/src/components/invocation-expression/invocation-expression.js.map +1 -0
- package/dist/src/components/invocation-expression/invocation-expression.test.d.ts +2 -0
- package/dist/src/components/invocation-expression/invocation-expression.test.d.ts.map +1 -0
- package/dist/src/components/invocation-expression/invocation-expression.test.js +105 -0
- package/dist/src/components/invocation-expression/invocation-expression.test.js.map +1 -0
- package/dist/src/components/lexical-scope.d.ts +8 -0
- package/dist/src/components/lexical-scope.d.ts.map +1 -0
- package/dist/src/components/lexical-scope.js +25 -0
- package/dist/src/components/lexical-scope.js.map +1 -0
- package/dist/src/components/method/method.d.ts +5 -2
- package/dist/src/components/method/method.d.ts.map +1 -1
- package/dist/src/components/method/method.js +9 -17
- package/dist/src/components/method/method.js.map +1 -0
- package/dist/src/components/method/method.test.js +13 -12
- package/dist/src/components/method/method.test.js.map +1 -0
- package/dist/src/components/method-scope.d.ts +8 -0
- package/dist/src/components/method-scope.d.ts.map +1 -0
- package/dist/src/components/method-scope.js +25 -0
- package/dist/src/components/method-scope.js.map +1 -0
- package/dist/src/components/namespace-scopes.d.ts +13 -0
- package/dist/src/components/namespace-scopes.d.ts.map +1 -0
- package/dist/src/components/namespace-scopes.js +45 -0
- package/dist/src/components/namespace-scopes.js.map +1 -0
- package/dist/src/components/namespace.d.ts +7 -0
- package/dist/src/components/namespace.d.ts.map +1 -0
- package/dist/src/components/namespace.js +47 -0
- package/dist/src/components/namespace.js.map +1 -0
- package/dist/src/components/namespace.ref.test.d.ts +2 -0
- package/dist/src/components/namespace.ref.test.d.ts.map +1 -0
- package/dist/src/components/namespace.ref.test.js +182 -0
- package/dist/src/components/namespace.ref.test.js.map +1 -0
- package/dist/src/components/namespace.test.d.ts.map +1 -0
- package/dist/src/components/namespace.test.js +79 -0
- package/dist/src/components/namespace.test.js.map +1 -0
- package/dist/src/components/parameters/parameters.d.ts +2 -3
- package/dist/src/components/parameters/parameters.d.ts.map +1 -1
- package/dist/src/components/parameters/parameters.js +15 -15
- package/dist/src/components/parameters/parameters.js.map +1 -0
- package/dist/src/components/parameters/parameters.test.d.ts +2 -0
- package/dist/src/components/parameters/parameters.test.d.ts.map +1 -0
- package/dist/src/components/parameters/parameters.test.js +154 -0
- package/dist/src/components/parameters/parameters.test.js.map +1 -0
- package/dist/src/components/property/property.d.ts +2 -2
- package/dist/src/components/property/property.d.ts.map +1 -1
- package/dist/src/components/property/property.js +30 -40
- package/dist/src/components/property/property.js.map +1 -0
- package/dist/src/components/property/property.test.js +16 -15
- package/dist/src/components/property/property.test.js.map +1 -0
- package/dist/src/components/record/declaration.d.ts +18 -0
- package/dist/src/components/record/declaration.d.ts.map +1 -1
- package/dist/src/components/record/declaration.js +21 -14
- package/dist/src/components/record/declaration.js.map +1 -0
- package/dist/src/components/record/declaration.test.js +52 -4
- package/dist/src/components/record/declaration.test.js.map +1 -0
- package/dist/src/components/source-file/source-file.d.ts +19 -0
- package/dist/src/components/source-file/source-file.d.ts.map +1 -0
- package/dist/src/components/source-file/source-file.js +59 -0
- package/dist/src/components/source-file/source-file.js.map +1 -0
- package/dist/src/components/source-file/source-file.test.d.ts +2 -0
- package/dist/src/components/source-file/source-file.test.d.ts.map +1 -0
- package/dist/src/components/source-file/source-file.test.js +136 -0
- package/dist/src/components/source-file/source-file.test.js.map +1 -0
- package/dist/src/components/stc/index.js +2 -1
- package/dist/src/components/stc/index.js.map +1 -0
- package/dist/src/components/struct/declaration.d.ts.map +1 -1
- package/dist/src/components/struct/declaration.js +6 -7
- package/dist/src/components/struct/declaration.js.map +1 -0
- package/dist/src/components/struct/declaration.test.js +32 -40
- package/dist/src/components/struct/declaration.test.js.map +1 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.js +2 -1
- package/dist/src/components/type-parameters/type-parameter-constraints.js.map +1 -0
- package/dist/src/components/type-parameters/type-parameter-constraints.test.js +2 -1
- package/dist/src/components/type-parameters/type-parameter-constraints.test.js.map +1 -0
- package/dist/src/components/type-parameters/type-parameter.d.ts.map +1 -1
- package/dist/src/components/type-parameters/type-parameter.js +9 -11
- package/dist/src/components/type-parameters/type-parameter.js.map +1 -0
- package/dist/src/components/type-parameters/type-parameters.js +2 -1
- package/dist/src/components/type-parameters/type-parameters.js.map +1 -0
- package/dist/src/components/type-parameters/type-parameters.test.js +5 -4
- package/dist/src/components/type-parameters/type-parameters.test.js.map +1 -0
- package/dist/src/components/var/declaration.d.ts.map +1 -1
- package/dist/src/components/var/declaration.js +8 -9
- package/dist/src/components/var/declaration.js.map +1 -0
- package/dist/src/components/var/declaration.test.js +13 -21
- package/dist/src/components/var/declaration.test.js.map +1 -0
- package/dist/src/contexts/format-options.d.ts +5 -0
- package/dist/src/contexts/format-options.d.ts.map +1 -0
- package/dist/src/contexts/format-options.js +9 -0
- package/dist/src/contexts/format-options.js.map +1 -0
- package/dist/src/contexts/global-namespace.d.ts +5 -0
- package/dist/src/contexts/global-namespace.d.ts.map +1 -0
- package/dist/src/contexts/global-namespace.js +25 -0
- package/dist/src/contexts/global-namespace.js.map +1 -0
- package/dist/src/contexts/namespace.d.ts +8 -0
- package/dist/src/contexts/namespace.d.ts.map +1 -0
- package/dist/src/contexts/namespace.js +6 -0
- package/dist/src/contexts/namespace.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -1
- package/dist/src/index.js.map +1 -0
- package/dist/src/modifiers.d.ts +11 -0
- package/dist/src/modifiers.d.ts.map +1 -1
- package/dist/src/modifiers.js +2 -1
- package/dist/src/modifiers.js.map +1 -0
- package/dist/src/name-policy.js +2 -1
- package/dist/src/name-policy.js.map +1 -0
- package/dist/src/scopes/class.d.ts +10 -0
- package/dist/src/scopes/class.d.ts.map +1 -0
- package/dist/src/scopes/class.js +11 -0
- package/dist/src/scopes/class.js.map +1 -0
- package/dist/src/scopes/contexts.d.ts +9 -0
- package/dist/src/scopes/contexts.d.ts.map +1 -0
- package/dist/src/scopes/contexts.js +34 -0
- package/dist/src/scopes/contexts.js.map +1 -0
- package/dist/src/scopes/csharp.d.ts +10 -0
- package/dist/src/scopes/csharp.d.ts.map +1 -0
- package/dist/src/scopes/csharp.js +15 -0
- package/dist/src/scopes/csharp.js.map +1 -0
- package/dist/src/scopes/factories.d.ts +9 -0
- package/dist/src/scopes/factories.d.ts.map +1 -0
- package/dist/src/scopes/factories.js +24 -0
- package/dist/src/scopes/factories.js.map +1 -0
- package/dist/src/scopes/index.d.ts +10 -0
- package/dist/src/scopes/index.d.ts.map +1 -0
- package/dist/src/scopes/index.js +10 -0
- package/dist/src/scopes/index.js.map +1 -0
- package/dist/src/scopes/lexical.d.ts +7 -0
- package/dist/src/scopes/lexical.d.ts.map +1 -0
- package/dist/src/scopes/lexical.js +8 -0
- package/dist/src/scopes/lexical.js.map +1 -0
- package/dist/src/scopes/method.d.ts +9 -0
- package/dist/src/scopes/method.d.ts.map +1 -0
- package/dist/src/scopes/method.js +14 -0
- package/dist/src/scopes/method.js.map +1 -0
- package/dist/src/scopes/named-type.d.ts +22 -0
- package/dist/src/scopes/named-type.d.ts.map +1 -0
- package/dist/src/scopes/named-type.js +33 -0
- package/dist/src/scopes/named-type.js.map +1 -0
- package/dist/src/scopes/namespace.d.ts +11 -0
- package/dist/src/scopes/namespace.d.ts.map +1 -0
- package/dist/src/scopes/namespace.js +39 -0
- package/dist/src/scopes/namespace.js.map +1 -0
- package/dist/src/scopes/source-file.d.ts +16 -0
- package/dist/src/scopes/source-file.d.ts.map +1 -0
- package/dist/src/scopes/source-file.js +44 -0
- package/dist/src/scopes/source-file.js.map +1 -0
- package/dist/src/symbols/csharp.d.ts +87 -0
- package/dist/src/symbols/csharp.d.ts.map +1 -0
- package/dist/src/symbols/csharp.js +246 -0
- package/dist/src/symbols/csharp.js.map +1 -0
- package/dist/src/symbols/factories.d.ts +25 -0
- package/dist/src/symbols/factories.d.ts.map +1 -0
- package/dist/src/symbols/factories.js +93 -0
- package/dist/src/symbols/factories.js.map +1 -0
- package/dist/src/symbols/index.d.ts +5 -2
- package/dist/src/symbols/index.d.ts.map +1 -1
- package/dist/src/symbols/index.js +6 -2
- package/dist/src/symbols/index.js.map +1 -0
- package/dist/src/symbols/method.d.ts +13 -0
- package/dist/src/symbols/method.d.ts.map +1 -0
- package/dist/src/symbols/method.js +16 -0
- package/dist/src/symbols/method.js.map +1 -0
- package/dist/src/symbols/named-type.d.ts +19 -0
- package/dist/src/symbols/named-type.d.ts.map +1 -0
- package/dist/src/symbols/named-type.js +31 -0
- package/dist/src/symbols/named-type.js.map +1 -0
- package/dist/src/symbols/namespace.d.ts +22 -0
- package/dist/src/symbols/namespace.d.ts.map +1 -0
- package/dist/src/symbols/namespace.js +45 -0
- package/dist/src/symbols/namespace.js.map +1 -0
- package/dist/src/symbols/reference.d.ts +2 -2
- package/dist/src/symbols/reference.d.ts.map +1 -1
- package/dist/src/symbols/reference.js +50 -44
- package/dist/src/symbols/reference.js.map +1 -0
- package/dist/test/project-directory.test.js +20 -19
- package/dist/test/project-directory.test.js.map +1 -0
- package/dist/test/using.test.js +23 -21
- package/dist/test/using.test.js.map +1 -0
- package/dist/test/utils.d.ts.map +1 -1
- package/dist/test/utils.js +7 -4
- package/dist/test/utils.js.map +1 -0
- package/dist/test/vitest.setup.js +2 -1
- package/dist/test/vitest.setup.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -6
- package/src/components/Declaration.tsx +3 -6
- package/src/components/Reference.tsx +3 -1
- package/src/components/UsingDirective.tsx +12 -2
- package/src/components/access-expression/access-expression.test.tsx +284 -0
- package/src/components/access-expression/access-expression.tsx +375 -0
- package/src/components/access-expression/part-descriptors.ts +175 -0
- package/src/components/class/declaration.test.tsx +142 -150
- package/src/components/class/declaration.tsx +20 -32
- package/src/components/constructor/constructor.test.tsx +10 -16
- package/src/components/constructor/constructor.tsx +13 -32
- package/src/components/enum/declaration.ref.test.tsx +93 -0
- package/src/components/enum/declaration.test.tsx +34 -0
- package/src/components/enum/declaration.tsx +65 -0
- package/src/components/enum/member.test.tsx +24 -0
- package/src/components/enum/member.tsx +36 -0
- package/src/components/field/field.test.tsx +7 -7
- package/src/components/field/field.tsx +12 -22
- package/src/components/index.ts +7 -3
- package/src/components/interface/declaration.test.tsx +26 -32
- package/src/components/interface/declaration.tsx +16 -18
- package/src/components/interface/method.test.tsx +38 -44
- package/src/components/interface/method.tsx +7 -20
- package/src/components/interface/property.test.tsx +11 -11
- package/src/components/interface/property.tsx +15 -34
- package/src/components/invocation-expression/invocation-expression.test.tsx +101 -0
- package/src/components/invocation-expression/invocation-expression.tsx +60 -0
- package/src/components/lexical-scope.tsx +29 -0
- package/src/components/method/method.test.tsx +11 -11
- package/src/components/method/method.tsx +12 -23
- package/src/components/method-scope.tsx +27 -0
- package/src/components/namespace-scopes.tsx +44 -0
- package/src/components/namespace.ref.test.tsx +139 -0
- package/src/components/namespace.test.tsx +52 -0
- package/src/components/namespace.tsx +45 -0
- package/src/components/parameters/parameters.test.tsx +117 -0
- package/src/components/parameters/parameters.tsx +11 -23
- package/src/components/property/property.test.tsx +14 -14
- package/src/components/property/property.tsx +23 -41
- package/src/components/record/declaration.test.tsx +47 -3
- package/src/components/record/declaration.tsx +34 -11
- package/src/components/source-file/source-file.test.tsx +96 -0
- package/src/components/source-file/source-file.tsx +98 -0
- package/src/components/struct/declaration.test.tsx +16 -22
- package/src/components/struct/declaration.tsx +4 -6
- package/src/components/type-parameters/type-parameter.tsx +14 -11
- package/src/components/type-parameters/type-parameters.test.tsx +4 -4
- package/src/components/var/declaration.test.tsx +8 -14
- package/src/components/var/declaration.tsx +12 -6
- package/src/contexts/format-options.ts +14 -0
- package/src/contexts/global-namespace.ts +29 -0
- package/src/contexts/namespace.ts +13 -0
- package/src/index.ts +2 -0
- package/src/modifiers.ts +14 -0
- package/src/scopes/class.ts +12 -0
- package/src/scopes/contexts.ts +45 -0
- package/src/scopes/csharp.ts +23 -0
- package/src/scopes/factories.ts +45 -0
- package/src/scopes/index.ts +9 -0
- package/src/scopes/lexical.ts +10 -0
- package/src/scopes/method.ts +22 -0
- package/src/scopes/named-type.ts +44 -0
- package/src/scopes/namespace.ts +59 -0
- package/src/scopes/source-file.ts +67 -0
- package/src/symbols/csharp.ts +339 -0
- package/src/symbols/factories.ts +215 -0
- package/src/symbols/index.ts +5 -2
- package/src/symbols/method.ts +26 -0
- package/src/symbols/named-type.ts +54 -0
- package/src/symbols/namespace.ts +62 -0
- package/src/symbols/reference.tsx +64 -0
- package/temp/api.json +6919 -2532
- package/test/project-directory.test.tsx +14 -16
- package/test/using.test.tsx +21 -21
- package/test/utils.tsx +2 -1
- package/tsconfig.json +4 -1
- package/tsdoc-metadata.json +1 -1
- package/dist/src/components/EnumDeclaration.d.ts.map +0 -1
- package/dist/src/components/EnumDeclaration.js +0 -85
- package/dist/src/components/Namespace.d.ts +0 -11
- package/dist/src/components/Namespace.d.ts.map +0 -1
- package/dist/src/components/Namespace.js +0 -33
- package/dist/src/components/SourceFile.d.ts +0 -14
- package/dist/src/components/SourceFile.d.ts.map +0 -1
- package/dist/src/components/SourceFile.js +0 -69
- package/dist/src/symbols/csharp-output-symbol.d.ts +0 -8
- package/dist/src/symbols/csharp-output-symbol.d.ts.map +0 -1
- package/dist/src/symbols/csharp-output-symbol.js +0 -19
- package/dist/src/symbols/scopes.d.ts +0 -14
- package/dist/src/symbols/scopes.d.ts.map +0 -1
- package/dist/src/symbols/scopes.js +0 -31
- package/dist/test/enum.test.d.ts +0 -2
- package/dist/test/enum.test.d.ts.map +0 -1
- package/dist/test/enum.test.js +0 -178
- package/dist/test/namespace.test.d.ts.map +0 -1
- package/dist/test/namespace.test.js +0 -81
- package/dist/test/sourcefile.test.d.ts +0 -2
- package/dist/test/sourcefile.test.d.ts.map +0 -1
- package/dist/test/sourcefile.test.js +0 -58
- package/src/components/EnumDeclaration.tsx +0 -99
- package/src/components/Namespace.tsx +0 -35
- package/src/components/SourceFile.tsx +0 -78
- package/src/symbols/csharp-output-symbol.ts +0 -22
- package/src/symbols/reference.ts +0 -65
- package/src/symbols/scopes.ts +0 -41
- package/test/enum.test.tsx +0 -149
- package/test/namespace.test.tsx +0 -55
- package/test/sourcefile.test.tsx +0 -47
- /package/dist/{test → src/components}/namespace.test.d.ts +0 -0
|
@@ -2,7 +2,8 @@ import {
|
|
|
2
2
|
Block,
|
|
3
3
|
Children,
|
|
4
4
|
MemberDeclaration,
|
|
5
|
-
|
|
5
|
+
MemberName,
|
|
6
|
+
Namekey,
|
|
6
7
|
Refkey,
|
|
7
8
|
Scope,
|
|
8
9
|
} from "@alloy-js/core";
|
|
@@ -13,9 +14,8 @@ import {
|
|
|
13
14
|
getAsyncModifier,
|
|
14
15
|
makeModifiers,
|
|
15
16
|
} from "../../modifiers.js";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { CSharpMemberScope, useCSharpScope } from "../../symbols/scopes.js";
|
|
17
|
+
import { createMethodScope } from "../../scopes/factories.js";
|
|
18
|
+
import { createMethodSymbol } from "../../symbols/factories.js";
|
|
19
19
|
import { AttributeList, AttributesProp } from "../attributes/attributes.jsx";
|
|
20
20
|
import { DocWhen } from "../doc/comment.jsx";
|
|
21
21
|
import { ParameterProps, Parameters } from "../parameters/parameters.jsx";
|
|
@@ -46,9 +46,12 @@ const getMethodModifier = makeModifiers<MethodModifiers>([
|
|
|
46
46
|
|
|
47
47
|
// properties for creating a method
|
|
48
48
|
export interface MethodProps extends AccessModifiers, MethodModifiers {
|
|
49
|
-
name: string;
|
|
49
|
+
name: string | Namekey;
|
|
50
50
|
refkey?: Refkey;
|
|
51
51
|
children?: Children;
|
|
52
|
+
/**
|
|
53
|
+
* An array of parameter descriptors.
|
|
54
|
+
*/
|
|
52
55
|
parameters?: Array<ParameterProps>;
|
|
53
56
|
returns?: Children;
|
|
54
57
|
|
|
@@ -110,26 +113,12 @@ export interface MethodProps extends AccessModifiers, MethodModifiers {
|
|
|
110
113
|
|
|
111
114
|
// a C# class method
|
|
112
115
|
export function Method(props: MethodProps) {
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
if (
|
|
116
|
-
scope.kind !== "member" ||
|
|
117
|
-
(scope.name !== "class-decl" && scope.name !== "struct-decl")
|
|
118
|
-
) {
|
|
119
|
-
throw new Error(
|
|
120
|
-
"can't define a class method outside of a class or struct scope",
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
const methodSymbol = new CSharpOutputSymbol(name, {
|
|
125
|
-
scope,
|
|
126
|
-
refkeys: props.refkey ?? refkey(props.name),
|
|
116
|
+
const methodSymbol = createMethodSymbol(props.name, {
|
|
117
|
+
refkeys: props.refkey,
|
|
127
118
|
});
|
|
128
119
|
|
|
129
120
|
// scope for method declaration
|
|
130
|
-
const methodScope =
|
|
131
|
-
owner: methodSymbol,
|
|
132
|
-
});
|
|
121
|
+
const methodScope = createMethodScope();
|
|
133
122
|
|
|
134
123
|
const returns = props.returns ?? (props.async ? "Task" : "void");
|
|
135
124
|
|
|
@@ -145,7 +134,7 @@ export function Method(props: MethodProps) {
|
|
|
145
134
|
<DocWhen doc={props.doc} />
|
|
146
135
|
<AttributeList attributes={props.attributes} endline />
|
|
147
136
|
{modifiers}
|
|
148
|
-
{returns}
|
|
137
|
+
{returns} <MemberName />
|
|
149
138
|
{props.typeParameters && (
|
|
150
139
|
<TypeParameters parameters={props.typeParameters} />
|
|
151
140
|
)}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Scope, ScopePropsWithInfo, ScopePropsWithValue } from "@alloy-js/core";
|
|
2
|
+
import { useCSharpScope } from "../scopes/contexts.js";
|
|
3
|
+
import { CSharpMethodScope } from "../scopes/method.js";
|
|
4
|
+
|
|
5
|
+
export interface MethodScopePropsWithScopeValue extends ScopePropsWithValue {}
|
|
6
|
+
export interface MethodScopePropsWithScopeInfo extends ScopePropsWithInfo {}
|
|
7
|
+
|
|
8
|
+
export type MethodScopeProps =
|
|
9
|
+
| MethodScopePropsWithScopeValue
|
|
10
|
+
| MethodScopePropsWithScopeInfo;
|
|
11
|
+
|
|
12
|
+
export function MethodScope(props: MethodScopeProps) {
|
|
13
|
+
let scope;
|
|
14
|
+
if ("value" in props) {
|
|
15
|
+
if (!(props.value instanceof CSharpMethodScope)) {
|
|
16
|
+
throw new Error("MethodScope value must be a CSharpMethodScope instance");
|
|
17
|
+
}
|
|
18
|
+
scope = props.value;
|
|
19
|
+
} else {
|
|
20
|
+
const parentScope = useCSharpScope();
|
|
21
|
+
scope = new CSharpMethodScope(props.name ?? "method scope", parentScope, {
|
|
22
|
+
...props,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return <Scope value={scope}>{props.children}</Scope>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Scope } from "@alloy-js/core";
|
|
2
|
+
import { Children } from "@alloy-js/core/jsx-runtime";
|
|
3
|
+
import { NamespaceContext } from "../contexts/namespace.js";
|
|
4
|
+
import { createCSharpNamespaceScope } from "../scopes/namespace.js";
|
|
5
|
+
import { NamespaceSymbol } from "../symbols/namespace.js";
|
|
6
|
+
|
|
7
|
+
export interface NamespaceScopProps {
|
|
8
|
+
symbol: NamespaceSymbol;
|
|
9
|
+
children: Children;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function NamespaceScope(props: NamespaceScopProps) {
|
|
13
|
+
const scope = createCSharpNamespaceScope(props.symbol);
|
|
14
|
+
return (
|
|
15
|
+
<NamespaceContext.Provider value={{ symbol: props.symbol }}>
|
|
16
|
+
<Scope value={scope}>{props.children}</Scope>
|
|
17
|
+
</NamespaceContext.Provider>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface NamespaceScopesProps {
|
|
22
|
+
symbol: NamespaceSymbol;
|
|
23
|
+
children: Children;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function NamespaceScopes(props: NamespaceScopesProps) {
|
|
27
|
+
function wrapWithScope(symbol: NamespaceSymbol, children: Children) {
|
|
28
|
+
const scopeChildren = (
|
|
29
|
+
<NamespaceScope symbol={symbol}>{children}</NamespaceScope>
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
if (symbol.enclosingNamespace) {
|
|
33
|
+
return wrapWithScope(symbol.enclosingNamespace, scopeChildren);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return scopeChildren;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<NamespaceContext.Provider value={{ symbol: props.symbol }}>
|
|
41
|
+
{wrapWithScope(props.symbol, props.children)}
|
|
42
|
+
</NamespaceContext.Provider>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
@@ -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 "./source-file/source-file.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 "./source-file/source-file.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,117 @@
|
|
|
1
|
+
import { ClassDeclaration } from "#components/class/declaration.jsx";
|
|
2
|
+
import { Method } from "#components/method/method.jsx";
|
|
3
|
+
import { Property } from "#components/property/property.jsx";
|
|
4
|
+
import { List, memberRefkey, namekey } from "@alloy-js/core";
|
|
5
|
+
import { Children } from "@alloy-js/core/jsx-runtime";
|
|
6
|
+
import { expect, it } from "vitest";
|
|
7
|
+
import { TestNamespace } from "../../../test/utils.jsx";
|
|
8
|
+
|
|
9
|
+
const Wrapper = (props: { children: Children }) => (
|
|
10
|
+
<TestNamespace>
|
|
11
|
+
<ClassDeclaration public name="TestClass">
|
|
12
|
+
{props.children}
|
|
13
|
+
</ClassDeclaration>
|
|
14
|
+
</TestNamespace>
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
it("can be referenced", () => {
|
|
18
|
+
const param1Key = namekey("param1");
|
|
19
|
+
const param2Key = namekey("param2");
|
|
20
|
+
expect(
|
|
21
|
+
<Wrapper>
|
|
22
|
+
<Method
|
|
23
|
+
name="MethodOne"
|
|
24
|
+
parameters={[
|
|
25
|
+
{ name: param1Key, type: "T1" },
|
|
26
|
+
{ name: param2Key, type: "T2" },
|
|
27
|
+
]}
|
|
28
|
+
/>
|
|
29
|
+
</Wrapper>,
|
|
30
|
+
).toRenderTo(`
|
|
31
|
+
public class TestClass
|
|
32
|
+
{
|
|
33
|
+
void MethodOne(T1 param1, T2 param2) {}
|
|
34
|
+
}
|
|
35
|
+
`);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it("members can be referenced", () => {
|
|
39
|
+
const classKey = namekey("TestType");
|
|
40
|
+
const methodKey = namekey("TestMethod");
|
|
41
|
+
const param1Key = namekey("param1");
|
|
42
|
+
|
|
43
|
+
expect(
|
|
44
|
+
<TestNamespace>
|
|
45
|
+
<List>
|
|
46
|
+
<ClassDeclaration name={classKey}>
|
|
47
|
+
<Method name={methodKey} />
|
|
48
|
+
</ClassDeclaration>
|
|
49
|
+
<ClassDeclaration name="Test">
|
|
50
|
+
<Method
|
|
51
|
+
name="Test"
|
|
52
|
+
parameters={[{ name: param1Key, type: classKey }]}
|
|
53
|
+
>
|
|
54
|
+
return {memberRefkey(param1Key, methodKey)}();
|
|
55
|
+
</Method>
|
|
56
|
+
</ClassDeclaration>
|
|
57
|
+
</List>
|
|
58
|
+
</TestNamespace>,
|
|
59
|
+
).toRenderTo(`
|
|
60
|
+
class TestType
|
|
61
|
+
{
|
|
62
|
+
void TestMethod() {}
|
|
63
|
+
}
|
|
64
|
+
class Test
|
|
65
|
+
{
|
|
66
|
+
void Test(TestType param1)
|
|
67
|
+
{
|
|
68
|
+
return param1.TestMethod();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
`);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("members can be referenced when the parameter is nullable", () => {
|
|
75
|
+
const propTypeKey = namekey("PropType");
|
|
76
|
+
const propTypePropKey = namekey("Field");
|
|
77
|
+
const classKey = namekey("TestType");
|
|
78
|
+
const propKey = namekey("TestProp");
|
|
79
|
+
const param1Key = namekey("param1");
|
|
80
|
+
|
|
81
|
+
expect(
|
|
82
|
+
<TestNamespace>
|
|
83
|
+
<List>
|
|
84
|
+
<ClassDeclaration name={propTypeKey}>
|
|
85
|
+
<Property name={propTypePropKey} type={"string"} nullable />
|
|
86
|
+
</ClassDeclaration>
|
|
87
|
+
<ClassDeclaration name={classKey}>
|
|
88
|
+
<Property name={propKey} type={propTypeKey} nullable />
|
|
89
|
+
</ClassDeclaration>
|
|
90
|
+
<ClassDeclaration name="Test">
|
|
91
|
+
<Method
|
|
92
|
+
name="Test"
|
|
93
|
+
parameters={[{ name: param1Key, type: classKey, optional: true }]}
|
|
94
|
+
>
|
|
95
|
+
return {memberRefkey(param1Key, propKey, propTypePropKey)};
|
|
96
|
+
</Method>
|
|
97
|
+
</ClassDeclaration>
|
|
98
|
+
</List>
|
|
99
|
+
</TestNamespace>,
|
|
100
|
+
).toRenderTo(`
|
|
101
|
+
class PropType
|
|
102
|
+
{
|
|
103
|
+
string? Field { }
|
|
104
|
+
}
|
|
105
|
+
class TestType
|
|
106
|
+
{
|
|
107
|
+
PropType? TestProp { }
|
|
108
|
+
}
|
|
109
|
+
class Test
|
|
110
|
+
{
|
|
111
|
+
void Test(TestType? param1)
|
|
112
|
+
{
|
|
113
|
+
return param1?.TestProp?.Field;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
`);
|
|
117
|
+
});
|
|
@@ -1,52 +1,40 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Children,
|
|
3
3
|
code,
|
|
4
|
+
createSymbolSlot,
|
|
4
5
|
Declaration,
|
|
5
6
|
For,
|
|
6
7
|
Indent,
|
|
7
|
-
|
|
8
|
-
refkey,
|
|
8
|
+
Namekey,
|
|
9
9
|
Refkey,
|
|
10
10
|
} from "@alloy-js/core";
|
|
11
|
-
import {
|
|
12
|
-
import { CSharpOutputSymbol } from "../../symbols/csharp-output-symbol.js";
|
|
13
|
-
import { useCSharpScope } from "../../symbols/scopes.js";
|
|
11
|
+
import { createParameterSymbol } from "../../symbols/factories.js";
|
|
14
12
|
import { Name } from "../Name.jsx";
|
|
15
13
|
|
|
16
14
|
export interface ParameterProps {
|
|
17
|
-
name: string;
|
|
15
|
+
name: string | Namekey;
|
|
18
16
|
type: Children;
|
|
19
17
|
/** If the parmaeter is optional(without default value) */
|
|
20
18
|
optional?: boolean;
|
|
21
19
|
/** Default value for the parameter */
|
|
22
20
|
default?: Children;
|
|
21
|
+
|
|
23
22
|
refkey?: Refkey;
|
|
24
|
-
symbol?: OutputSymbol;
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
/** Define a parameter to be used in class or interface method. */
|
|
28
26
|
export function Parameter(props: ParameterProps) {
|
|
29
|
-
const
|
|
30
|
-
const scope = useCSharpScope();
|
|
31
|
-
if (
|
|
32
|
-
scope.kind !== "member" ||
|
|
33
|
-
(scope.name !== "constructor-decl" &&
|
|
34
|
-
scope.name !== "method-decl" &&
|
|
35
|
-
scope.name !== "class-decl")
|
|
36
|
-
) {
|
|
37
|
-
throw new Error(
|
|
38
|
-
"can't define a parameter outside of a constructor-decl or method-decl scope",
|
|
39
|
-
);
|
|
40
|
-
}
|
|
27
|
+
const TypeSlot = createSymbolSlot();
|
|
41
28
|
|
|
42
|
-
const memberSymbol =
|
|
43
|
-
|
|
44
|
-
|
|
29
|
+
const memberSymbol = createParameterSymbol(props.name, {
|
|
30
|
+
refkeys: props.refkey,
|
|
31
|
+
type: TypeSlot.firstSymbol,
|
|
32
|
+
isNullable: props.optional,
|
|
45
33
|
});
|
|
46
34
|
|
|
47
35
|
return (
|
|
48
36
|
<Declaration symbol={memberSymbol}>
|
|
49
|
-
{props.type}
|
|
37
|
+
<TypeSlot>{props.type}</TypeSlot>
|
|
50
38
|
{props.optional ? "?" : ""} <Name />
|
|
51
39
|
{props.default ? code` = ${props.default}` : ""}
|
|
52
40
|
</Declaration>
|
|
@@ -30,7 +30,7 @@ describe("modifiers", () => {
|
|
|
30
30
|
).toRenderTo(`
|
|
31
31
|
public class TestClass
|
|
32
32
|
{
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
160
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
206
|
-
|
|
205
|
+
[Test]
|
|
206
|
+
int Test { get; set; }
|
|
207
207
|
}
|
|
208
208
|
`);
|
|
209
209
|
});
|