ReviewOS

also looking at this

stacks/dtsx

fix(extractor): keep the heritage clause of an anonymous default class

#3124
Open mkantautas wants to merge fix/anonymous-class-heritage into main
2 files +103 -1
packages/dtsx/src/extractor/scanner.tsmodified+10-1
Changes to packages/dtsx/src/extractor/scanner.ts
@@ -2607,7 +2607,16 @@ function scanDeclarationsInternal(_source: string, _filename: string, _keepComme
26072607 pos += 5 // skip 'class'
26082608 skipWhitespaceAndComments()
26092609
2610 const name = readIdent() || 'AnonymousClass'
2610 // `export default class extends Base {}` has no name: `extends`, or
2611 // `implements` before a type, begins its heritage clause, as TypeScript
2612 // reads it. Such a class gets a helper name the file does not use, as a
2613 // default-exported expression does.
2614 const isAnonymous = isDefault && (matchWord('extends') || (matchWord('implements') && isIdentStart(peekAfterWord('implements'))))
2615 let name = isAnonymous ? '' : (readIdent() || 'AnonymousClass')
2616 if (!name) {
2617 name = '__dtsx_default_class__'
2618 for (let suffix = 1; source.includes(name); suffix++) name = `__dtsx_default_class_${suffix}__`
2619 }
26112620 skipWhitespaceAndComments()
26122621
26132622 const generics = extractGenerics()