jsii-rosetta 6.0.15-dev.0 → 6.0.15-dev.2

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.
@@ -47,7 +47,7 @@ export declare class CSharpVisitor extends DefaultVisitor<CSharpLanguageContext>
47
47
  * Bump this when you change something in the implementation to invalidate
48
48
  * existing cached translations.
49
49
  */
50
- static readonly VERSION = "1";
50
+ static readonly VERSION = "2";
51
51
  readonly language = TargetLanguage.CSHARP;
52
52
  readonly defaultContext: {
53
53
  propertyOrMethod: boolean;
@@ -93,6 +93,7 @@ export declare class CSharpVisitor extends DefaultVisitor<CSharpLanguageContext>
93
93
  stringLiteral(node: ts.StringLiteral | ts.NoSubstitutionTemplateLiteral, renderer: CSharpRenderer): OTree;
94
94
  expressionStatement(node: ts.ExpressionStatement, renderer: CSharpRenderer): OTree;
95
95
  propertyAccessExpression(node: ts.PropertyAccessExpression, renderer: CSharpRenderer): OTree;
96
+ private memberShadowedByParameter;
96
97
  parameterDeclaration(node: ts.ParameterDeclaration, renderer: CSharpRenderer): OTree;
97
98
  propertySignature(node: ts.PropertySignature, renderer: CSharpRenderer): OTree;
98
99
  /**
@@ -242,11 +242,30 @@ class CSharpVisitor extends default_1.DefaultVisitor {
242
242
  const lhs = renderer.textOf(node.expression);
243
243
  // Suppress the LHS of the dot operator if it's "this." (not necessary in C#)
244
244
  // or if it's an imported module reference (C# has namespace-wide imports).
245
- const objectExpression = lhs === 'this' || this.dropPropertyAccesses.has(lhs)
245
+ // Exception: keep "this." when the member, as it will be rendered, is
246
+ // shadowed by a parameter of an enclosing function. This matters for
247
+ // private fields (which keep their camelCase name): in a constructor
248
+ // assigning a same-named field, dropping the qualifier degrades
249
+ // `this.resource = resource` into the self-assignment `resource = resource;`.
250
+ const dropThis = lhs === 'this' && !this.memberShadowedByParameter(node, renderer);
251
+ const objectExpression = dropThis || this.dropPropertyAccesses.has(lhs)
246
252
  ? []
247
253
  : [renderer.updateContext({ propertyOrMethod: false }).convert(node.expression), '.'];
248
254
  return new o_tree_1.OTree([...objectExpression, renderer.updateContext({ propertyOrMethod: true }).convert(node.name)]);
249
255
  }
256
+ memberShadowedByParameter(node, renderer) {
257
+ const text = node.name.text;
258
+ // The name the member will render as: private properties keep their
259
+ // camelCase name, everything else is PascalCased (see `identifier`).
260
+ const renderedName = renderer.currentContext.privatePropertyNames.includes(text) ? text : ucFirst(text);
261
+ for (let current = node.parent; current != null; current = current.parent) {
262
+ if (ts.isFunctionLike(current) &&
263
+ current.parameters.some((p) => ts.isIdentifier(p.name) && p.name.text === renderedName)) {
264
+ return true;
265
+ }
266
+ }
267
+ return false;
268
+ }
250
269
  parameterDeclaration(node, renderer) {
251
270
  return new o_tree_1.OTree([
252
271
  ...(node.dotDotDotToken ? ['params '] : []), // Varargs. Render with 'params' keyword
@@ -500,7 +519,7 @@ exports.CSharpVisitor = CSharpVisitor;
500
519
  * Bump this when you change something in the implementation to invalidate
501
520
  * existing cached translations.
502
521
  */
503
- CSharpVisitor.VERSION = '1';
522
+ CSharpVisitor.VERSION = '2';
504
523
  /**
505
524
  * Uppercase the first letter
506
525
  */
@@ -1 +1 @@
1
- {"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../src/languages/csharp.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { DefaultVisitor } from './default';\nimport { TargetLanguage } from './target-language';\nimport { determineJsiiType, JsiiType, ObjectLiteralStruct } from '../jsii/jsii-types';\nimport { JsiiSymbol, simpleName, namespaceName } from '../jsii/jsii-utils';\nimport { jsiiTargetParameter } from '../jsii/packages';\nimport { OTree, NO_SYNTAX } from '../o-tree';\nimport { AstRenderer, nimpl } from '../renderer';\nimport {\n matchAst,\n nodeOfType,\n quoteStringLiteral,\n visibility,\n isReadOnly,\n findSuperCall,\n privatePropertyNames,\n findEnclosingClassDeclaration,\n} from '../typescript/ast-utils';\nimport { ImportStatement } from '../typescript/imports';\nimport {\n typeContainsUndefined,\n parameterAcceptsUndefined,\n inferMapElementType,\n determineReturnType,\n} from '../typescript/types';\nimport { flat, fmap } from '../util';\n\ninterface CSharpLanguageContext {\n /**\n * Used to capitalize member accesses\n */\n readonly propertyOrMethod: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inStructInterface: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inRegularInterface: boolean;\n\n /**\n * So we know how to render property assignments\n */\n readonly inKeyValueList: boolean;\n\n /**\n * Whether a string literal is currently in the position of having to render as an identifier (LHS in property assignment)\n */\n readonly stringAsIdentifier: boolean;\n\n /**\n * Whether an identifier literal is currently in the position of having to render as a string (LHS in property assignment)\n */\n readonly identifierAsString: boolean;\n\n /**\n * When parsing an object literal and no type information is available, prefer parsing it as a struct to parsing it as a map\n */\n readonly preferObjectLiteralAsStruct: boolean;\n\n /**\n * When encountering these properties, render them as lowercase instead of uppercase\n */\n readonly privatePropertyNames: string[];\n}\n\ntype CSharpRenderer = AstRenderer<CSharpLanguageContext>;\n\nexport class CSharpVisitor extends DefaultVisitor<CSharpLanguageContext> {\n /**\n * Translation version\n *\n * Bump this when you change something in the implementation to invalidate\n * existing cached translations.\n */\n public static readonly VERSION = '1';\n\n public readonly language = TargetLanguage.CSHARP;\n\n public readonly defaultContext = {\n propertyOrMethod: false,\n inStructInterface: false,\n inRegularInterface: false,\n inKeyValueList: false,\n stringAsIdentifier: false,\n identifierAsString: false,\n preferObjectLiteralAsStruct: true,\n privatePropertyNames: [],\n };\n\n /**\n * Aliases for modules\n *\n * If these are encountered in the LHS of a property access, they will be dropped.\n */\n private readonly dropPropertyAccesses = new Set<string>();\n\n /**\n * Already imported modules so we don't emit duplicate imports\n */\n private readonly alreadyImportedNamespaces = new Set<string>();\n\n /**\n * A map to undo import renames\n *\n * We will always reference the original name in the translation.\n *\n * Maps a local-name to a C# name.\n */\n private readonly renamedSymbols = new Map<string, string>();\n\n public mergeContext(old: CSharpLanguageContext, update: Partial<CSharpLanguageContext>): CSharpLanguageContext {\n return Object.assign({}, old, update);\n }\n\n public override identifier(\n node: ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ) {\n let text = node.text;\n\n if (renderer.currentContext.identifierAsString) {\n return new OTree([JSON.stringify(text)]);\n }\n\n // Uppercase methods and properties, leave the rest as-is\n if (renderer.currentContext.propertyOrMethod && !renderer.currentContext.privatePropertyNames.includes(text)) {\n text = ucFirst(text);\n }\n\n return new OTree([text]);\n }\n\n public override importStatement(importStatement: ImportStatement, context: CSharpRenderer): OTree {\n const guessedNamespace = guessDotnetNamespace(importStatement.packageName);\n const namespace = fmap(importStatement.moduleSymbol, findDotnetName) ?? guessedNamespace;\n\n if (importStatement.imports.import === 'full') {\n this.dropPropertyAccesses.add(importStatement.imports.sourceName);\n this.alreadyImportedNamespaces.add(namespace);\n return new OTree([`using ${namespace};`], [], { canBreakLine: true });\n }\n if (importStatement.imports.import === 'selective') {\n const statements = new Array<string>();\n\n for (const el of importStatement.imports.elements) {\n const dotnetNs = fmap(el.importedSymbol, findDotnetName) ?? `${guessedNamespace}.${ucFirst(el.sourceName)}`;\n\n // If this is an alias, we only honor it if it's NOT for sure a module\n // (could be an alias import of a class or enum).\n if (el.alias && el.importedSymbol?.symbolType !== 'module') {\n this.renamedSymbols.set(el.alias, simpleName(dotnetNs));\n statements.push(`using ${ucFirst(el.alias)} = ${dotnetNs};`);\n continue;\n }\n\n // If we are importing a module directly, drop the occurrences of that\n // identifier further down (turn `mod.MyClass` into `MyClass`).\n if (el.importedSymbol?.symbolType === 'module') {\n this.dropPropertyAccesses.add(el.alias ?? el.sourceName);\n }\n\n // Output an import statement for the containing namespace\n const importableNamespace = el.importedSymbol?.symbolType === 'module' ? dotnetNs : namespaceName(dotnetNs);\n if (this.alreadyImportedNamespaces.has(importableNamespace)) {\n continue;\n }\n\n this.alreadyImportedNamespaces.add(importableNamespace);\n statements.push(`using ${importableNamespace};`);\n }\n\n return new OTree([], statements, { canBreakLine: true, separator: '\\n' });\n }\n\n return nimpl(importStatement.node, context);\n }\n\n public override functionDeclaration(node: ts.FunctionDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override constructorDeclaration(node: ts.ConstructorDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer, { isConstructor: true });\n }\n\n public override methodDeclaration(node: ts.MethodDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override methodSignature(node: ts.MethodSignature, renderer: CSharpRenderer): OTree {\n return new OTree(\n [\n this.renderTypeNode(node.type, false, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ');',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // tslint:disable-next-line:max-line-length\n public functionLike(\n node: ts.FunctionLikeDeclaration | ts.ConstructorDeclaration | ts.MethodDeclaration,\n renderer: CSharpRenderer,\n opts: { isConstructor?: boolean } = {},\n ): OTree {\n const methodName = opts.isConstructor\n ? findEnclosingClassDeclaration(node)?.name?.text ?? 'MyClass'\n : renderer.updateContext({ propertyOrMethod: true }).convert(node.name);\n\n const retType = determineReturnType(renderer.typeChecker, node);\n const returnType = opts.isConstructor ? '' : this.renderType(node, retType, false, 'void', renderer);\n\n const baseConstructorCall = new Array<string | OTree>();\n if (opts.isConstructor) {\n const superCall = findSuperCall(node.body, renderer);\n if (superCall) {\n baseConstructorCall.push(': base(', this.argumentList(superCall.arguments, renderer), ') ');\n }\n }\n\n const ret = new OTree(\n [\n visibility(node),\n ' ',\n returnType,\n returnType ? ' ' : '',\n methodName,\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ') ',\n ...baseConstructorCall,\n ],\n [renderer.convert(node.body)],\n {\n canBreakLine: true,\n },\n );\n\n return ret;\n }\n\n public override propertyDeclaration(node: ts.PropertyDeclaration, renderer: CSharpRenderer): OTree {\n const vis = visibility(node);\n const propertyOrMethod = vis !== 'private'; // Capitalize non-private fields\n\n if (vis === 'private' || node.initializer) {\n // Emit member field\n return new OTree(\n [\n vis,\n isReadOnly(node) ? ' readonly' : '',\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ...(node.initializer ? [' = ', renderer.convert(node.initializer)] : []),\n ';',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // Emit property. No functional difference but slightly more idiomatic\n return new OTree(\n [\n vis,\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ' ',\n isReadOnly(node) ? '{ get; }' : '{ get; set; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override printStatement(args: ts.NodeArray<ts.Expression>, renderer: CSharpRenderer) {\n const renderedArgs =\n args.length === 1\n ? renderer.convertAll(args)\n : [\n '$\"',\n new OTree(\n [],\n args.map((a) => new OTree(['{', renderer.convert(a), '}'])),\n { separator: ' ' },\n ),\n '\"',\n ];\n\n return new OTree(['Console.WriteLine(', ...renderedArgs, ')']);\n }\n\n public override superCallExpression(_node: ts.CallExpression, _renderer: CSharpRenderer): OTree {\n // super() call rendered as part of the constructor already\n return NO_SYNTAX;\n }\n\n public override stringLiteral(\n node: ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.stringAsIdentifier) {\n return this.identifier(node, renderer);\n }\n if (node.text.includes('\\n')) {\n // Multi-line string literals (@\"string\") in C# do not do escaping. Only \" needs to be doubled.\n return new OTree(['@\"', node.text.replace(/\"/g, '\"\"'), '\"']);\n }\n return new OTree([JSON.stringify(node.text)]);\n }\n\n public override expressionStatement(node: ts.ExpressionStatement, renderer: CSharpRenderer): OTree {\n const inner = renderer.convert(node.expression);\n if (inner.isEmpty) {\n return inner;\n }\n return new OTree([inner, ';'], [], { canBreakLine: true });\n }\n\n public override propertyAccessExpression(node: ts.PropertyAccessExpression, renderer: CSharpRenderer): OTree {\n const lhs = renderer.textOf(node.expression);\n\n // Suppress the LHS of the dot operator if it's \"this.\" (not necessary in C#)\n // or if it's an imported module reference (C# has namespace-wide imports).\n const objectExpression =\n lhs === 'this' || this.dropPropertyAccesses.has(lhs)\n ? []\n : [renderer.updateContext({ propertyOrMethod: false }).convert(node.expression), '.'];\n\n return new OTree([...objectExpression, renderer.updateContext({ propertyOrMethod: true }).convert(node.name)]);\n }\n\n public override parameterDeclaration(node: ts.ParameterDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree([\n ...(node.dotDotDotToken ? ['params '] : []), // Varargs. Render with 'params' keyword\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.convert(node.name),\n ...(parameterAcceptsUndefined(node, node.type && renderer.typeOfType(node.type))\n ? ['=', node.initializer ? renderer.convert(node.initializer) : 'null']\n : []),\n ]);\n }\n\n public override propertySignature(node: ts.PropertySignature, renderer: CSharpRenderer): OTree {\n const canSet = renderer.currentContext.inStructInterface || !isReadOnly(node);\n\n return new OTree(\n [\n !renderer.currentContext.inRegularInterface ? `${visibility(node)} ` : NO_SYNTAX,\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n ' ',\n canSet ? '{ get; set; }' : '{ get; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n /**\n * Do some work on property accesses to translate common JavaScript-isms to language-specific idioms\n */\n public override regularCallExpression(node: ts.CallExpression, renderer: CSharpRenderer): OTree {\n return new OTree([\n renderer.updateContext({ propertyOrMethod: true }).convert(node.expression),\n '(',\n this.argumentList(node.arguments, renderer),\n ')',\n ]);\n }\n\n public override classDeclaration(node: ts.ClassDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer\n .updateContext({\n privatePropertyNames: privatePropertyNames(node.members, renderer),\n })\n .convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override structInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inStructInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override regularInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['interface ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inRegularInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override block(node: ts.Block, children: CSharpRenderer): OTree {\n return new OTree(['\\n{'], [...children.convertAll(node.statements)], {\n indent: 4,\n suffix: '\\n}',\n });\n }\n\n public override unknownTypeObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.preferObjectLiteralAsStruct) {\n // Type information missing and from context we prefer a struct\n return new OTree(['new Struct { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n // Type information missing and from context we prefer a map\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n\n public override knownStructObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n structType: ObjectLiteralStruct,\n renderer: CSharpRenderer,\n ): OTree {\n return new OTree(['new ', structType.type.symbol.name, ' { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n\n public override keyValueObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: CSharpRenderer): OTree {\n // Try to infer an element type from the elements\n const valueType = inferMapElementType(node.properties, renderer.typeChecker);\n\n return new OTree(\n ['new Dictionary<string, ', this.renderType(node, valueType, false, 'object', renderer), '> { '],\n renderer.updateContext({ inKeyValueList: true }).convertAll(node.properties),\n {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n },\n );\n }\n\n public override shorthandPropertyAssignment(node: ts.ShorthandPropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.name, renderer);\n }\n\n public override propertyAssignment(node: ts.PropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.initializer, renderer);\n }\n\n public renderPropertyAssignment(key: ts.Node, value: ts.Node, renderer: CSharpRenderer): OTree {\n if (renderer.currentContext.inKeyValueList) {\n return new OTree(\n [\n '{ ',\n renderer\n .updateContext({\n propertyOrMethod: false,\n identifierAsString: !ts.isComputedPropertyName(key),\n })\n .convert(key),\n ', ',\n renderer.updateContext({ inKeyValueList: false }).convert(value),\n ' }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n return new OTree(\n [\n renderer.updateContext({ propertyOrMethod: true, stringAsIdentifier: true }).convert(key),\n ' = ',\n renderer.convert(value),\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override arrayLiteralExpression(node: ts.ArrayLiteralExpression, renderer: CSharpRenderer): OTree {\n return new OTree(['new [] { '], renderer.convertAll(node.elements), {\n separator: ', ',\n suffix: ' }',\n indent: 4,\n });\n }\n\n public override ifStatement(node: ts.IfStatement, renderer: CSharpRenderer): OTree {\n const ifStmt = new OTree(\n ['if (', renderer.convert(node.expression), ') '],\n [renderer.convert(node.thenStatement)],\n { canBreakLine: true },\n );\n const elseStmt = node.elseStatement\n ? new OTree(['else '], [renderer.convert(node.elseStatement)], {\n canBreakLine: true,\n })\n : undefined;\n\n return elseStmt\n ? new OTree([], [ifStmt, elseStmt], {\n separator: '\\n',\n canBreakLine: true,\n })\n : ifStmt;\n }\n\n public override forOfStatement(node: ts.ForOfStatement, renderer: CSharpRenderer): OTree {\n // This is what a \"for (const x of ...)\" looks like in the AST\n let variableName = '???';\n\n matchAst(\n node.initializer,\n nodeOfType(ts.SyntaxKind.VariableDeclarationList, nodeOfType('var', ts.SyntaxKind.VariableDeclaration)),\n (bindings) => {\n variableName = renderer.textOf(bindings.var.name);\n },\n );\n\n return new OTree(\n ['for (var ', variableName, ' in ', renderer.convert(node.expression), ') '],\n [renderer.convert(node.statement)],\n { canBreakLine: true },\n );\n }\n\n public override asExpression(node: ts.AsExpression, context: CSharpRenderer): OTree {\n return new OTree(['(', this.renderTypeNode(node.type, false, context), ')', context.convert(node.expression)]);\n }\n\n public override variableDeclaration(node: ts.VariableDeclaration, renderer: CSharpRenderer): OTree {\n let typeOrVar = 'var';\n\n const fallback = node.type?.getText() ?? 'var';\n const type =\n (node.type && renderer.typeOfType(node.type)) ??\n (node.initializer && renderer.typeOfExpression(node.initializer));\n\n const varType = this.renderType(node, type, false, fallback, renderer);\n // If there is an initializer, and the value isn't \"IDictionary<...\", we always use var, as this is the\n // recommendation from Roslyn.\n if (varType !== 'object' && (varType.startsWith('IDictionary<') || node.initializer == null)) {\n typeOrVar = varType;\n }\n\n if (!node.initializer) {\n return new OTree([typeOrVar, ' ', renderer.convert(node.name), ';']);\n }\n\n return new OTree(\n [\n typeOrVar,\n ' ',\n renderer.convert(node.name),\n ' = ',\n renderer.updateContext({ preferObjectLiteralAsStruct: false }).convert(node.initializer),\n ';',\n ],\n undefined,\n { canBreakLine: true },\n );\n }\n\n public override templateExpression(node: ts.TemplateExpression, context: CSharpRenderer): OTree {\n // If this is a multi-line string literal, we need not quote much, as @\"string\" literals in C#\n // do not perform any quoting. The literal quotes in the text however must be doubled.\n const isMultiLine =\n !!node.head.rawText?.includes('\\n') || node.templateSpans.some((span) => span.literal.rawText?.includes('\\n'));\n\n const parts = new Array<string>();\n if (node.head.rawText) {\n parts.push(isMultiLine ? node.head.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(node.head.rawText));\n }\n for (const span of node.templateSpans) {\n parts.push(`{${context.textOf(span.expression)}}`);\n if (span.literal.rawText) {\n parts.push(isMultiLine ? span.literal.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(span.literal.rawText));\n }\n }\n\n return new OTree([isMultiLine ? '$@\"' : '$\"', ...parts, '\"']);\n }\n\n protected override argumentList(args: readonly ts.Node[] | undefined, renderer: CSharpRenderer): OTree {\n return new OTree([], args ? renderer.updateContext({ preferObjectLiteralAsStruct: true }).convertAll(args) : [], {\n separator: ', ',\n });\n }\n\n private renderTypeNode(typeNode: ts.TypeNode | undefined, questionMark: boolean, renderer: CSharpRenderer): string {\n if (!typeNode) {\n return 'void';\n }\n return this.renderType(typeNode, renderer.typeOfType(typeNode), questionMark, renderer.textOf(typeNode), renderer);\n }\n\n private renderType(\n typeNode: ts.Node,\n type: ts.Type | undefined,\n questionMark: boolean,\n fallback: string,\n renderer: CSharpRenderer,\n ): string {\n if (type === undefined) {\n return fallback;\n }\n\n const renderedType = doRender(determineJsiiType(renderer.typeChecker, type));\n\n const suffix = questionMark || typeContainsUndefined(type) ? '?' : '';\n\n return renderedType + suffix;\n\n // eslint-disable-next-line consistent-return\n function doRender(jsiiType: JsiiType): string {\n switch (jsiiType.kind) {\n case 'unknown':\n return fallback;\n case 'error':\n renderer.report(typeNode, jsiiType.message);\n return fallback;\n case 'map':\n return `IDictionary<string, ${doRender(jsiiType.elementType)}>`;\n case 'list':\n return `${doRender(jsiiType.elementType)}[]`;\n case 'intersection':\n const renderedBranches = jsiiType.branches.map(doRender);\n return `${renderedBranches[0]} /* & ${renderedBranches.slice(1).join(' & ')} */`;\n case 'namedType':\n return jsiiType.name;\n case 'builtIn':\n switch (jsiiType.builtIn) {\n case 'boolean':\n return 'boolean';\n case 'number':\n return 'int';\n case 'string':\n return 'string';\n case 'any':\n return 'object';\n case 'void':\n return 'void';\n }\n }\n }\n }\n\n private classHeritage(node: ts.ClassDeclaration | ts.InterfaceDeclaration, renderer: CSharpRenderer) {\n const heritage = flat(Array.from(node.heritageClauses ?? []).map((h) => Array.from(h.types))).map((t) =>\n renderer.convert(t.expression),\n );\n\n return heritage.length > 0 ? [' : ', new OTree([], heritage, { separator: ', ' })] : [];\n }\n}\n\n/**\n * Uppercase the first letter\n */\nfunction ucFirst(x: string) {\n return x.slice(0, 1).toUpperCase() + x.slice(1);\n}\n\n/**\n * Find the Java name of a module or type\n */\nfunction findDotnetName(jsiiSymbol: JsiiSymbol): string | undefined {\n if (!jsiiSymbol.sourceAssembly?.assembly) {\n // Don't have accurate info, just guess\n return jsiiSymbol.symbolType !== 'module' ? simpleName(jsiiSymbol.fqn) : guessDotnetNamespace(jsiiSymbol.fqn);\n }\n\n const asm = jsiiSymbol.sourceAssembly?.assembly;\n return recurse(jsiiSymbol.fqn);\n\n function recurse(fqn: string): string {\n if (fqn === asm.name) {\n return jsiiTargetParameter(asm, 'dotnet.namespace') ?? guessDotnetNamespace(fqn);\n }\n if (asm.submodules?.[fqn]) {\n const modName = jsiiTargetParameter(asm.submodules[fqn], 'dotnet.namespace');\n if (modName) {\n return modName;\n }\n }\n\n return `${recurse(namespaceName(fqn))}.${ucFirst(simpleName(jsiiSymbol.fqn))}`;\n }\n}\n\nfunction guessDotnetNamespace(ref: string) {\n return ref\n .split(/[^a-zA-Z0-9]+/g)\n .filter((s) => s !== '')\n .map(ucFirst)\n .join('.');\n}\n"]}
1
+ {"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../src/languages/csharp.ts"],"names":[],"mappings":"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","sourcesContent":["import * as ts from 'typescript';\n\nimport { DefaultVisitor } from './default';\nimport { TargetLanguage } from './target-language';\nimport { determineJsiiType, JsiiType, ObjectLiteralStruct } from '../jsii/jsii-types';\nimport { JsiiSymbol, simpleName, namespaceName } from '../jsii/jsii-utils';\nimport { jsiiTargetParameter } from '../jsii/packages';\nimport { OTree, NO_SYNTAX } from '../o-tree';\nimport { AstRenderer, nimpl } from '../renderer';\nimport {\n matchAst,\n nodeOfType,\n quoteStringLiteral,\n visibility,\n isReadOnly,\n findSuperCall,\n privatePropertyNames,\n findEnclosingClassDeclaration,\n} from '../typescript/ast-utils';\nimport { ImportStatement } from '../typescript/imports';\nimport {\n typeContainsUndefined,\n parameterAcceptsUndefined,\n inferMapElementType,\n determineReturnType,\n} from '../typescript/types';\nimport { flat, fmap } from '../util';\n\ninterface CSharpLanguageContext {\n /**\n * Used to capitalize member accesses\n */\n readonly propertyOrMethod: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inStructInterface: boolean;\n\n /**\n * So we know how to render property signatures\n */\n readonly inRegularInterface: boolean;\n\n /**\n * So we know how to render property assignments\n */\n readonly inKeyValueList: boolean;\n\n /**\n * Whether a string literal is currently in the position of having to render as an identifier (LHS in property assignment)\n */\n readonly stringAsIdentifier: boolean;\n\n /**\n * Whether an identifier literal is currently in the position of having to render as a string (LHS in property assignment)\n */\n readonly identifierAsString: boolean;\n\n /**\n * When parsing an object literal and no type information is available, prefer parsing it as a struct to parsing it as a map\n */\n readonly preferObjectLiteralAsStruct: boolean;\n\n /**\n * When encountering these properties, render them as lowercase instead of uppercase\n */\n readonly privatePropertyNames: string[];\n}\n\ntype CSharpRenderer = AstRenderer<CSharpLanguageContext>;\n\nexport class CSharpVisitor extends DefaultVisitor<CSharpLanguageContext> {\n /**\n * Translation version\n *\n * Bump this when you change something in the implementation to invalidate\n * existing cached translations.\n */\n public static readonly VERSION = '2';\n\n public readonly language = TargetLanguage.CSHARP;\n\n public readonly defaultContext = {\n propertyOrMethod: false,\n inStructInterface: false,\n inRegularInterface: false,\n inKeyValueList: false,\n stringAsIdentifier: false,\n identifierAsString: false,\n preferObjectLiteralAsStruct: true,\n privatePropertyNames: [],\n };\n\n /**\n * Aliases for modules\n *\n * If these are encountered in the LHS of a property access, they will be dropped.\n */\n private readonly dropPropertyAccesses = new Set<string>();\n\n /**\n * Already imported modules so we don't emit duplicate imports\n */\n private readonly alreadyImportedNamespaces = new Set<string>();\n\n /**\n * A map to undo import renames\n *\n * We will always reference the original name in the translation.\n *\n * Maps a local-name to a C# name.\n */\n private readonly renamedSymbols = new Map<string, string>();\n\n public mergeContext(old: CSharpLanguageContext, update: Partial<CSharpLanguageContext>): CSharpLanguageContext {\n return Object.assign({}, old, update);\n }\n\n public override identifier(\n node: ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ) {\n let text = node.text;\n\n if (renderer.currentContext.identifierAsString) {\n return new OTree([JSON.stringify(text)]);\n }\n\n // Uppercase methods and properties, leave the rest as-is\n if (renderer.currentContext.propertyOrMethod && !renderer.currentContext.privatePropertyNames.includes(text)) {\n text = ucFirst(text);\n }\n\n return new OTree([text]);\n }\n\n public override importStatement(importStatement: ImportStatement, context: CSharpRenderer): OTree {\n const guessedNamespace = guessDotnetNamespace(importStatement.packageName);\n const namespace = fmap(importStatement.moduleSymbol, findDotnetName) ?? guessedNamespace;\n\n if (importStatement.imports.import === 'full') {\n this.dropPropertyAccesses.add(importStatement.imports.sourceName);\n this.alreadyImportedNamespaces.add(namespace);\n return new OTree([`using ${namespace};`], [], { canBreakLine: true });\n }\n if (importStatement.imports.import === 'selective') {\n const statements = new Array<string>();\n\n for (const el of importStatement.imports.elements) {\n const dotnetNs = fmap(el.importedSymbol, findDotnetName) ?? `${guessedNamespace}.${ucFirst(el.sourceName)}`;\n\n // If this is an alias, we only honor it if it's NOT for sure a module\n // (could be an alias import of a class or enum).\n if (el.alias && el.importedSymbol?.symbolType !== 'module') {\n this.renamedSymbols.set(el.alias, simpleName(dotnetNs));\n statements.push(`using ${ucFirst(el.alias)} = ${dotnetNs};`);\n continue;\n }\n\n // If we are importing a module directly, drop the occurrences of that\n // identifier further down (turn `mod.MyClass` into `MyClass`).\n if (el.importedSymbol?.symbolType === 'module') {\n this.dropPropertyAccesses.add(el.alias ?? el.sourceName);\n }\n\n // Output an import statement for the containing namespace\n const importableNamespace = el.importedSymbol?.symbolType === 'module' ? dotnetNs : namespaceName(dotnetNs);\n if (this.alreadyImportedNamespaces.has(importableNamespace)) {\n continue;\n }\n\n this.alreadyImportedNamespaces.add(importableNamespace);\n statements.push(`using ${importableNamespace};`);\n }\n\n return new OTree([], statements, { canBreakLine: true, separator: '\\n' });\n }\n\n return nimpl(importStatement.node, context);\n }\n\n public override functionDeclaration(node: ts.FunctionDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override constructorDeclaration(node: ts.ConstructorDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer, { isConstructor: true });\n }\n\n public override methodDeclaration(node: ts.MethodDeclaration, renderer: CSharpRenderer): OTree {\n return this.functionLike(node, renderer);\n }\n\n public override methodSignature(node: ts.MethodSignature, renderer: CSharpRenderer): OTree {\n return new OTree(\n [\n this.renderTypeNode(node.type, false, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ');',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // tslint:disable-next-line:max-line-length\n public functionLike(\n node: ts.FunctionLikeDeclaration | ts.ConstructorDeclaration | ts.MethodDeclaration,\n renderer: CSharpRenderer,\n opts: { isConstructor?: boolean } = {},\n ): OTree {\n const methodName = opts.isConstructor\n ? findEnclosingClassDeclaration(node)?.name?.text ?? 'MyClass'\n : renderer.updateContext({ propertyOrMethod: true }).convert(node.name);\n\n const retType = determineReturnType(renderer.typeChecker, node);\n const returnType = opts.isConstructor ? '' : this.renderType(node, retType, false, 'void', renderer);\n\n const baseConstructorCall = new Array<string | OTree>();\n if (opts.isConstructor) {\n const superCall = findSuperCall(node.body, renderer);\n if (superCall) {\n baseConstructorCall.push(': base(', this.argumentList(superCall.arguments, renderer), ') ');\n }\n }\n\n const ret = new OTree(\n [\n visibility(node),\n ' ',\n returnType,\n returnType ? ' ' : '',\n methodName,\n '(',\n new OTree([], renderer.convertAll(node.parameters), {\n separator: ', ',\n }),\n ') ',\n ...baseConstructorCall,\n ],\n [renderer.convert(node.body)],\n {\n canBreakLine: true,\n },\n );\n\n return ret;\n }\n\n public override propertyDeclaration(node: ts.PropertyDeclaration, renderer: CSharpRenderer): OTree {\n const vis = visibility(node);\n const propertyOrMethod = vis !== 'private'; // Capitalize non-private fields\n\n if (vis === 'private' || node.initializer) {\n // Emit member field\n return new OTree(\n [\n vis,\n isReadOnly(node) ? ' readonly' : '',\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ...(node.initializer ? [' = ', renderer.convert(node.initializer)] : []),\n ';',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n // Emit property. No functional difference but slightly more idiomatic\n return new OTree(\n [\n vis,\n ' ',\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod }).convert(node.name),\n ' ',\n isReadOnly(node) ? '{ get; }' : '{ get; set; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override printStatement(args: ts.NodeArray<ts.Expression>, renderer: CSharpRenderer) {\n const renderedArgs =\n args.length === 1\n ? renderer.convertAll(args)\n : [\n '$\"',\n new OTree(\n [],\n args.map((a) => new OTree(['{', renderer.convert(a), '}'])),\n { separator: ' ' },\n ),\n '\"',\n ];\n\n return new OTree(['Console.WriteLine(', ...renderedArgs, ')']);\n }\n\n public override superCallExpression(_node: ts.CallExpression, _renderer: CSharpRenderer): OTree {\n // super() call rendered as part of the constructor already\n return NO_SYNTAX;\n }\n\n public override stringLiteral(\n node: ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.stringAsIdentifier) {\n return this.identifier(node, renderer);\n }\n if (node.text.includes('\\n')) {\n // Multi-line string literals (@\"string\") in C# do not do escaping. Only \" needs to be doubled.\n return new OTree(['@\"', node.text.replace(/\"/g, '\"\"'), '\"']);\n }\n return new OTree([JSON.stringify(node.text)]);\n }\n\n public override expressionStatement(node: ts.ExpressionStatement, renderer: CSharpRenderer): OTree {\n const inner = renderer.convert(node.expression);\n if (inner.isEmpty) {\n return inner;\n }\n return new OTree([inner, ';'], [], { canBreakLine: true });\n }\n\n public override propertyAccessExpression(node: ts.PropertyAccessExpression, renderer: CSharpRenderer): OTree {\n const lhs = renderer.textOf(node.expression);\n\n // Suppress the LHS of the dot operator if it's \"this.\" (not necessary in C#)\n // or if it's an imported module reference (C# has namespace-wide imports).\n // Exception: keep \"this.\" when the member, as it will be rendered, is\n // shadowed by a parameter of an enclosing function. This matters for\n // private fields (which keep their camelCase name): in a constructor\n // assigning a same-named field, dropping the qualifier degrades\n // `this.resource = resource` into the self-assignment `resource = resource;`.\n const dropThis = lhs === 'this' && !this.memberShadowedByParameter(node, renderer);\n const objectExpression =\n dropThis || this.dropPropertyAccesses.has(lhs)\n ? []\n : [renderer.updateContext({ propertyOrMethod: false }).convert(node.expression), '.'];\n\n return new OTree([...objectExpression, renderer.updateContext({ propertyOrMethod: true }).convert(node.name)]);\n }\n\n private memberShadowedByParameter(node: ts.PropertyAccessExpression, renderer: CSharpRenderer): boolean {\n const text = node.name.text;\n // The name the member will render as: private properties keep their\n // camelCase name, everything else is PascalCased (see `identifier`).\n const renderedName = renderer.currentContext.privatePropertyNames.includes(text) ? text : ucFirst(text);\n\n for (let current: ts.Node | undefined = node.parent; current != null; current = current.parent) {\n if (\n ts.isFunctionLike(current) &&\n current.parameters.some((p) => ts.isIdentifier(p.name) && p.name.text === renderedName)\n ) {\n return true;\n }\n }\n return false;\n }\n\n public override parameterDeclaration(node: ts.ParameterDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree([\n ...(node.dotDotDotToken ? ['params '] : []), // Varargs. Render with 'params' keyword\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.convert(node.name),\n ...(parameterAcceptsUndefined(node, node.type && renderer.typeOfType(node.type))\n ? ['=', node.initializer ? renderer.convert(node.initializer) : 'null']\n : []),\n ]);\n }\n\n public override propertySignature(node: ts.PropertySignature, renderer: CSharpRenderer): OTree {\n const canSet = renderer.currentContext.inStructInterface || !isReadOnly(node);\n\n return new OTree(\n [\n !renderer.currentContext.inRegularInterface ? `${visibility(node)} ` : NO_SYNTAX,\n this.renderTypeNode(node.type, node.questionToken !== undefined, renderer),\n ' ',\n renderer.updateContext({ propertyOrMethod: true }).convert(node.name),\n ' ',\n canSet ? '{ get; set; }' : '{ get; }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n /**\n * Do some work on property accesses to translate common JavaScript-isms to language-specific idioms\n */\n public override regularCallExpression(node: ts.CallExpression, renderer: CSharpRenderer): OTree {\n return new OTree([\n renderer.updateContext({ propertyOrMethod: true }).convert(node.expression),\n '(',\n this.argumentList(node.arguments, renderer),\n ')',\n ]);\n }\n\n public override classDeclaration(node: ts.ClassDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer\n .updateContext({\n privatePropertyNames: privatePropertyNames(node.members, renderer),\n })\n .convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override structInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['class ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inStructInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override regularInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: CSharpRenderer): OTree {\n return new OTree(\n ['interface ', renderer.convert(node.name), ...this.classHeritage(node, renderer), '\\n{'],\n renderer.updateContext({ inRegularInterface: true }).convertAll(node.members),\n {\n indent: 4,\n canBreakLine: true,\n suffix: '\\n}',\n },\n );\n }\n\n public override block(node: ts.Block, children: CSharpRenderer): OTree {\n return new OTree(['\\n{'], [...children.convertAll(node.statements)], {\n indent: 4,\n suffix: '\\n}',\n });\n }\n\n public override unknownTypeObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n renderer: CSharpRenderer,\n ): OTree {\n if (renderer.currentContext.preferObjectLiteralAsStruct) {\n // Type information missing and from context we prefer a struct\n return new OTree(['new Struct { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n // Type information missing and from context we prefer a map\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n\n public override knownStructObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n structType: ObjectLiteralStruct,\n renderer: CSharpRenderer,\n ): OTree {\n return new OTree(['new ', structType.type.symbol.name, ' { '], renderer.convertAll(node.properties), {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n });\n }\n\n public override keyValueObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: CSharpRenderer): OTree {\n // Try to infer an element type from the elements\n const valueType = inferMapElementType(node.properties, renderer.typeChecker);\n\n return new OTree(\n ['new Dictionary<string, ', this.renderType(node, valueType, false, 'object', renderer), '> { '],\n renderer.updateContext({ inKeyValueList: true }).convertAll(node.properties),\n {\n suffix: renderer.mirrorNewlineBefore(node.properties[0], '}', ' '),\n separator: ', ',\n indent: 4,\n },\n );\n }\n\n public override shorthandPropertyAssignment(node: ts.ShorthandPropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.name, renderer);\n }\n\n public override propertyAssignment(node: ts.PropertyAssignment, renderer: CSharpRenderer): OTree {\n return this.renderPropertyAssignment(node.name, node.initializer, renderer);\n }\n\n public renderPropertyAssignment(key: ts.Node, value: ts.Node, renderer: CSharpRenderer): OTree {\n if (renderer.currentContext.inKeyValueList) {\n return new OTree(\n [\n '{ ',\n renderer\n .updateContext({\n propertyOrMethod: false,\n identifierAsString: !ts.isComputedPropertyName(key),\n })\n .convert(key),\n ', ',\n renderer.updateContext({ inKeyValueList: false }).convert(value),\n ' }',\n ],\n [],\n { canBreakLine: true },\n );\n }\n return new OTree(\n [\n renderer.updateContext({ propertyOrMethod: true, stringAsIdentifier: true }).convert(key),\n ' = ',\n renderer.convert(value),\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override arrayLiteralExpression(node: ts.ArrayLiteralExpression, renderer: CSharpRenderer): OTree {\n return new OTree(['new [] { '], renderer.convertAll(node.elements), {\n separator: ', ',\n suffix: ' }',\n indent: 4,\n });\n }\n\n public override ifStatement(node: ts.IfStatement, renderer: CSharpRenderer): OTree {\n const ifStmt = new OTree(\n ['if (', renderer.convert(node.expression), ') '],\n [renderer.convert(node.thenStatement)],\n { canBreakLine: true },\n );\n const elseStmt = node.elseStatement\n ? new OTree(['else '], [renderer.convert(node.elseStatement)], {\n canBreakLine: true,\n })\n : undefined;\n\n return elseStmt\n ? new OTree([], [ifStmt, elseStmt], {\n separator: '\\n',\n canBreakLine: true,\n })\n : ifStmt;\n }\n\n public override forOfStatement(node: ts.ForOfStatement, renderer: CSharpRenderer): OTree {\n // This is what a \"for (const x of ...)\" looks like in the AST\n let variableName = '???';\n\n matchAst(\n node.initializer,\n nodeOfType(ts.SyntaxKind.VariableDeclarationList, nodeOfType('var', ts.SyntaxKind.VariableDeclaration)),\n (bindings) => {\n variableName = renderer.textOf(bindings.var.name);\n },\n );\n\n return new OTree(\n ['for (var ', variableName, ' in ', renderer.convert(node.expression), ') '],\n [renderer.convert(node.statement)],\n { canBreakLine: true },\n );\n }\n\n public override asExpression(node: ts.AsExpression, context: CSharpRenderer): OTree {\n return new OTree(['(', this.renderTypeNode(node.type, false, context), ')', context.convert(node.expression)]);\n }\n\n public override variableDeclaration(node: ts.VariableDeclaration, renderer: CSharpRenderer): OTree {\n let typeOrVar = 'var';\n\n const fallback = node.type?.getText() ?? 'var';\n const type =\n (node.type && renderer.typeOfType(node.type)) ??\n (node.initializer && renderer.typeOfExpression(node.initializer));\n\n const varType = this.renderType(node, type, false, fallback, renderer);\n // If there is an initializer, and the value isn't \"IDictionary<...\", we always use var, as this is the\n // recommendation from Roslyn.\n if (varType !== 'object' && (varType.startsWith('IDictionary<') || node.initializer == null)) {\n typeOrVar = varType;\n }\n\n if (!node.initializer) {\n return new OTree([typeOrVar, ' ', renderer.convert(node.name), ';']);\n }\n\n return new OTree(\n [\n typeOrVar,\n ' ',\n renderer.convert(node.name),\n ' = ',\n renderer.updateContext({ preferObjectLiteralAsStruct: false }).convert(node.initializer),\n ';',\n ],\n undefined,\n { canBreakLine: true },\n );\n }\n\n public override templateExpression(node: ts.TemplateExpression, context: CSharpRenderer): OTree {\n // If this is a multi-line string literal, we need not quote much, as @\"string\" literals in C#\n // do not perform any quoting. The literal quotes in the text however must be doubled.\n const isMultiLine =\n !!node.head.rawText?.includes('\\n') || node.templateSpans.some((span) => span.literal.rawText?.includes('\\n'));\n\n const parts = new Array<string>();\n if (node.head.rawText) {\n parts.push(isMultiLine ? node.head.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(node.head.rawText));\n }\n for (const span of node.templateSpans) {\n parts.push(`{${context.textOf(span.expression)}}`);\n if (span.literal.rawText) {\n parts.push(isMultiLine ? span.literal.rawText.replace(/\"/g, '\"\"') : quoteStringLiteral(span.literal.rawText));\n }\n }\n\n return new OTree([isMultiLine ? '$@\"' : '$\"', ...parts, '\"']);\n }\n\n protected override argumentList(args: readonly ts.Node[] | undefined, renderer: CSharpRenderer): OTree {\n return new OTree([], args ? renderer.updateContext({ preferObjectLiteralAsStruct: true }).convertAll(args) : [], {\n separator: ', ',\n });\n }\n\n private renderTypeNode(typeNode: ts.TypeNode | undefined, questionMark: boolean, renderer: CSharpRenderer): string {\n if (!typeNode) {\n return 'void';\n }\n return this.renderType(typeNode, renderer.typeOfType(typeNode), questionMark, renderer.textOf(typeNode), renderer);\n }\n\n private renderType(\n typeNode: ts.Node,\n type: ts.Type | undefined,\n questionMark: boolean,\n fallback: string,\n renderer: CSharpRenderer,\n ): string {\n if (type === undefined) {\n return fallback;\n }\n\n const renderedType = doRender(determineJsiiType(renderer.typeChecker, type));\n\n const suffix = questionMark || typeContainsUndefined(type) ? '?' : '';\n\n return renderedType + suffix;\n\n // eslint-disable-next-line consistent-return\n function doRender(jsiiType: JsiiType): string {\n switch (jsiiType.kind) {\n case 'unknown':\n return fallback;\n case 'error':\n renderer.report(typeNode, jsiiType.message);\n return fallback;\n case 'map':\n return `IDictionary<string, ${doRender(jsiiType.elementType)}>`;\n case 'list':\n return `${doRender(jsiiType.elementType)}[]`;\n case 'intersection':\n const renderedBranches = jsiiType.branches.map(doRender);\n return `${renderedBranches[0]} /* & ${renderedBranches.slice(1).join(' & ')} */`;\n case 'namedType':\n return jsiiType.name;\n case 'builtIn':\n switch (jsiiType.builtIn) {\n case 'boolean':\n return 'boolean';\n case 'number':\n return 'int';\n case 'string':\n return 'string';\n case 'any':\n return 'object';\n case 'void':\n return 'void';\n }\n }\n }\n }\n\n private classHeritage(node: ts.ClassDeclaration | ts.InterfaceDeclaration, renderer: CSharpRenderer) {\n const heritage = flat(Array.from(node.heritageClauses ?? []).map((h) => Array.from(h.types))).map((t) =>\n renderer.convert(t.expression),\n );\n\n return heritage.length > 0 ? [' : ', new OTree([], heritage, { separator: ', ' })] : [];\n }\n}\n\n/**\n * Uppercase the first letter\n */\nfunction ucFirst(x: string) {\n return x.slice(0, 1).toUpperCase() + x.slice(1);\n}\n\n/**\n * Find the Java name of a module or type\n */\nfunction findDotnetName(jsiiSymbol: JsiiSymbol): string | undefined {\n if (!jsiiSymbol.sourceAssembly?.assembly) {\n // Don't have accurate info, just guess\n return jsiiSymbol.symbolType !== 'module' ? simpleName(jsiiSymbol.fqn) : guessDotnetNamespace(jsiiSymbol.fqn);\n }\n\n const asm = jsiiSymbol.sourceAssembly?.assembly;\n return recurse(jsiiSymbol.fqn);\n\n function recurse(fqn: string): string {\n if (fqn === asm.name) {\n return jsiiTargetParameter(asm, 'dotnet.namespace') ?? guessDotnetNamespace(fqn);\n }\n if (asm.submodules?.[fqn]) {\n const modName = jsiiTargetParameter(asm.submodules[fqn], 'dotnet.namespace');\n if (modName) {\n return modName;\n }\n }\n\n return `${recurse(namespaceName(fqn))}.${ucFirst(simpleName(jsiiSymbol.fqn))}`;\n }\n}\n\nfunction guessDotnetNamespace(ref: string) {\n return ref\n .split(/[^a-zA-Z0-9]+/g)\n .filter((s) => s !== '')\n .map(ucFirst)\n .join('.');\n}\n"]}
@@ -48,7 +48,7 @@ export declare class GoVisitor extends DefaultVisitor<GoLanguageContext> {
48
48
  * Bump this when you change something in the implementation to invalidate
49
49
  * existing cached translations.
50
50
  */
51
- static readonly VERSION = "1";
51
+ static readonly VERSION = "2";
52
52
  readonly indentChar = "\t";
53
53
  readonly language = TargetLanguage.GO;
54
54
  private readonly idMap;
@@ -136,10 +136,12 @@ class GoVisitor extends default_1.DefaultVisitor {
136
136
  return new o_tree_1.OTree([this.goName(node.text, renderer, symbol)]);
137
137
  }
138
138
  newExpression(node, renderer) {
139
- const { classNamespace, className } = determineClassName.call(this, node.expression);
139
+ const { classNamespace, className, unexported } = determineClassName.call(this, node.expression);
140
140
  return new o_tree_1.OTree([
141
141
  ...(classNamespace ? [classNamespace, '.'] : []),
142
- 'New', // Should this be "new" if the class is unexported?
142
+ // Constructors of unexported (snippet-local) classes render unexported
143
+ // (see constructorDeclaration) — the call site must match.
144
+ unexported ? 'new' : 'New',
143
145
  className,
144
146
  '(',
145
147
  ], renderer.updateContext({ wrapPtr: true }).convertAll(node.arguments ?? []), { canBreakLine: true, separator: ', ', suffix: ')' });
@@ -158,7 +160,17 @@ class GoVisitor extends default_1.DefaultVisitor {
158
160
  className: this.goName((declaration.propertyName ?? declaration.name).text, renderer.updateContext({ isExported: true }), symbol),
159
161
  };
160
162
  }
161
- return { className: ucFirst(expr.text) };
163
+ // A snippet-local class renders an unexported constructor. Classes
164
+ // that model library types (jsii-resolvable, incl. 'fake-from-jsii'
165
+ // test fixtures) keep the exported naming even when declared
166
+ // unexported in the snippet.
167
+ const classDeclaration = symbol?.declarations?.find(ts.isClassDeclaration);
168
+ return {
169
+ className: ucFirst(expr.text),
170
+ unexported: classDeclaration != null &&
171
+ !(0, ast_utils_1.isExported)(classDeclaration) &&
172
+ (0, jsii_utils_1.lookupJsiiSymbolFromNode)(renderer.typeChecker, expr) == null,
173
+ };
162
174
  }
