Skip to content

Commit

Permalink
Support modifiers on classes
Browse files Browse the repository at this point in the history
  • Loading branch information
knutwannheden committed Sep 27, 2024
1 parent 777319f commit 0aa35db
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
35 changes: 33 additions & 2 deletions openrewrite/src/javascript/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,13 +187,44 @@ export class JavaScriptParserVisitor {
[]
)];
} else if (ts.isClassDeclaration(node)) {
return []; // FIXME
return node.modifiers ? node.modifiers?.filter(ts.isModifier).map(this.mapModifier) : [];
} else if (ts.isPropertyDeclaration(node)) {
return []; // FIXME
}
throw new Error(`Cannot get modifiers from ${node}`);
}

private mapModifier = (node: ts.Modifier) => {
let kind: J.Modifier.Type;
switch (node.kind) {
case ts.SyntaxKind.PublicKeyword:
kind = J.Modifier.Type.Public;
break;
case ts.SyntaxKind.PrivateKeyword:
kind = J.Modifier.Type.Private;
break;
case ts.SyntaxKind.ProtectedKeyword:
kind = J.Modifier.Type.Protected;
break;
case ts.SyntaxKind.StaticKeyword:
kind = J.Modifier.Type.Static;
break;
case ts.SyntaxKind.AbstractKeyword:
kind = J.Modifier.Type.Abstract;
break;
default:
kind = J.Modifier.Type.LanguageExtension;
}
return new J.Modifier(
randomId(),
this.prefix(node),
Markers.EMPTY,
kind == J.Modifier.Type.LanguageExtension ? node.getText() : null,
kind,
[]
);
}

private rightPadded<T>(t: T, trailing: Space, markers?: Markers) {
return new JRightPadded<T>(t, trailing, markers ?? Markers.EMPTY);
}
Expand Down Expand Up @@ -251,7 +282,7 @@ export class JavaScriptParserVisitor {
this.mapModifiers(node),
new J.ClassDeclaration.Kind(
randomId(),
Space.EMPTY, // TODO verify
node.modifiers ? this.suffix(node.modifiers[node.modifiers.length - 1]) : this.prefix(node),
Markers.EMPTY,
[],
J.ClassDeclaration.Kind.Type.Class
Expand Down
18 changes: 18 additions & 0 deletions openrewrite/test/javascript/parser/class.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,22 @@ describe('class mapping', () => {
typeScript('class A extends Object implements B , C,D {}')
);
});
test('export', () => {
rewriteRun(
//language=typescript
typeScript('export class A {}')
);
});
test('public', () => {
rewriteRun(
//language=typescript
typeScript('public class A {}')
);
});
test('export default', () => {
rewriteRun(
//language=typescript
typeScript('export default class A {}')
);
});
});

0 comments on commit 0aa35db

Please sign in to comment.