in src/languages/python.ts [568:605]
public override classDeclaration(node: ts.ClassDeclaration, context: PythonVisitorContext): OTree {
const allHeritageClauses = Array.from(node.heritageClauses ?? []).flatMap((h) => Array.from(h.types));
// List of booleans matching `allHeritage` array
const isJsii = allHeritageClauses.map(
(e) =>
fmap(context.typeOfExpression(e.expression), (type) => isJsiiProtocolType(context.typeChecker, type)) ?? false,
);
const jsiiImplements = allHeritageClauses.filter((_, i) => isJsii[i]);
const inlineHeritage = allHeritageClauses.filter((_, i) => !isJsii[i]);
const hasHeritage = inlineHeritage.length > 0;
const members = context.updateContext({ inClass: true }).convertAll(node.members);
if (members.length === 0) {
members.push(new OTree(['\npass'], []));
}
const ret = new OTree(
[
...jsiiImplements.flatMap((i) => ['@jsii.implements(', context.convert(i.expression), ')\n']),
'class ',
node.name ? context.textOf(node.name) : '???',
hasHeritage ? '(' : '',
...inlineHeritage.map((t) => context.convert(t.expression)),
hasHeritage ? ')' : '',
': ',
],
members,
{
indent: 4,
canBreakLine: true,
},
);
return ret;
}