163
175
  if (ts.isPropertyAccessExpression(expr)) {
164
176
  if (ts.isIdentifier(expr.expression)) {
@@ -455,13 +467,23 @@ class GoVisitor extends default_1.DefaultVisitor {
455
467
  binaryExpression(node, renderer) {
456
468
  if (node.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
457
469
  const symbol = symbolFor(renderer.typeChecker, node.left);
470
+ // What the right-hand side must be follows from how the left-hand side
471
+ // *renders*, and that differs between the two pointer-valued
472
+ // declarations. A property renders as the pointer field itself
473
+ // (`this.env`), so the RHS has to be a pointer: leave a pointer
474
+ // undereferenced, and wrap a literal — `this.env = "production"` needs
475
+ // `jsii.String("production")`. A parameter renders dereferenced (`*name`,
476
+ // see goName at the bottom of this file), so the target is a value and
477
+ // the RHS has to be one too — exactly the opposite of a property.
478
+ const target = symbol?.valueDeclaration;
479
+ const targetRendersAsPointer = target != null && ts.isPropertyDeclaration(target);
458
480
  return new o_tree_1.OTree([
459
481
  renderer.convert(node.left),
460
482
  ' = ',
461
483
  renderer
462
484
  .updateContext({
463
- isPtrAssignmentRValue: symbol?.valueDeclaration &&
464
- (ts.isParameter(symbol.valueDeclaration) || ts.isPropertyDeclaration(symbol.valueDeclaration)),
485
+ isPtrAssignmentRValue: targetRendersAsPointer,
486
+ wrapPtr: targetRendersAsPointer,
465
487
  })
466
488
  .convert(node.right),
467
489
  ]);
@@ -781,7 +803,7 @@ exports.GoVisitor = GoVisitor;
781
803
  * Bump this when you change something in the implementation to invalidate
782
804
  * existing cached translations.
783
805
  */
784
- GoVisitor.VERSION = '1';
806
+ GoVisitor.VERSION = '2';
785
807
  /**
786
808
  * Uppercase the first letter
787
809
  */
@@ -1 +1 @@
1
- {"version":3,"file":"go.js","sourceRoot":"","sources":["../../src/languages/go.ts"],"names":[],"mappings":"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","sourcesContent":["// import { JsiiSymbol, simpleName, namespaceName } from '../jsii/jsii-utils';\n// import { jsiiTargetParameter } from '../jsii/packages';\nimport { AssertionError } from 'node:assert';\nimport * as ts from 'typescript';\n\nimport { DefaultVisitor } from './default';\nimport { TargetLanguage } from './target-language';\nimport { analyzeObjectLiteral, determineJsiiType, JsiiType, ObjectLiteralStruct } from '../jsii/jsii-types';\nimport { lookupJsiiSymbolFromNode } from '../jsii/jsii-utils';\nimport { OTree } from '../o-tree';\nimport { AstRenderer } from '../renderer';\nimport { SubmoduleReference } from '../submodule-reference';\nimport { isExported, isPublic, isPrivate, isReadOnly, isStatic } from '../typescript/ast-utils';\nimport { analyzeImportDeclaration, ImportStatement } from '../typescript/imports';\nimport {\n determineReturnType,\n inferMapElementType,\n inferredTypeOfExpression,\n typeOfExpression,\n} from '../typescript/types';\n\ninterface GoLanguageContext {\n /**\n * Free floating symbols are made importable across packages by naming with a capital in Go.\n */\n isExported: boolean;\n\n /**\n * Whether type should be converted a pointer type\n */\n isPtr: boolean;\n\n /**\n * Whether this is the R-Value in an assignment expression to a pointer value.\n */\n isPtrAssignmentRValue: boolean;\n\n /**\n * Whether the current element is a parameter delcaration name.\n */\n isParameterName: boolean;\n\n /**\n * Whether context is within a struct declaration\n */\n isStruct: boolean;\n\n /**\n * Whether the context is within an interface delcaration.\n */\n isInterface: boolean;\n\n /**\n * Whether properties are being intialized within a `map` type\n */\n inMapLiteral: boolean;\n\n /**\n * Wheter to wrap a literal in a pointer constructor ie: jsii.String.\n */\n wrapPtr: boolean;\n}\n\nenum DeclarationType {\n STRUCT,\n INTERFACE,\n FUNCTION,\n BUILTIN,\n UNKNOWN,\n}\n\ntype GoRenderer = AstRenderer<GoLanguageContext>;\n\ninterface FormattedId {\n readonly type: DeclarationType;\n readonly formatted: string;\n}\nexport class GoVisitor extends DefaultVisitor<GoLanguageContext> {\n /**\n * Translation version\n *\n * Bump this when you change something in the implementation to invalidate\n * existing cached translations.\n */\n public static readonly VERSION = '1';\n\n public readonly indentChar = '\\t';\n\n public readonly language = TargetLanguage.GO;\n\n private readonly idMap = new Map<ts.Symbol | string, FormattedId>();\n\n public readonly defaultContext: GoLanguageContext = {\n isExported: false,\n isPtr: false,\n isPtrAssignmentRValue: false,\n isStruct: false,\n isInterface: false,\n isParameterName: false,\n inMapLiteral: false,\n wrapPtr: false,\n };\n\n protected override argumentList(args: readonly ts.Node[] | undefined, renderer: GoRenderer): OTree {\n return new OTree([], args ? renderer.convertAll(args) : [], {\n separator: ', ',\n });\n }\n\n public override block(node: ts.Block, renderer: GoRenderer): OTree {\n return new OTree(['{'], renderer.convertAll(node.statements), {\n indent: 1,\n suffix: renderer.mirrorNewlineBefore(node.statements[0], '}'),\n });\n }\n\n public override expressionStatement(node: ts.ExpressionStatement, renderer: GoRenderer): OTree {\n const inner = renderer.convert(node.expression);\n if (inner.isEmpty) {\n return inner;\n }\n return new OTree([inner], [], { canBreakLine: true });\n }\n\n public override functionDeclaration(node: ts.FunctionDeclaration, renderer: GoRenderer): OTree {\n const funcName = renderer.updateContext({ isExported: isExported(node) }).convert(node.name);\n const returnType = determineReturnType(renderer.typeChecker, node);\n const goType = this.renderType(node.type ?? node, returnType?.symbol, returnType, true, '', renderer);\n\n const body = node.body?.statements ? renderer.convertAll(node.body.statements) : [];\n return new OTree(\n [\n 'func ',\n funcName,\n '(',\n new OTree([], renderer.updateContext({ isPtr: true }).convertAll(node.parameters), {\n separator: ', ',\n }),\n ')',\n goType ? ' ' : '',\n goType,\n ],\n [\n new OTree(\n [' {'],\n [this.defaultArgValues(node.parameters, renderer.updateContext({ wrapPtr: true })), ...body],\n {\n indent: 1,\n suffix: '\\n}',\n },\n ),\n ],\n {\n canBreakLine: true,\n },\n );\n }\n\n public override identifier(\n node: ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: GoRenderer,\n ) {\n const symbol = renderer.typeChecker.getSymbolAtLocation(node);\n\n // If the identifier corresponds to a renamed imported symbol, we need to use the original symbol name, qualified\n // with the import package name, since Go does not allow generalized symbol aliasing (we *could* alias types, but\n // not static functions or constructors).\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (declaration && ts.isImportSpecifier(declaration)) {\n const importInfo = analyzeImportDeclaration(declaration.parent.parent.parent, renderer);\n const packageName =\n importInfo.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.packageName ??\n this.goName(importInfo.packageName, renderer, undefined);\n\n const importedSymbol = declaration.propertyName\n ? renderer.typeChecker.getSymbolAtLocation(declaration.propertyName)\n : symbol;\n // Note: imported members are (by nature) always exported by the module they are imported from.\n return new OTree([\n packageName,\n '.',\n this.goName(\n (declaration.propertyName ?? declaration.name).text,\n renderer.updateContext({ isExported: true }),\n importedSymbol,\n ),\n ]);\n }\n\n return new OTree([this.goName(node.text, renderer, symbol)]);\n }\n\n public override newExpression(node: ts.NewExpression, renderer: GoRenderer): OTree {\n const { classNamespace, className } = determineClassName.call(this, node.expression);\n return new OTree(\n [\n ...(classNamespace ? [classNamespace, '.'] : []),\n 'New', // Should this be \"new\" if the class is unexported?\n className,\n '(',\n ],\n renderer.updateContext({ wrapPtr: true }).convertAll(node.arguments ?? []),\n { canBreakLine: true, separator: ', ', suffix: ')' },\n );\n\n function determineClassName(this: GoVisitor, expr: ts.Expression): { classNamespace?: OTree; className: string } {\n if (ts.isIdentifier(expr)) {\n // Imported names are referred to by the original (i.e: exported) name, qualified with the source module's go\n // package name.\n const symbol = renderer.typeChecker.getSymbolAtLocation(expr);\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (declaration && ts.isImportSpecifier(declaration)) {\n const importInfo = analyzeImportDeclaration(declaration.parent.parent.parent, renderer);\n const packageName =\n importInfo.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.packageName ??\n this.goName(importInfo.packageName, renderer, undefined);\n\n return {\n classNamespace: new OTree([packageName]),\n className: this.goName(\n (declaration.propertyName ?? declaration.name).text,\n renderer.updateContext({ isExported: true }),\n symbol,\n ),\n };\n }\n\n return { className: ucFirst(expr.text) };\n }\n if (ts.isPropertyAccessExpression(expr)) {\n if (ts.isIdentifier(expr.expression)) {\n return {\n className: ucFirst(expr.name.text),\n classNamespace: renderer.updateContext({ isExported: false }).convert(expr.expression),\n };\n } else if (\n ts.isPropertyAccessExpression(expr.expression) &&\n renderer.submoduleReferences.has(expr.expression)\n ) {\n const submodule = renderer.submoduleReferences.get(expr.expression)!;\n return {\n className: ucFirst(expr.name.text),\n classNamespace: renderer.updateContext({ isExported: false }).convert(submodule.lastNode),\n };\n }\n renderer.reportUnsupported(expr.expression, TargetLanguage.GO);\n return {\n className: ucFirst(expr.name.text),\n classNamespace: new OTree(['#error#']),\n };\n }\n renderer.reportUnsupported(expr, TargetLanguage.GO);\n return { className: expr.getText(expr.getSourceFile()) };\n }\n }\n\n public override arrayLiteralExpression(\n node: ts.ArrayLiteralExpression,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n const arrayType =\n inferredTypeOfExpression(renderer.typeChecker, node) ?? renderer.typeChecker.getTypeAtLocation(node);\n const [elementType] = renderer.typeChecker.getTypeArguments(arrayType as ts.TypeReference);\n const typeName = elementType\n ? this.renderType(node, elementType.symbol, elementType, true, 'interface{}', renderer)\n : 'interface{}';\n\n return new OTree(['[]', typeName, '{'], renderer.convertAll(node.elements), {\n separator: ',',\n trailingSeparator: true,\n suffix: '}',\n indent: 1,\n });\n }\n\n public override objectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: GoRenderer): OTree {\n const lit = analyzeObjectLiteral(renderer.typeChecker, node);\n\n switch (lit.kind) {\n case 'unknown':\n return this.unknownTypeObjectLiteralExpression(node, renderer);\n case 'struct':\n case 'local-struct':\n return this.knownStructObjectLiteralExpression(node, lit, renderer);\n case 'map':\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n }\n\n public override propertyAssignment(node: ts.PropertyAssignment, renderer: GoRenderer): OTree {\n const key =\n ts.isStringLiteralLike(node.name) || ts.isIdentifier(node.name)\n ? renderer.currentContext.inMapLiteral\n ? JSON.stringify(node.name.text)\n : this.goName(node.name.text, renderer, renderer.typeChecker.getSymbolAtLocation(node.name))\n : renderer.convert(node.name);\n return new OTree(\n [\n key,\n ': ',\n renderer\n .updateContext({\n // Reset isExported, as this was intended for the key name translation...\n isExported: undefined,\n // Struct member values are always pointers...\n isPtr: renderer.currentContext.isStruct,\n wrapPtr: renderer.currentContext.isStruct || renderer.currentContext.inMapLiteral,\n })\n .convert(node.initializer),\n ],\n [],\n {\n canBreakLine: true,\n },\n );\n }\n\n public override shorthandPropertyAssignment(\n node: ts.ShorthandPropertyAssignment,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n const key =\n ts.isStringLiteralLike(node.name) || ts.isIdentifier(node.name)\n ? renderer.currentContext.inMapLiteral\n ? JSON.stringify(node.name.text)\n : this.goName(node.name.text, renderer, renderer.typeChecker.getSymbolAtLocation(node.name))\n : renderer.convert(node.name);\n\n const rawValue = renderer.updateContext({ wrapPtr: true, isStruct: false }).convert(node.name);\n const value = isPointerValue(renderer.typeChecker, node.name)\n ? rawValue\n : wrapPtrExpression(renderer.typeChecker, node.name, rawValue);\n\n return new OTree([key, ': ', value], [], { canBreakLine: true });\n }\n\n public override templateExpression(node: ts.TemplateExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n let template = '';\n const parameters = new Array<OTree>();\n\n if (node.head.rawText) {\n template += node.head.rawText;\n }\n\n for (const span of node.templateSpans) {\n template += '%v';\n parameters.push(renderer.convert(span.expression));\n if (span.literal.rawText) {\n template += span.literal.rawText;\n }\n }\n\n if (parameters.length === 0) {\n return new OTree([JSON.stringify(template)]);\n }\n\n return new OTree(\n ['fmt.Sprintf('],\n [\n JSON.stringify(template),\n ...parameters.reduce((list, element) => list.concat(', ', element), new Array<string | OTree>()),\n ],\n {\n canBreakLine: true,\n suffix: ')',\n },\n );\n }\n\n public override token<A extends ts.SyntaxKind>(node: ts.Token<A>, renderer: GoRenderer): OTree {\n switch (node.kind) {\n case ts.SyntaxKind.FalseKeyword:\n case ts.SyntaxKind.TrueKeyword:\n if (renderer.currentContext.wrapPtr) {\n return new OTree(['jsii.Boolean(', node.getText(), ')']);\n }\n return new OTree([node.getText()]);\n\n case ts.SyntaxKind.NullKeyword:\n case ts.SyntaxKind.UndefinedKeyword:\n return new OTree(['nil']);\n default:\n return super.token(node, renderer);\n }\n }\n\n public override unknownTypeObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: GoRenderer): OTree {\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n\n public override keyValueObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: GoRenderer): OTree {\n const valueType = inferMapElementType(node.properties, renderer.typeChecker);\n\n return new OTree(\n [`map[string]`, this.renderType(node, valueType?.symbol, valueType, true, `interface{}`, renderer), `{`],\n renderer.updateContext({ inMapLiteral: true, wrapPtr: true }).convertAll(node.properties),\n {\n suffix: '}',\n separator: ',',\n trailingSeparator: true,\n indent: 1,\n },\n );\n }\n\n public override knownStructObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n structType: ObjectLiteralStruct,\n renderer: GoRenderer,\n ): OTree {\n const exported = structType.kind === 'struct';\n return new OTree(\n [\n '&',\n this.goName(\n structType.type.symbol.name,\n renderer.updateContext({ isExported: exported, isPtr: false }),\n structType.type.symbol,\n ),\n '{',\n ],\n renderer.updateContext({ isExported: exported, isStruct: true }).convertAll(node.properties),\n {\n suffix: '}',\n separator: ',',\n trailingSeparator: true,\n indent: 1,\n },\n );\n }\n\n public override asExpression(node: ts.AsExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n const jsiiType = determineJsiiType(renderer.typeChecker, renderer.typeChecker.getTypeFromTypeNode(node.type));\n switch (jsiiType.kind) {\n case 'builtIn':\n switch (jsiiType.builtIn) {\n case 'boolean':\n return new OTree(['bool(', renderer.convert(node.expression), ')'], [], { canBreakLine: true });\n case 'number':\n return new OTree(['f64(', renderer.convert(node.expression), ')'], [], { canBreakLine: true });\n case 'string':\n return new OTree(['string(', renderer.convert(node.expression), ')'], [], { canBreakLine: true });\n case 'any':\n case 'void':\n // Just return the value as-is... Everything is compatible with `interface{}`.\n return renderer.convert(node.expression);\n }\n // To make linter understand there is no fall-through here...\n throw new AssertionError({ message: 'unreachable' });\n default:\n return new OTree(\n [renderer.convert(node.expression), '.(', this.renderTypeNode(node.type, false, renderer), ')'],\n [],\n { canBreakLine: true },\n );\n }\n }\n\n public override parameterDeclaration(node: ts.ParameterDeclaration, renderer: GoRenderer): OTree {\n const nodeName = renderer.updateContext({ isParameterName: true, isPtr: false }).convert(node.name);\n const nodeType = node.dotDotDotToken ? (node.type as ts.ArrayTypeNode | undefined)?.elementType : node.type;\n const typeNode = this.renderTypeNode(nodeType, true, renderer);\n return new OTree([...(node.dotDotDotToken ? ['...'] : []), nodeName, ' ', typeNode]);\n }\n\n public override printStatement(args: ts.NodeArray<ts.Expression>, renderer: GoRenderer): OTree {\n const renderedArgs = this.argumentList(args, renderer);\n return new OTree(['fmt.Println(', renderedArgs, ')']);\n }\n\n public override propertyAccessExpression(\n node: ts.PropertyAccessExpression,\n renderer: GoRenderer,\n submoduleReference?: SubmoduleReference,\n ): OTree {\n if (submoduleReference != null) {\n return new OTree([\n renderer\n .updateContext({ isExported: false, isPtr: false, wrapPtr: false })\n .convert(submoduleReference.lastNode),\n ]);\n }\n\n const expressionType = typeOfExpression(renderer.typeChecker, node.expression);\n const valueSymbol = renderer.typeChecker.getSymbolAtLocation(node.name);\n\n const isStaticMember = valueSymbol?.valueDeclaration != null && isStatic(valueSymbol.valueDeclaration);\n const isClassStaticPropertyAccess =\n isStaticMember &&\n expressionType?.symbol?.valueDeclaration != null &&\n valueSymbol.valueDeclaration != null &&\n ts.isClassDeclaration(expressionType.symbol.valueDeclaration) &&\n (ts.isPropertyDeclaration(valueSymbol.valueDeclaration) || ts.isAccessor(valueSymbol.valueDeclaration));\n const isClassStaticMethodAccess =\n isStaticMember &&\n !isClassStaticPropertyAccess &&\n valueSymbol.valueDeclaration != null &&\n ts.isMethodDeclaration(valueSymbol.valueDeclaration);\n\n // When the expression has an unknown type (unresolved symbol), has an upper-case first letter,\n // and doesn't end in a call expression (as hinted by the presence of parentheses), we assume\n // it's a type name... In such cases, what comes after can be considered a static member access.\n // Note that the expression might be further qualified, so we check using a regex that checks\n // for the last \".\" - delimited segment if there's dots in there...\n const expressionLooksLikeTypeReference =\n expressionType.symbol == null &&\n /(?:\\.|^)[A-Z][^.)]*$/.exec(node.expression.getText(node.expression.getSourceFile())) != null;\n\n // Whether the node is an enum member reference.\n const isEnumMember =\n expressionType?.symbol?.valueDeclaration != null && ts.isEnumDeclaration(expressionType.symbol.valueDeclaration);\n\n const jsiiSymbol = lookupJsiiSymbolFromNode(renderer.typeChecker, node.name);\n const isExportedTypeName = jsiiSymbol != null && jsiiSymbol.symbolType !== 'module';\n\n const delimiter =\n isEnumMember || isClassStaticPropertyAccess || isClassStaticMethodAccess || expressionLooksLikeTypeReference\n ? '_'\n : '.';\n\n return new OTree([\n renderer.convert(node.expression),\n delimiter,\n renderer\n .updateContext({\n isExported:\n isClassStaticPropertyAccess ||\n isClassStaticMethodAccess ||\n expressionLooksLikeTypeReference ||\n isEnumMember ||\n isExportedTypeName,\n })\n .convert(node.name),\n ...(isClassStaticPropertyAccess\n ? ['()']\n : // If the parent's not a call-like expression, and it's an inferred static property access, we need to put call\n // parentheses at the end, as static properties are accessed via synthetic readers.\n expressionLooksLikeTypeReference && findUp(node, ts.isCallLikeExpression) == null\n ? ['()']\n : []),\n ]);\n }\n\n public override methodSignature(node: ts.MethodSignature, renderer: AstRenderer<GoLanguageContext>): OTree {\n const type = this.renderTypeNode(node.type, true, renderer);\n return new OTree(\n [\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n '(',\n ],\n renderer.convertAll(node.parameters),\n { suffix: `) ${type}`, canBreakLine: true },\n );\n }\n\n public override propertyDeclaration(node: ts.PropertyDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n return new OTree(\n [\n renderer\n .updateContext({ isExported: (renderer.currentContext.isExported && isPublic(node)) || isStatic(node) })\n .convert(node.name),\n ' ',\n this.renderTypeNode(node.type, true, renderer),\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override propertySignature(node: ts.PropertySignature, renderer: GoRenderer): OTree {\n if (renderer.currentContext.isInterface) {\n const type = this.renderTypeNode(node.type, true, renderer);\n const getter = new OTree([\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n '() ',\n type,\n ]);\n if (isReadOnly(node)) {\n return getter;\n }\n const setter = new OTree([\n '\\n',\n renderer.currentContext.isExported && isPublic(node) ? 'Set' : 'set',\n renderer.updateContext({ isExported: true }).convert(node.name),\n '(value ',\n type,\n ')',\n ]);\n return new OTree([getter, setter]);\n }\n\n return new OTree([\n '\\n',\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n ' ',\n this.renderTypeNode(node.type, renderer.currentContext.isPtr, renderer),\n ]);\n }\n\n public override regularCallExpression(node: ts.CallExpression, renderer: GoRenderer): OTree {\n return new OTree([\n renderer.convert(node.expression),\n '(',\n this.argumentList(node.arguments, renderer.updateContext({ wrapPtr: true })),\n ')',\n ]);\n }\n\n public override returnStatement(node: ts.ReturnStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n return new OTree(['return ', renderer.updateContext({ wrapPtr: true }).convert(node.expression)], [], {\n canBreakLine: true,\n });\n }\n\n public override binaryExpression(node: ts.BinaryExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n if (node.operatorToken.kind === ts.SyntaxKind.EqualsToken) {\n const symbol = symbolFor(renderer.typeChecker, node.left);\n return new OTree([\n renderer.convert(node.left),\n ' = ',\n renderer\n .updateContext({\n isPtrAssignmentRValue:\n symbol?.valueDeclaration &&\n (ts.isParameter(symbol.valueDeclaration) || ts.isPropertyDeclaration(symbol.valueDeclaration)),\n })\n .convert(node.right),\n ]);\n }\n\n const output = super.binaryExpression(node, renderer.updateContext({ wrapPtr: false, isPtr: false }));\n if (!renderer.currentContext.wrapPtr) {\n return output;\n }\n return wrapPtrExpression(renderer.typeChecker, node, output);\n }\n\n public override stringLiteral(\n node: ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: GoRenderer,\n ): OTree {\n // Go supports backtick-delimited multi-line string literals, similar/same as JavaScript no-substitution templates.\n // We only use this trick if the literal includes actual new line characters (otherwise it just looks weird in go).\n const text =\n ts.isNoSubstitutionTemplateLiteral(node) && /[\\n\\r]/m.test(node.text)\n ? node.getText(node.getSourceFile())\n : JSON.stringify(node.text);\n\n return new OTree([`${renderer.currentContext.wrapPtr ? jsiiStr(text) : text}`]);\n }\n\n public override numericLiteral(node: ts.NumericLiteral, renderer: GoRenderer): OTree {\n const text = `${node.text}`;\n\n return new OTree([`${renderer.currentContext.wrapPtr ? jsiiNum(text) : text}`]);\n }\n\n public override classDeclaration(node: ts.ClassDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n const className = node.name\n ? renderer.updateContext({ isExported: isExported(node) }).convert(node.name)\n : 'anonymous';\n\n const extendsClause = node.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword);\n const base = extendsClause && this.renderTypeNode(extendsClause.types[0], false, renderer);\n\n const properties = node.members\n .filter(ts.isPropertyDeclaration)\n .map((prop) => renderer.updateContext({ isStruct: true, isPtr: true }).convert(prop));\n\n const struct = new OTree(['type ', className, ' struct {'], [...(base ? ['\\n', base] : []), ...properties], {\n canBreakLine: true,\n suffix: properties.length > 0 ? renderer.mirrorNewlineBefore(node.members[0], '}') : '\\n}',\n indent: 1,\n });\n\n const methods = [\n node.members.length > 0\n ? // Ensure there is a blank line between thre struct and the first member, but don't put two if there's already\n // one as part of the first member's leading trivia.\n new OTree(['\\n\\n'], [], { renderOnce: `ws-${node.members[0].getFullStart()}` })\n : '',\n ...renderer.convertAll(\n node.members.filter((member) => !ts.isPropertyDeclaration(member) || (isExported(node) && !isPrivate(member))),\n ),\n ];\n\n return new OTree([struct], methods, { canBreakLine: true });\n }\n\n public override structInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: GoRenderer): OTree {\n const bases =\n node.heritageClauses?.flatMap((hc) => hc.types).map((t) => this.renderTypeNode(t, false, renderer)) ?? [];\n return new OTree(\n ['type ', renderer.updateContext({ isStruct: true }).convert(node.name), ' struct {'],\n [...bases, ...renderer.updateContext({ isStruct: true, isPtr: true }).convertAll(node.members)],\n { indent: 1, canBreakLine: true, separator: '\\n', trailingSeparator: true, suffix: '}' },\n );\n }\n\n public override regularInterfaceDeclaration(\n node: ts.InterfaceDeclaration,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n if (node.members.length === 0) {\n // Erase empty interfaces as they have no bearing in Go\n return new OTree([]);\n }\n\n const symbol = renderer.typeChecker.getSymbolAtLocation(node.name);\n const name = this.goName(node.name.text, renderer.updateContext({ isExported: isExported(node) }), symbol);\n return new OTree(\n [`type ${name} interface {`],\n renderer.updateContext({ isInterface: true, isExported: isExported(node) }).convertAll(node.members),\n { indent: 1, canBreakLine: true, separator: '\\n', trailingSeparator: true, suffix: '}' },\n );\n }\n\n public override constructorDeclaration(\n node: ts.ConstructorDeclaration,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n const className = node.parent.name\n ? this.goName(\n node.parent.name.text,\n renderer.updateContext({ isExported: isExported(node.parent) }),\n renderer.typeChecker.getSymbolAtLocation(node.parent.name),\n )\n : 'anonymous';\n\n const defaultArgValues = this.defaultArgValues(node.parameters, renderer);\n\n return new OTree(\n [\n 'func ',\n isExported(node.parent) ? 'New' : 'new',\n ucFirst(className),\n '(',\n new OTree([], renderer.convertAll(node.parameters), { separator: ', ' }),\n ') *',\n className,\n ' {',\n new OTree([], [defaultArgValues, '\\nthis := &', className, '{}'], {\n indent: 1,\n }),\n ],\n node.body ? renderer.convertAll(node.body.statements) : [],\n { canBreakLine: true, suffix: '\\n\\treturn this\\n}', indent: 1 },\n );\n }\n\n public override superCallExpression(node: ts.CallExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n // We're on a `super` call, so we must be extending a base class.\n const base = findUp(node, ts.isConstructorDeclaration)!.parent.heritageClauses!.find(\n (clause) => clause.token === ts.SyntaxKind.ExtendsKeyword,\n )!.types[0].expression;\n const baseConstructor = ts.isPropertyAccessExpression(base)\n ? new OTree([\n renderer.convert(base.expression),\n '.New',\n ucFirst(this.goName(base.name.text, renderer, renderer.typeChecker.getSymbolAtLocation(base.name))),\n ])\n : ts.isIdentifier(base)\n ? `new${ucFirst(this.goName(base.text, renderer, renderer.typeChecker.getSymbolAtLocation(base)))}`\n : (function () {\n renderer.reportUnsupported(node, TargetLanguage.GO);\n return renderer.convert(base);\n })();\n\n return new OTree(\n [\n baseConstructor,\n '_Override(this, ',\n this.argumentList(node.arguments, renderer.updateContext({ wrapPtr: true, isPtr: true })),\n ')',\n ],\n [],\n {\n canBreakLine: true,\n },\n );\n }\n\n public override methodDeclaration(node: ts.MethodDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n if (ts.isObjectLiteralExpression(node.parent)) {\n return super.methodDeclaration(node, renderer);\n }\n\n const className = node.parent.name\n ? this.goName(\n node.parent.name.text,\n renderer.updateContext({ isExported: isExported(node.parent) }),\n renderer.typeChecker.getSymbolAtLocation(node.parent.name),\n )\n : 'anonymous';\n\n const returnType = determineReturnType(renderer.typeChecker, node);\n const goReturnType =\n returnType && this.renderType(node.type ?? node, returnType.symbol, returnType, true, 'interface{}', renderer);\n\n return new OTree(\n [\n 'func (this *',\n className,\n ') ',\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n '(',\n new OTree([], renderer.convertAll(node.parameters), { separator: ', ' }),\n ') ',\n goReturnType,\n goReturnType ? ' ' : '',\n '{',\n ],\n [\n this.defaultArgValues(node.parameters, renderer),\n ...(node.body ? renderer.convertAll(node.body.statements) : []),\n ],\n { canBreakLine: true, suffix: node.body && node.body.statements.length > 0 ? '\\n}' : '}', indent: 1 },\n );\n }\n\n public override ifStatement(node: ts.IfStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n const [ifPrefix, ifSuffix, ifIndent] = ts.isBlock(node.thenStatement) ? [' '] : [' {\\n', '\\n}', 1];\n const ifStmt = new OTree(\n ['if ', renderer.convert(node.expression)],\n [ifPrefix, renderer.convert(node.thenStatement)],\n {\n canBreakLine: true,\n suffix: ifSuffix,\n indent: ifIndent,\n },\n );\n if (!node.elseStatement) {\n return ifStmt;\n }\n\n const [elsePrefix, elseSuffix, elseIndent] = ts.isBlock(node.elseStatement) ? [' '] : [' {\\n', '\\n}', 1];\n const elseStmt = new OTree(['else'], [elsePrefix, renderer.convert(node.elseStatement)], {\n canBreakLine: true,\n suffix: elseSuffix,\n indent: elseIndent,\n });\n\n return new OTree([], [ifStmt, elseStmt], {\n separator: ' ',\n canBreakLine: true,\n });\n }\n\n public override forOfStatement(node: ts.ForOfStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n const [prefix, suffix, indent] = ts.isBlock(node.statement) ? [' '] : [' {\\n', '\\n}', 1];\n return new OTree(\n ['for _, ', nameOf(node.initializer), ' := range ', renderer.convert(node.expression)],\n [prefix, renderer.convert(node.statement)],\n { canBreakLine: true, suffix, indent },\n );\n\n function nameOf(decl: ts.ForInitializer | ts.Declaration): string | OTree {\n if (ts.isVariableDeclarationList(decl)) {\n if (decl.declarations.length !== 1) {\n renderer.reportUnsupported(decl.declarations[1], TargetLanguage.GO);\n }\n return nameOf(decl.declarations[0]);\n }\n if (ts.isVariableDeclaration(decl)) {\n return decl.name.getText(decl.name.getSourceFile());\n }\n renderer.reportUnsupported(decl, TargetLanguage.GO);\n return renderer.convert(decl);\n }\n }\n\n public override importStatement(node: ImportStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n const packageName =\n node.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.packageName ??\n node.packageName\n // Special case namespaced npm package names, so they are mangled the same way pacmak does.\n .replace(/@([a-z0-9_-]+)\\/([a-z0-9_-])/, '$1$2')\n .split('/')\n .map((txt) => this.goName(txt, renderer, undefined))\n .filter((txt) => txt !== '')\n .join('/');\n const moduleName = node.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.moduleName\n ? `${node.moduleSymbol.sourceAssembly.packageJson.jsii.targets.go.moduleName}/${packageName}`\n : `github.com/aws-samples/dummy/${packageName}`;\n\n if (node.imports.import === 'full') {\n // We don't emit the alias if it matches the last path segment (conventionally this is the package name)\n const maybeAlias = node.imports.alias ? `${this.goName(node.imports.alias, renderer, undefined)} ` : '';\n\n return new OTree([`import ${maybeAlias}${JSON.stringify(moduleName)}`], undefined, { canBreakLine: true });\n }\n\n if (node.imports.elements.length === 0) {\n // This is a blank import (for side-effects only)\n return new OTree([`import _ ${JSON.stringify(moduleName)}`], undefined, { canBreakLine: true });\n }\n\n return new OTree([`import ${JSON.stringify(moduleName)}`], undefined, { canBreakLine: true });\n }\n\n public override variableDeclaration(node: ts.VariableDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n if (!node.initializer) {\n return new OTree([\n 'var ',\n renderer.updateContext({ isExported: isExported(node) }).convert(node.name),\n ' ',\n this.renderTypeNode(node.type, false, renderer) || 'interface{}',\n ]);\n }\n\n return new OTree([\n renderer.updateContext({ isExported: false }).convert(node.name),\n ' := ',\n renderer.convert(node.initializer),\n ]);\n }\n\n private defaultArgValues(params: ts.NodeArray<ts.ParameterDeclaration>, renderer: GoRenderer) {\n return new OTree(\n params.reduce((accum: OTree[], param) => {\n if (!param.initializer) {\n return accum;\n }\n\n const name = renderer.updateContext({ isPtr: true }).convert(param.name);\n return [\n ...accum,\n new OTree(\n ['\\n', 'if ', name, ' == nil {'],\n ['\\n', name, ' = ', renderer.updateContext({ wrapPtr: true }).convert(param.initializer)],\n {\n indent: 1,\n suffix: '\\n}',\n },\n ),\n ];\n }, []),\n );\n }\n\n public mergeContext(old: GoLanguageContext, update: Partial<GoLanguageContext>): GoLanguageContext {\n return Object.assign({}, old, update);\n }\n\n private renderTypeNode(typeNode: ts.TypeNode | undefined, isPtr: boolean, renderer: GoRenderer): string {\n if (!typeNode) {\n return '';\n }\n return this.renderType(\n typeNode,\n renderer.typeChecker.getTypeFromTypeNode(typeNode).symbol,\n renderer.typeOfType(typeNode),\n isPtr,\n renderer.textOf(typeNode),\n renderer,\n );\n }\n\n private renderType(\n typeNode: ts.Node,\n typeSymbol: ts.Symbol | undefined,\n type: ts.Type | undefined,\n isPtr: boolean,\n fallback: string,\n renderer: GoRenderer,\n ): string {\n if (type === undefined) {\n return fallback;\n }\n\n const jsiiType = determineJsiiType(renderer.typeChecker, type);\n\n const doRender = (jType: JsiiType, asPtr: boolean, typeSym: ts.Symbol | undefined): string => {\n const prefix = asPtr ? '*' : '';\n switch (jType.kind) {\n case 'unknown':\n return fallback;\n case 'error':\n renderer.report(typeNode, jType.message);\n return fallback;\n case 'map':\n return `map[string]${doRender(jType.elementType, true, jType.elementTypeSymbol)}`;\n case 'list':\n return `[]${doRender(jType.elementType, true, jType.elementTypeSymbol)}`;\n case 'namedType':\n return this.goName(jType.name, renderer, typeSym);\n case 'intersection':\n const renderedBranches = jType.branches.map((t, i) => doRender(t, false, jType.branchSymbols[i]));\n return `interface { ${renderedBranches.join('; ')} }`;\n case 'builtIn':\n switch (jType.builtIn) {\n case 'boolean':\n return `${prefix}bool`;\n case 'number':\n return `${prefix}f64`;\n case 'string':\n return `${prefix}string`;\n case 'any':\n return 'interface{}';\n case 'void':\n return '';\n }\n }\n };\n\n return doRender(jsiiType, isPtr, typeSymbol);\n }\n\n /**\n * Guess an item's go name based on it's TS name and context\n */\n private goName(input: string, renderer: GoRenderer, symbol: ts.Symbol | undefined) {\n let text = input.replace(/[^a-z0-9_]/gi, '');\n\n // Symbols can be an index signature, if this is a dot-style access to a map member. In this\n // case we should not cache against the symbol as this would cause all such accesses to the same\n // object to return the same text, which would be incorrect!\n const indexSignature = ts.SymbolFlags.Signature | ts.SymbolFlags.Transient;\n const cacheKey = symbol != null && (symbol.flags & indexSignature) === indexSignature ? input : symbol ?? input;\n\n const prev = this.idMap.get(cacheKey) ?? this.idMap.get(input);\n\n const symbolExported =\n symbol?.declarations?.[0] && ts.getCombinedModifierFlags(symbol?.declarations?.[0]) & ts.ModifierFlags.Export;\n\n // For some reason we are considering a global flag here; that solves cases\n // where the type is being declared, but it doesn't solve cases where the\n // type is being referenced. Also consider a potential `export` keyword on\n // the type declaration.\n const isExp = renderer.currentContext.isExported || symbolExported;\n\n if (prev) {\n // If an identifier has been renamed go get it\n text = prev.formatted;\n } else if (isExp && !renderer.currentContext.inMapLiteral) {\n // Uppercase exported and public symbols/members\n text = ucFirst(text);\n } else if (!renderer.currentContext.inMapLiteral) {\n // Lowercase unexported items that are capitalized in TS like structs/interfaces/classes\n text = lcFirst(text);\n }\n\n text = prefixReserved(text);\n\n if (text !== input && prev == null) {\n this.idMap.set(cacheKey, { formatted: text, type: getDeclarationType(renderer.currentContext) });\n }\n\n if (\n // Non-pointer references to parameters need to be de-referenced\n (!renderer.currentContext.isPtr &&\n !renderer.currentContext.isParameterName &&\n symbol?.valueDeclaration?.kind === ts.SyntaxKind.Parameter &&\n !renderer.currentContext.isPtrAssignmentRValue) ||\n // Pointer reference to non-interfaces are prefixed with *\n (renderer.currentContext.isPtr && prev && prev?.type !== DeclarationType.INTERFACE)\n ) {\n return `*${text}`;\n }\n return text;\n }\n}\n\n/**\n * Uppercase the first letter\n */\nfunction ucFirst(x: string) {\n return x.substring(0, 1).toUpperCase() + x.substring(1);\n}\n\n/**\n * Lowercase the first letter\n */\nfunction lcFirst(x: string) {\n return x.substring(0, 1).toLowerCase() + x.substring(1);\n}\n\nfunction wrapPtrExpression(typeChecker: ts.TypeChecker, node: ts.Expression, unwrapped: OTree): OTree {\n const type = typeOfExpression(typeChecker, node);\n const jsiiType = determineJsiiType(typeChecker, type);\n if (jsiiType.kind !== 'builtIn') {\n return unwrapped;\n }\n switch (jsiiType.builtIn) {\n case 'boolean':\n return new OTree(['jsii.Boolean(', unwrapped, ')']);\n case 'number':\n return new OTree(['jsii.Number(', unwrapped, ')']);\n case 'string':\n return new OTree(['jsii.String(', unwrapped, ')']);\n case 'any':\n case 'void':\n return unwrapped;\n }\n}\n\n/**\n * Wrap a string literal in the jsii.String helper\n */\nfunction jsiiStr(x: string) {\n return `jsii.String(${x})`;\n}\n\n/**\n * Wrap a string literal in the jsii.String helper\n */\nfunction jsiiNum(x: string) {\n return `jsii.Number(${x})`;\n}\n\n/**\n * Prefix reserved word identifiers with _\n */\nfunction prefixReserved(x: string) {\n if (['struct'].includes(x)) {\n return `${x}_`;\n }\n return x;\n}\n\nfunction getDeclarationType(ctx: GoLanguageContext) {\n if (ctx.isStruct) {\n return DeclarationType.STRUCT;\n }\n\n return DeclarationType.UNKNOWN;\n}\n\nfunction findUp<T extends ts.Node>(node: ts.Node, predicate: (node: ts.Node) => node is T): T | undefined {\n if (predicate(node)) {\n return node;\n }\n if (node.parent == null) {\n return undefined;\n }\n return findUp(node.parent, predicate);\n}\n\nfunction symbolFor(typeChecker: ts.TypeChecker, node: ts.Node): ts.Symbol | undefined {\n if (ts.isIdentifier(node)) {\n return typeChecker.getSymbolAtLocation(node);\n }\n if (ts.isPropertyAccessExpression(node)) {\n return typeChecker.getSymbolAtLocation(node.name);\n }\n // I don't know 🤷🏻‍♂️\n return undefined;\n}\n\n/**\n * Checks whether the provided node corresponds to a pointer-value.\n *\n * NOTE: This currently only checkes for parameter declarations. This is\n * presently used only to determine whether a variable reference needs to be\n * wrapped or not (i.e: \"jsii.String(varStr)\"), and parameter references are the\n * only \"always pointer\" values possible in that particular context.\n *\n * @param typeChecker a TypeChecker to use to resolve the node's symbol.\n * @param node the node to be checked.\n *\n * @returns true if the node corresponds to a pointer-value.\n */\nfunction isPointerValue(typeChecker: ts.TypeChecker, node: ts.Node): boolean {\n const symbol = typeChecker.getSymbolAtLocation(node);\n if (symbol == null) {\n // Can't find symbol, assuming it's a pointer...\n return true;\n }\n\n const declaration = symbol.valueDeclaration;\n if (declaration == null) {\n // Doesn't have declaration, assuming it's a pointer...\n return true;\n }\n\n // Now check if this is known pointer kind or not....\n return ts.isParameter(node);\n}\n"]}
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../src/languages/go.ts"],"names":[],"mappings":"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","sourcesContent":["// import { JsiiSymbol, simpleName, namespaceName } from '../jsii/jsii-utils';\n// import { jsiiTargetParameter } from '../jsii/packages';\nimport { AssertionError } from 'node:assert';\nimport * as ts from 'typescript';\n\nimport { DefaultVisitor } from './default';\nimport { TargetLanguage } from './target-language';\nimport { analyzeObjectLiteral, determineJsiiType, JsiiType, ObjectLiteralStruct } from '../jsii/jsii-types';\nimport { lookupJsiiSymbolFromNode } from '../jsii/jsii-utils';\nimport { OTree } from '../o-tree';\nimport { AstRenderer } from '../renderer';\nimport { SubmoduleReference } from '../submodule-reference';\nimport { isExported, isPublic, isPrivate, isReadOnly, isStatic } from '../typescript/ast-utils';\nimport { analyzeImportDeclaration, ImportStatement } from '../typescript/imports';\nimport {\n determineReturnType,\n inferMapElementType,\n inferredTypeOfExpression,\n typeOfExpression,\n} from '../typescript/types';\n\ninterface GoLanguageContext {\n /**\n * Free floating symbols are made importable across packages by naming with a capital in Go.\n */\n isExported: boolean;\n\n /**\n * Whether type should be converted a pointer type\n */\n isPtr: boolean;\n\n /**\n * Whether this is the R-Value in an assignment expression to a pointer value.\n */\n isPtrAssignmentRValue: boolean;\n\n /**\n * Whether the current element is a parameter delcaration name.\n */\n isParameterName: boolean;\n\n /**\n * Whether context is within a struct declaration\n */\n isStruct: boolean;\n\n /**\n * Whether the context is within an interface delcaration.\n */\n isInterface: boolean;\n\n /**\n * Whether properties are being intialized within a `map` type\n */\n inMapLiteral: boolean;\n\n /**\n * Wheter to wrap a literal in a pointer constructor ie: jsii.String.\n */\n wrapPtr: boolean;\n}\n\nenum DeclarationType {\n STRUCT,\n INTERFACE,\n FUNCTION,\n BUILTIN,\n UNKNOWN,\n}\n\ntype GoRenderer = AstRenderer<GoLanguageContext>;\n\ninterface FormattedId {\n readonly type: DeclarationType;\n readonly formatted: string;\n}\nexport class GoVisitor extends DefaultVisitor<GoLanguageContext> {\n /**\n * Translation version\n *\n * Bump this when you change something in the implementation to invalidate\n * existing cached translations.\n */\n public static readonly VERSION = '2';\n\n public readonly indentChar = '\\t';\n\n public readonly language = TargetLanguage.GO;\n\n private readonly idMap = new Map<ts.Symbol | string, FormattedId>();\n\n public readonly defaultContext: GoLanguageContext = {\n isExported: false,\n isPtr: false,\n isPtrAssignmentRValue: false,\n isStruct: false,\n isInterface: false,\n isParameterName: false,\n inMapLiteral: false,\n wrapPtr: false,\n };\n\n protected override argumentList(args: readonly ts.Node[] | undefined, renderer: GoRenderer): OTree {\n return new OTree([], args ? renderer.convertAll(args) : [], {\n separator: ', ',\n });\n }\n\n public override block(node: ts.Block, renderer: GoRenderer): OTree {\n return new OTree(['{'], renderer.convertAll(node.statements), {\n indent: 1,\n suffix: renderer.mirrorNewlineBefore(node.statements[0], '}'),\n });\n }\n\n public override expressionStatement(node: ts.ExpressionStatement, renderer: GoRenderer): OTree {\n const inner = renderer.convert(node.expression);\n if (inner.isEmpty) {\n return inner;\n }\n return new OTree([inner], [], { canBreakLine: true });\n }\n\n public override functionDeclaration(node: ts.FunctionDeclaration, renderer: GoRenderer): OTree {\n const funcName = renderer.updateContext({ isExported: isExported(node) }).convert(node.name);\n const returnType = determineReturnType(renderer.typeChecker, node);\n const goType = this.renderType(node.type ?? node, returnType?.symbol, returnType, true, '', renderer);\n\n const body = node.body?.statements ? renderer.convertAll(node.body.statements) : [];\n return new OTree(\n [\n 'func ',\n funcName,\n '(',\n new OTree([], renderer.updateContext({ isPtr: true }).convertAll(node.parameters), {\n separator: ', ',\n }),\n ')',\n goType ? ' ' : '',\n goType,\n ],\n [\n new OTree(\n [' {'],\n [this.defaultArgValues(node.parameters, renderer.updateContext({ wrapPtr: true })), ...body],\n {\n indent: 1,\n suffix: '\\n}',\n },\n ),\n ],\n {\n canBreakLine: true,\n },\n );\n }\n\n public override identifier(\n node: ts.Identifier | ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: GoRenderer,\n ) {\n const symbol = renderer.typeChecker.getSymbolAtLocation(node);\n\n // If the identifier corresponds to a renamed imported symbol, we need to use the original symbol name, qualified\n // with the import package name, since Go does not allow generalized symbol aliasing (we *could* alias types, but\n // not static functions or constructors).\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (declaration && ts.isImportSpecifier(declaration)) {\n const importInfo = analyzeImportDeclaration(declaration.parent.parent.parent, renderer);\n const packageName =\n importInfo.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.packageName ??\n this.goName(importInfo.packageName, renderer, undefined);\n\n const importedSymbol = declaration.propertyName\n ? renderer.typeChecker.getSymbolAtLocation(declaration.propertyName)\n : symbol;\n // Note: imported members are (by nature) always exported by the module they are imported from.\n return new OTree([\n packageName,\n '.',\n this.goName(\n (declaration.propertyName ?? declaration.name).text,\n renderer.updateContext({ isExported: true }),\n importedSymbol,\n ),\n ]);\n }\n\n return new OTree([this.goName(node.text, renderer, symbol)]);\n }\n\n public override newExpression(node: ts.NewExpression, renderer: GoRenderer): OTree {\n const { classNamespace, className, unexported } = determineClassName.call(this, node.expression);\n return new OTree(\n [\n ...(classNamespace ? [classNamespace, '.'] : []),\n // Constructors of unexported (snippet-local) classes render unexported\n // (see constructorDeclaration) — the call site must match.\n unexported ? 'new' : 'New',\n className,\n '(',\n ],\n renderer.updateContext({ wrapPtr: true }).convertAll(node.arguments ?? []),\n { canBreakLine: true, separator: ', ', suffix: ')' },\n );\n\n function determineClassName(\n this: GoVisitor,\n expr: ts.Expression,\n ): { classNamespace?: OTree; className: string; unexported?: boolean } {\n if (ts.isIdentifier(expr)) {\n // Imported names are referred to by the original (i.e: exported) name, qualified with the source module's go\n // package name.\n const symbol = renderer.typeChecker.getSymbolAtLocation(expr);\n const declaration = symbol?.valueDeclaration ?? symbol?.declarations?.[0];\n if (declaration && ts.isImportSpecifier(declaration)) {\n const importInfo = analyzeImportDeclaration(declaration.parent.parent.parent, renderer);\n const packageName =\n importInfo.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.packageName ??\n this.goName(importInfo.packageName, renderer, undefined);\n\n return {\n classNamespace: new OTree([packageName]),\n className: this.goName(\n (declaration.propertyName ?? declaration.name).text,\n renderer.updateContext({ isExported: true }),\n symbol,\n ),\n };\n }\n\n // A snippet-local class renders an unexported constructor. Classes\n // that model library types (jsii-resolvable, incl. 'fake-from-jsii'\n // test fixtures) keep the exported naming even when declared\n // unexported in the snippet.\n const classDeclaration = symbol?.declarations?.find(ts.isClassDeclaration);\n return {\n className: ucFirst(expr.text),\n unexported:\n classDeclaration != null &&\n !isExported(classDeclaration) &&\n lookupJsiiSymbolFromNode(renderer.typeChecker, expr) == null,\n };\n }\n if (ts.isPropertyAccessExpression(expr)) {\n if (ts.isIdentifier(expr.expression)) {\n return {\n className: ucFirst(expr.name.text),\n classNamespace: renderer.updateContext({ isExported: false }).convert(expr.expression),\n };\n } else if (\n ts.isPropertyAccessExpression(expr.expression) &&\n renderer.submoduleReferences.has(expr.expression)\n ) {\n const submodule = renderer.submoduleReferences.get(expr.expression)!;\n return {\n className: ucFirst(expr.name.text),\n classNamespace: renderer.updateContext({ isExported: false }).convert(submodule.lastNode),\n };\n }\n renderer.reportUnsupported(expr.expression, TargetLanguage.GO);\n return {\n className: ucFirst(expr.name.text),\n classNamespace: new OTree(['#error#']),\n };\n }\n renderer.reportUnsupported(expr, TargetLanguage.GO);\n return { className: expr.getText(expr.getSourceFile()) };\n }\n }\n\n public override arrayLiteralExpression(\n node: ts.ArrayLiteralExpression,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n const arrayType =\n inferredTypeOfExpression(renderer.typeChecker, node) ?? renderer.typeChecker.getTypeAtLocation(node);\n const [elementType] = renderer.typeChecker.getTypeArguments(arrayType as ts.TypeReference);\n const typeName = elementType\n ? this.renderType(node, elementType.symbol, elementType, true, 'interface{}', renderer)\n : 'interface{}';\n\n return new OTree(['[]', typeName, '{'], renderer.convertAll(node.elements), {\n separator: ',',\n trailingSeparator: true,\n suffix: '}',\n indent: 1,\n });\n }\n\n public override objectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: GoRenderer): OTree {\n const lit = analyzeObjectLiteral(renderer.typeChecker, node);\n\n switch (lit.kind) {\n case 'unknown':\n return this.unknownTypeObjectLiteralExpression(node, renderer);\n case 'struct':\n case 'local-struct':\n return this.knownStructObjectLiteralExpression(node, lit, renderer);\n case 'map':\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n }\n\n public override propertyAssignment(node: ts.PropertyAssignment, renderer: GoRenderer): OTree {\n const key =\n ts.isStringLiteralLike(node.name) || ts.isIdentifier(node.name)\n ? renderer.currentContext.inMapLiteral\n ? JSON.stringify(node.name.text)\n : this.goName(node.name.text, renderer, renderer.typeChecker.getSymbolAtLocation(node.name))\n : renderer.convert(node.name);\n return new OTree(\n [\n key,\n ': ',\n renderer\n .updateContext({\n // Reset isExported, as this was intended for the key name translation...\n isExported: undefined,\n // Struct member values are always pointers...\n isPtr: renderer.currentContext.isStruct,\n wrapPtr: renderer.currentContext.isStruct || renderer.currentContext.inMapLiteral,\n })\n .convert(node.initializer),\n ],\n [],\n {\n canBreakLine: true,\n },\n );\n }\n\n public override shorthandPropertyAssignment(\n node: ts.ShorthandPropertyAssignment,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n const key =\n ts.isStringLiteralLike(node.name) || ts.isIdentifier(node.name)\n ? renderer.currentContext.inMapLiteral\n ? JSON.stringify(node.name.text)\n : this.goName(node.name.text, renderer, renderer.typeChecker.getSymbolAtLocation(node.name))\n : renderer.convert(node.name);\n\n const rawValue = renderer.updateContext({ wrapPtr: true, isStruct: false }).convert(node.name);\n const value = isPointerValue(renderer.typeChecker, node.name)\n ? rawValue\n : wrapPtrExpression(renderer.typeChecker, node.name, rawValue);\n\n return new OTree([key, ': ', value], [], { canBreakLine: true });\n }\n\n public override templateExpression(node: ts.TemplateExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n let template = '';\n const parameters = new Array<OTree>();\n\n if (node.head.rawText) {\n template += node.head.rawText;\n }\n\n for (const span of node.templateSpans) {\n template += '%v';\n parameters.push(renderer.convert(span.expression));\n if (span.literal.rawText) {\n template += span.literal.rawText;\n }\n }\n\n if (parameters.length === 0) {\n return new OTree([JSON.stringify(template)]);\n }\n\n return new OTree(\n ['fmt.Sprintf('],\n [\n JSON.stringify(template),\n ...parameters.reduce((list, element) => list.concat(', ', element), new Array<string | OTree>()),\n ],\n {\n canBreakLine: true,\n suffix: ')',\n },\n );\n }\n\n public override token<A extends ts.SyntaxKind>(node: ts.Token<A>, renderer: GoRenderer): OTree {\n switch (node.kind) {\n case ts.SyntaxKind.FalseKeyword:\n case ts.SyntaxKind.TrueKeyword:\n if (renderer.currentContext.wrapPtr) {\n return new OTree(['jsii.Boolean(', node.getText(), ')']);\n }\n return new OTree([node.getText()]);\n\n case ts.SyntaxKind.NullKeyword:\n case ts.SyntaxKind.UndefinedKeyword:\n return new OTree(['nil']);\n default:\n return super.token(node, renderer);\n }\n }\n\n public override unknownTypeObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: GoRenderer): OTree {\n return this.keyValueObjectLiteralExpression(node, renderer);\n }\n\n public override keyValueObjectLiteralExpression(node: ts.ObjectLiteralExpression, renderer: GoRenderer): OTree {\n const valueType = inferMapElementType(node.properties, renderer.typeChecker);\n\n return new OTree(\n [`map[string]`, this.renderType(node, valueType?.symbol, valueType, true, `interface{}`, renderer), `{`],\n renderer.updateContext({ inMapLiteral: true, wrapPtr: true }).convertAll(node.properties),\n {\n suffix: '}',\n separator: ',',\n trailingSeparator: true,\n indent: 1,\n },\n );\n }\n\n public override knownStructObjectLiteralExpression(\n node: ts.ObjectLiteralExpression,\n structType: ObjectLiteralStruct,\n renderer: GoRenderer,\n ): OTree {\n const exported = structType.kind === 'struct';\n return new OTree(\n [\n '&',\n this.goName(\n structType.type.symbol.name,\n renderer.updateContext({ isExported: exported, isPtr: false }),\n structType.type.symbol,\n ),\n '{',\n ],\n renderer.updateContext({ isExported: exported, isStruct: true }).convertAll(node.properties),\n {\n suffix: '}',\n separator: ',',\n trailingSeparator: true,\n indent: 1,\n },\n );\n }\n\n public override asExpression(node: ts.AsExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n const jsiiType = determineJsiiType(renderer.typeChecker, renderer.typeChecker.getTypeFromTypeNode(node.type));\n switch (jsiiType.kind) {\n case 'builtIn':\n switch (jsiiType.builtIn) {\n case 'boolean':\n return new OTree(['bool(', renderer.convert(node.expression), ')'], [], { canBreakLine: true });\n case 'number':\n return new OTree(['f64(', renderer.convert(node.expression), ')'], [], { canBreakLine: true });\n case 'string':\n return new OTree(['string(', renderer.convert(node.expression), ')'], [], { canBreakLine: true });\n case 'any':\n case 'void':\n // Just return the value as-is... Everything is compatible with `interface{}`.\n return renderer.convert(node.expression);\n }\n // To make linter understand there is no fall-through here...\n throw new AssertionError({ message: 'unreachable' });\n default:\n return new OTree(\n [renderer.convert(node.expression), '.(', this.renderTypeNode(node.type, false, renderer), ')'],\n [],\n { canBreakLine: true },\n );\n }\n }\n\n public override parameterDeclaration(node: ts.ParameterDeclaration, renderer: GoRenderer): OTree {\n const nodeName = renderer.updateContext({ isParameterName: true, isPtr: false }).convert(node.name);\n const nodeType = node.dotDotDotToken ? (node.type as ts.ArrayTypeNode | undefined)?.elementType : node.type;\n const typeNode = this.renderTypeNode(nodeType, true, renderer);\n return new OTree([...(node.dotDotDotToken ? ['...'] : []), nodeName, ' ', typeNode]);\n }\n\n public override printStatement(args: ts.NodeArray<ts.Expression>, renderer: GoRenderer): OTree {\n const renderedArgs = this.argumentList(args, renderer);\n return new OTree(['fmt.Println(', renderedArgs, ')']);\n }\n\n public override propertyAccessExpression(\n node: ts.PropertyAccessExpression,\n renderer: GoRenderer,\n submoduleReference?: SubmoduleReference,\n ): OTree {\n if (submoduleReference != null) {\n return new OTree([\n renderer\n .updateContext({ isExported: false, isPtr: false, wrapPtr: false })\n .convert(submoduleReference.lastNode),\n ]);\n }\n\n const expressionType = typeOfExpression(renderer.typeChecker, node.expression);\n const valueSymbol = renderer.typeChecker.getSymbolAtLocation(node.name);\n\n const isStaticMember = valueSymbol?.valueDeclaration != null && isStatic(valueSymbol.valueDeclaration);\n const isClassStaticPropertyAccess =\n isStaticMember &&\n expressionType?.symbol?.valueDeclaration != null &&\n valueSymbol.valueDeclaration != null &&\n ts.isClassDeclaration(expressionType.symbol.valueDeclaration) &&\n (ts.isPropertyDeclaration(valueSymbol.valueDeclaration) || ts.isAccessor(valueSymbol.valueDeclaration));\n const isClassStaticMethodAccess =\n isStaticMember &&\n !isClassStaticPropertyAccess &&\n valueSymbol.valueDeclaration != null &&\n ts.isMethodDeclaration(valueSymbol.valueDeclaration);\n\n // When the expression has an unknown type (unresolved symbol), has an upper-case first letter,\n // and doesn't end in a call expression (as hinted by the presence of parentheses), we assume\n // it's a type name... In such cases, what comes after can be considered a static member access.\n // Note that the expression might be further qualified, so we check using a regex that checks\n // for the last \".\" - delimited segment if there's dots in there...\n const expressionLooksLikeTypeReference =\n expressionType.symbol == null &&\n /(?:\\.|^)[A-Z][^.)]*$/.exec(node.expression.getText(node.expression.getSourceFile())) != null;\n\n // Whether the node is an enum member reference.\n const isEnumMember =\n expressionType?.symbol?.valueDeclaration != null && ts.isEnumDeclaration(expressionType.symbol.valueDeclaration);\n\n const jsiiSymbol = lookupJsiiSymbolFromNode(renderer.typeChecker, node.name);\n const isExportedTypeName = jsiiSymbol != null && jsiiSymbol.symbolType !== 'module';\n\n const delimiter =\n isEnumMember || isClassStaticPropertyAccess || isClassStaticMethodAccess || expressionLooksLikeTypeReference\n ? '_'\n : '.';\n\n return new OTree([\n renderer.convert(node.expression),\n delimiter,\n renderer\n .updateContext({\n isExported:\n isClassStaticPropertyAccess ||\n isClassStaticMethodAccess ||\n expressionLooksLikeTypeReference ||\n isEnumMember ||\n isExportedTypeName,\n })\n .convert(node.name),\n ...(isClassStaticPropertyAccess\n ? ['()']\n : // If the parent's not a call-like expression, and it's an inferred static property access, we need to put call\n // parentheses at the end, as static properties are accessed via synthetic readers.\n expressionLooksLikeTypeReference && findUp(node, ts.isCallLikeExpression) == null\n ? ['()']\n : []),\n ]);\n }\n\n public override methodSignature(node: ts.MethodSignature, renderer: AstRenderer<GoLanguageContext>): OTree {\n const type = this.renderTypeNode(node.type, true, renderer);\n return new OTree(\n [\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n '(',\n ],\n renderer.convertAll(node.parameters),\n { suffix: `) ${type}`, canBreakLine: true },\n );\n }\n\n public override propertyDeclaration(node: ts.PropertyDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n return new OTree(\n [\n renderer\n .updateContext({ isExported: (renderer.currentContext.isExported && isPublic(node)) || isStatic(node) })\n .convert(node.name),\n ' ',\n this.renderTypeNode(node.type, true, renderer),\n ],\n [],\n { canBreakLine: true },\n );\n }\n\n public override propertySignature(node: ts.PropertySignature, renderer: GoRenderer): OTree {\n if (renderer.currentContext.isInterface) {\n const type = this.renderTypeNode(node.type, true, renderer);\n const getter = new OTree([\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n '() ',\n type,\n ]);\n if (isReadOnly(node)) {\n return getter;\n }\n const setter = new OTree([\n '\\n',\n renderer.currentContext.isExported && isPublic(node) ? 'Set' : 'set',\n renderer.updateContext({ isExported: true }).convert(node.name),\n '(value ',\n type,\n ')',\n ]);\n return new OTree([getter, setter]);\n }\n\n return new OTree([\n '\\n',\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n ' ',\n this.renderTypeNode(node.type, renderer.currentContext.isPtr, renderer),\n ]);\n }\n\n public override regularCallExpression(node: ts.CallExpression, renderer: GoRenderer): OTree {\n return new OTree([\n renderer.convert(node.expression),\n '(',\n this.argumentList(node.arguments, renderer.updateContext({ wrapPtr: true })),\n ')',\n ]);\n }\n\n public override returnStatement(node: ts.ReturnStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n return new OTree(['return ', renderer.updateContext({ wrapPtr: true }).convert(node.expression)], [], {\n canBreakLine: true,\n });\n }\n\n public override binaryExpression(node: ts.BinaryExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n if (node.operatorToken.kind === ts.SyntaxKind.EqualsToken) {\n const symbol = symbolFor(renderer.typeChecker, node.left);\n // What the right-hand side must be follows from how the left-hand side\n // *renders*, and that differs between the two pointer-valued\n // declarations. A property renders as the pointer field itself\n // (`this.env`), so the RHS has to be a pointer: leave a pointer\n // undereferenced, and wrap a literal — `this.env = \"production\"` needs\n // `jsii.String(\"production\")`. A parameter renders dereferenced (`*name`,\n // see goName at the bottom of this file), so the target is a value and\n // the RHS has to be one too — exactly the opposite of a property.\n const target = symbol?.valueDeclaration;\n const targetRendersAsPointer = target != null && ts.isPropertyDeclaration(target);\n return new OTree([\n renderer.convert(node.left),\n ' = ',\n renderer\n .updateContext({\n isPtrAssignmentRValue: targetRendersAsPointer,\n wrapPtr: targetRendersAsPointer,\n })\n .convert(node.right),\n ]);\n }\n\n const output = super.binaryExpression(node, renderer.updateContext({ wrapPtr: false, isPtr: false }));\n if (!renderer.currentContext.wrapPtr) {\n return output;\n }\n return wrapPtrExpression(renderer.typeChecker, node, output);\n }\n\n public override stringLiteral(\n node: ts.StringLiteral | ts.NoSubstitutionTemplateLiteral,\n renderer: GoRenderer,\n ): OTree {\n // Go supports backtick-delimited multi-line string literals, similar/same as JavaScript no-substitution templates.\n // We only use this trick if the literal includes actual new line characters (otherwise it just looks weird in go).\n const text =\n ts.isNoSubstitutionTemplateLiteral(node) && /[\\n\\r]/m.test(node.text)\n ? node.getText(node.getSourceFile())\n : JSON.stringify(node.text);\n\n return new OTree([`${renderer.currentContext.wrapPtr ? jsiiStr(text) : text}`]);\n }\n\n public override numericLiteral(node: ts.NumericLiteral, renderer: GoRenderer): OTree {\n const text = `${node.text}`;\n\n return new OTree([`${renderer.currentContext.wrapPtr ? jsiiNum(text) : text}`]);\n }\n\n public override classDeclaration(node: ts.ClassDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n const className = node.name\n ? renderer.updateContext({ isExported: isExported(node) }).convert(node.name)\n : 'anonymous';\n\n const extendsClause = node.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword);\n const base = extendsClause && this.renderTypeNode(extendsClause.types[0], false, renderer);\n\n const properties = node.members\n .filter(ts.isPropertyDeclaration)\n .map((prop) => renderer.updateContext({ isStruct: true, isPtr: true }).convert(prop));\n\n const struct = new OTree(['type ', className, ' struct {'], [...(base ? ['\\n', base] : []), ...properties], {\n canBreakLine: true,\n suffix: properties.length > 0 ? renderer.mirrorNewlineBefore(node.members[0], '}') : '\\n}',\n indent: 1,\n });\n\n const methods = [\n node.members.length > 0\n ? // Ensure there is a blank line between thre struct and the first member, but don't put two if there's already\n // one as part of the first member's leading trivia.\n new OTree(['\\n\\n'], [], { renderOnce: `ws-${node.members[0].getFullStart()}` })\n : '',\n ...renderer.convertAll(\n node.members.filter((member) => !ts.isPropertyDeclaration(member) || (isExported(node) && !isPrivate(member))),\n ),\n ];\n\n return new OTree([struct], methods, { canBreakLine: true });\n }\n\n public override structInterfaceDeclaration(node: ts.InterfaceDeclaration, renderer: GoRenderer): OTree {\n const bases =\n node.heritageClauses?.flatMap((hc) => hc.types).map((t) => this.renderTypeNode(t, false, renderer)) ?? [];\n return new OTree(\n ['type ', renderer.updateContext({ isStruct: true }).convert(node.name), ' struct {'],\n [...bases, ...renderer.updateContext({ isStruct: true, isPtr: true }).convertAll(node.members)],\n { indent: 1, canBreakLine: true, separator: '\\n', trailingSeparator: true, suffix: '}' },\n );\n }\n\n public override regularInterfaceDeclaration(\n node: ts.InterfaceDeclaration,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n if (node.members.length === 0) {\n // Erase empty interfaces as they have no bearing in Go\n return new OTree([]);\n }\n\n const symbol = renderer.typeChecker.getSymbolAtLocation(node.name);\n const name = this.goName(node.name.text, renderer.updateContext({ isExported: isExported(node) }), symbol);\n return new OTree(\n [`type ${name} interface {`],\n renderer.updateContext({ isInterface: true, isExported: isExported(node) }).convertAll(node.members),\n { indent: 1, canBreakLine: true, separator: '\\n', trailingSeparator: true, suffix: '}' },\n );\n }\n\n public override constructorDeclaration(\n node: ts.ConstructorDeclaration,\n renderer: AstRenderer<GoLanguageContext>,\n ): OTree {\n const className = node.parent.name\n ? this.goName(\n node.parent.name.text,\n renderer.updateContext({ isExported: isExported(node.parent) }),\n renderer.typeChecker.getSymbolAtLocation(node.parent.name),\n )\n : 'anonymous';\n\n const defaultArgValues = this.defaultArgValues(node.parameters, renderer);\n\n return new OTree(\n [\n 'func ',\n isExported(node.parent) ? 'New' : 'new',\n ucFirst(className),\n '(',\n new OTree([], renderer.convertAll(node.parameters), { separator: ', ' }),\n ') *',\n className,\n ' {',\n new OTree([], [defaultArgValues, '\\nthis := &', className, '{}'], {\n indent: 1,\n }),\n ],\n node.body ? renderer.convertAll(node.body.statements) : [],\n { canBreakLine: true, suffix: '\\n\\treturn this\\n}', indent: 1 },\n );\n }\n\n public override superCallExpression(node: ts.CallExpression, renderer: AstRenderer<GoLanguageContext>): OTree {\n // We're on a `super` call, so we must be extending a base class.\n const base = findUp(node, ts.isConstructorDeclaration)!.parent.heritageClauses!.find(\n (clause) => clause.token === ts.SyntaxKind.ExtendsKeyword,\n )!.types[0].expression;\n const baseConstructor = ts.isPropertyAccessExpression(base)\n ? new OTree([\n renderer.convert(base.expression),\n '.New',\n ucFirst(this.goName(base.name.text, renderer, renderer.typeChecker.getSymbolAtLocation(base.name))),\n ])\n : ts.isIdentifier(base)\n ? `new${ucFirst(this.goName(base.text, renderer, renderer.typeChecker.getSymbolAtLocation(base)))}`\n : (function () {\n renderer.reportUnsupported(node, TargetLanguage.GO);\n return renderer.convert(base);\n })();\n\n return new OTree(\n [\n baseConstructor,\n '_Override(this, ',\n this.argumentList(node.arguments, renderer.updateContext({ wrapPtr: true, isPtr: true })),\n ')',\n ],\n [],\n {\n canBreakLine: true,\n },\n );\n }\n\n public override methodDeclaration(node: ts.MethodDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n if (ts.isObjectLiteralExpression(node.parent)) {\n return super.methodDeclaration(node, renderer);\n }\n\n const className = node.parent.name\n ? this.goName(\n node.parent.name.text,\n renderer.updateContext({ isExported: isExported(node.parent) }),\n renderer.typeChecker.getSymbolAtLocation(node.parent.name),\n )\n : 'anonymous';\n\n const returnType = determineReturnType(renderer.typeChecker, node);\n const goReturnType =\n returnType && this.renderType(node.type ?? node, returnType.symbol, returnType, true, 'interface{}', renderer);\n\n return new OTree(\n [\n 'func (this *',\n className,\n ') ',\n renderer.updateContext({ isExported: renderer.currentContext.isExported && isPublic(node) }).convert(node.name),\n '(',\n new OTree([], renderer.convertAll(node.parameters), { separator: ', ' }),\n ') ',\n goReturnType,\n goReturnType ? ' ' : '',\n '{',\n ],\n [\n this.defaultArgValues(node.parameters, renderer),\n ...(node.body ? renderer.convertAll(node.body.statements) : []),\n ],\n { canBreakLine: true, suffix: node.body && node.body.statements.length > 0 ? '\\n}' : '}', indent: 1 },\n );\n }\n\n public override ifStatement(node: ts.IfStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n const [ifPrefix, ifSuffix, ifIndent] = ts.isBlock(node.thenStatement) ? [' '] : [' {\\n', '\\n}', 1];\n const ifStmt = new OTree(\n ['if ', renderer.convert(node.expression)],\n [ifPrefix, renderer.convert(node.thenStatement)],\n {\n canBreakLine: true,\n suffix: ifSuffix,\n indent: ifIndent,\n },\n );\n if (!node.elseStatement) {\n return ifStmt;\n }\n\n const [elsePrefix, elseSuffix, elseIndent] = ts.isBlock(node.elseStatement) ? [' '] : [' {\\n', '\\n}', 1];\n const elseStmt = new OTree(['else'], [elsePrefix, renderer.convert(node.elseStatement)], {\n canBreakLine: true,\n suffix: elseSuffix,\n indent: elseIndent,\n });\n\n return new OTree([], [ifStmt, elseStmt], {\n separator: ' ',\n canBreakLine: true,\n });\n }\n\n public override forOfStatement(node: ts.ForOfStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n const [prefix, suffix, indent] = ts.isBlock(node.statement) ? [' '] : [' {\\n', '\\n}', 1];\n return new OTree(\n ['for _, ', nameOf(node.initializer), ' := range ', renderer.convert(node.expression)],\n [prefix, renderer.convert(node.statement)],\n { canBreakLine: true, suffix, indent },\n );\n\n function nameOf(decl: ts.ForInitializer | ts.Declaration): string | OTree {\n if (ts.isVariableDeclarationList(decl)) {\n if (decl.declarations.length !== 1) {\n renderer.reportUnsupported(decl.declarations[1], TargetLanguage.GO);\n }\n return nameOf(decl.declarations[0]);\n }\n if (ts.isVariableDeclaration(decl)) {\n return decl.name.getText(decl.name.getSourceFile());\n }\n renderer.reportUnsupported(decl, TargetLanguage.GO);\n return renderer.convert(decl);\n }\n }\n\n public override importStatement(node: ImportStatement, renderer: AstRenderer<GoLanguageContext>): OTree {\n const packageName =\n node.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.packageName ??\n node.packageName\n // Special case namespaced npm package names, so they are mangled the same way pacmak does.\n .replace(/@([a-z0-9_-]+)\\/([a-z0-9_-])/, '$1$2')\n .split('/')\n .map((txt) => this.goName(txt, renderer, undefined))\n .filter((txt) => txt !== '')\n .join('/');\n const moduleName = node.moduleSymbol?.sourceAssembly?.packageJson.jsii?.targets?.go?.moduleName\n ? `${node.moduleSymbol.sourceAssembly.packageJson.jsii.targets.go.moduleName}/${packageName}`\n : `github.com/aws-samples/dummy/${packageName}`;\n\n if (node.imports.import === 'full') {\n // We don't emit the alias if it matches the last path segment (conventionally this is the package name)\n const maybeAlias = node.imports.alias ? `${this.goName(node.imports.alias, renderer, undefined)} ` : '';\n\n return new OTree([`import ${maybeAlias}${JSON.stringify(moduleName)}`], undefined, { canBreakLine: true });\n }\n\n if (node.imports.elements.length === 0) {\n // This is a blank import (for side-effects only)\n return new OTree([`import _ ${JSON.stringify(moduleName)}`], undefined, { canBreakLine: true });\n }\n\n return new OTree([`import ${JSON.stringify(moduleName)}`], undefined, { canBreakLine: true });\n }\n\n public override variableDeclaration(node: ts.VariableDeclaration, renderer: AstRenderer<GoLanguageContext>): OTree {\n if (!node.initializer) {\n return new OTree([\n 'var ',\n renderer.updateContext({ isExported: isExported(node) }).convert(node.name),\n ' ',\n this.renderTypeNode(node.type, false, renderer) || 'interface{}',\n ]);\n }\n\n return new OTree([\n renderer.updateContext({ isExported: false }).convert(node.name),\n ' := ',\n renderer.convert(node.initializer),\n ]);\n }\n\n private defaultArgValues(params: ts.NodeArray<ts.ParameterDeclaration>, renderer: GoRenderer) {\n return new OTree(\n params.reduce((accum: OTree[], param) => {\n if (!param.initializer) {\n return accum;\n }\n\n const name = renderer.updateContext({ isPtr: true }).convert(param.name);\n return [\n ...accum,\n new OTree(\n ['\\n', 'if ', name, ' == nil {'],\n ['\\n', name, ' = ', renderer.updateContext({ wrapPtr: true }).convert(param.initializer)],\n {\n indent: 1,\n suffix: '\\n}',\n },\n ),\n ];\n }, []),\n );\n }\n\n public mergeContext(old: GoLanguageContext, update: Partial<GoLanguageContext>): GoLanguageContext {\n return Object.assign({}, old, update);\n }\n\n private renderTypeNode(typeNode: ts.TypeNode | undefined, isPtr: boolean, renderer: GoRenderer): string {\n if (!typeNode) {\n return '';\n }\n return this.renderType(\n typeNode,\n renderer.typeChecker.getTypeFromTypeNode(typeNode).symbol,\n renderer.typeOfType(typeNode),\n isPtr,\n renderer.textOf(typeNode),\n renderer,\n );\n }\n\n private renderType(\n typeNode: ts.Node,\n typeSymbol: ts.Symbol | undefined,\n type: ts.Type | undefined,\n isPtr: boolean,\n fallback: string,\n renderer: GoRenderer,\n ): string {\n if (type === undefined) {\n return fallback;\n }\n\n const jsiiType = determineJsiiType(renderer.typeChecker, type);\n\n const doRender = (jType: JsiiType, asPtr: boolean, typeSym: ts.Symbol | undefined): string => {\n const prefix = asPtr ? '*' : '';\n switch (jType.kind) {\n case 'unknown':\n return fallback;\n case 'error':\n renderer.report(typeNode, jType.message);\n return fallback;\n case 'map':\n return `map[string]${doRender(jType.elementType, true, jType.elementTypeSymbol)}`;\n case 'list':\n return `[]${doRender(jType.elementType, true, jType.elementTypeSymbol)}`;\n case 'namedType':\n return this.goName(jType.name, renderer, typeSym);\n case 'intersection':\n const renderedBranches = jType.branches.map((t, i) => doRender(t, false, jType.branchSymbols[i]));\n return `interface { ${renderedBranches.join('; ')} }`;\n case 'builtIn':\n switch (jType.builtIn) {\n case 'boolean':\n return `${prefix}bool`;\n case 'number':\n return `${prefix}f64`;\n case 'string':\n return `${prefix}string`;\n case 'any':\n return 'interface{}';\n case 'void':\n return '';\n }\n }\n };\n\n return doRender(jsiiType, isPtr, typeSymbol);\n }\n\n /**\n * Guess an item's go name based on it's TS name and context\n */\n private goName(input: string, renderer: GoRenderer, symbol: ts.Symbol | undefined) {\n let text = input.replace(/[^a-z0-9_]/gi, '');\n\n // Symbols can be an index signature, if this is a dot-style access to a map member. In this\n // case we should not cache against the symbol as this would cause all such accesses to the same\n // object to return the same text, which would be incorrect!\n const indexSignature = ts.SymbolFlags.Signature | ts.SymbolFlags.Transient;\n const cacheKey = symbol != null && (symbol.flags & indexSignature) === indexSignature ? input : symbol ?? input;\n\n const prev = this.idMap.get(cacheKey) ?? this.idMap.get(input);\n\n const symbolExported =\n symbol?.declarations?.[0] && ts.getCombinedModifierFlags(symbol?.declarations?.[0]) & ts.ModifierFlags.Export;\n\n // For some reason we are considering a global flag here; that solves cases\n // where the type is being declared, but it doesn't solve cases where the\n // type is being referenced. Also consider a potential `export` keyword on\n // the type declaration.\n const isExp = renderer.currentContext.isExported || symbolExported;\n\n if (prev) {\n // If an identifier has been renamed go get it\n text = prev.formatted;\n } else if (isExp && !renderer.currentContext.inMapLiteral) {\n // Uppercase exported and public symbols/members\n text = ucFirst(text);\n } else if (!renderer.currentContext.inMapLiteral) {\n // Lowercase unexported items that are capitalized in TS like structs/interfaces/classes\n text = lcFirst(text);\n }\n\n text = prefixReserved(text);\n\n if (text !== input && prev == null) {\n this.idMap.set(cacheKey, { formatted: text, type: getDeclarationType(renderer.currentContext) });\n }\n\n if (\n // Non-pointer references to parameters need to be de-referenced\n (!renderer.currentContext.isPtr &&\n !renderer.currentContext.isParameterName &&\n symbol?.valueDeclaration?.kind === ts.SyntaxKind.Parameter &&\n !renderer.currentContext.isPtrAssignmentRValue) ||\n // Pointer reference to non-interfaces are prefixed with *\n (renderer.currentContext.isPtr && prev && prev?.type !== DeclarationType.INTERFACE)\n ) {\n return `*${text}`;\n }\n return text;\n }\n}\n\n/**\n * Uppercase the first letter\n */\nfunction ucFirst(x: string) {\n return x.substring(0, 1).toUpperCase() + x.substring(1);\n}\n\n/**\n * Lowercase the first letter\n */\nfunction lcFirst(x: string) {\n return x.substring(0, 1).toLowerCase() + x.substring(1);\n}\n\nfunction wrapPtrExpression(typeChecker: ts.TypeChecker, node: ts.Expression, unwrapped: OTree): OTree {\n const type = typeOfExpression(typeChecker, node);\n const jsiiType = determineJsiiType(typeChecker, type);\n if (jsiiType.kind !== 'builtIn') {\n return unwrapped;\n }\n switch (jsiiType.builtIn) {\n case 'boolean':\n return new OTree(['jsii.Boolean(', unwrapped, ')']);\n case 'number':\n return new OTree(['jsii.Number(', unwrapped, ')']);\n case 'string':\n return new OTree(['jsii.String(', unwrapped, ')']);\n case 'any':\n case 'void':\n return unwrapped;\n }\n}\n\n/**\n * Wrap a string literal in the jsii.String helper\n */\nfunction jsiiStr(x: string) {\n return `jsii.String(${x})`;\n}\n\n/**\n * Wrap a string literal in the jsii.String helper\n */\nfunction jsiiNum(x: string) {\n return `jsii.Number(${x})`;\n}\n\n/**\n * Prefix reserved word identifiers with _\n */\nfunction prefixReserved(x: string) {\n if (['struct'].includes(x)) {\n return `${x}_`;\n }\n return x;\n}\n\nfunction getDeclarationType(ctx: GoLanguageContext) {\n if (ctx.isStruct) {\n return DeclarationType.STRUCT;\n }\n\n return DeclarationType.UNKNOWN;\n}\n\nfunction findUp<T extends ts.Node>(node: ts.Node, predicate: (node: ts.Node) => node is T): T | undefined {\n if (predicate(node)) {\n return node;\n }\n if (node.parent == null) {\n return undefined;\n }\n return findUp(node.parent, predicate);\n}\n\nfunction symbolFor(typeChecker: ts.TypeChecker, node: ts.Node): ts.Symbol | undefined {\n if (ts.isIdentifier(node)) {\n return typeChecker.getSymbolAtLocation(node);\n }\n if (ts.isPropertyAccessExpression(node)) {\n return typeChecker.getSymbolAtLocation(node.name);\n }\n // I don't know 🤷🏻‍♂️\n return undefined;\n}\n\n/**\n * Checks whether the provided node corresponds to a pointer-value.\n *\n * NOTE: This currently only checkes for parameter declarations. This is\n * presently used only to determine whether a variable reference needs to be\n * wrapped or not (i.e: \"jsii.String(varStr)\"), and parameter references are the\n * only \"always pointer\" values possible in that particular context.\n *\n * @param typeChecker a TypeChecker to use to resolve the node's symbol.\n * @param node the node to be checked.\n *\n * @returns true if the node corresponds to a pointer-value.\n */\nfunction isPointerValue(typeChecker: ts.TypeChecker, node: ts.Node): boolean {\n const symbol = typeChecker.getSymbolAtLocation(node);\n if (symbol == null) {\n // Can't find symbol, assuming it's a pointer...\n return true;\n }\n\n const declaration = symbol.valueDeclaration;\n if (declaration == null) {\n // Doesn't have declaration, assuming it's a pointer...\n return true;\n }\n\n // Now check if this is known pointer kind or not....\n return ts.isParameter(node);\n}\n"]}
package/package.json CHANGED
@@ -52,10 +52,10 @@
52
52
  "eslint-plugin-unicorn": "^56.0.1",
53
53
  "fs-monkey": "^1.1.0",
54
54
  "jest": "^29.7.0",
55
- "memfs": "^4.69.1",
55
+ "memfs": "^4.71.0",
56
56
  "mock-fs": "^5.5.0",
57
57
  "prettier": "^2.8.8",
58
- "projen": "^0.103.18",
58
+ "projen": "^0.103.19",
59
59
  "tar": "^6.2.1",
60
60
  "ts-jest": "^29.4.12",
61
61
  "ts-node": "^10.9.2"
@@ -91,7 +91,7 @@
91
91
  "publishConfig": {
92
92
  "access": "public"
93
93
  },
94
- "version": "6.0.15-dev.0",
94
+ "version": "6.0.15-dev.2",
95
95
  "packageManager": "yarn@4.13.0",
96
96
  "types": "lib/index.d.ts",
97
97
  "exports": {