Skip to content
This repository was archived by the owner on Jan 19, 2019. It is now read-only.

Commit 5f741a9

Browse files
j-f1JamesHenry
authored andcommitted
Fix: Allow other orderings of implements/extends clauses (fixes #361) (#363)
1 parent f5bd145 commit 5f741a9

File tree

4 files changed

+600
-15
lines changed

4 files changed

+600
-15
lines changed

lib/convert.js

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1277,19 +1277,13 @@ module.exports = function convert(config) {
12771277
}
12781278

12791279
const openBrace = nodeUtils.findNextToken(lastClassToken, ast);
1280-
const hasExtends = (heritageClauses.length && node.heritageClauses[0].token === SyntaxKind.ExtendsKeyword);
1280+
const superClass = heritageClauses.find(clause => clause.token === SyntaxKind.ExtendsKeyword);
12811281

1282-
let hasImplements = false;
1283-
let superClass;
1284-
1285-
if (hasExtends && heritageClauses[0].types.length > 0) {
1286-
superClass = heritageClauses.shift();
1287-
if (superClass.types[0] && superClass.types[0].typeArguments) {
1288-
result.superTypeParameters = convertTypeArgumentsToTypeParameters(superClass.types[0].typeArguments);
1289-
}
1282+
if (superClass && superClass.types[0] && superClass.types[0].typeArguments) {
1283+
result.superTypeParameters = convertTypeArgumentsToTypeParameters(superClass.types[0].typeArguments);
12901284
}
12911285

1292-
hasImplements = heritageClauses.length > 0;
1286+
const implementsClause = heritageClauses.find(clause => clause.token === SyntaxKind.ImplementsKeyword);
12931287

12941288
Object.assign(result, {
12951289
type: classNodeType,
@@ -1302,11 +1296,11 @@ module.exports = function convert(config) {
13021296
range: [openBrace.getStart(), result.range[1]],
13031297
loc: nodeUtils.getLocFor(openBrace.getStart(), node.end, ast)
13041298
},
1305-
superClass: (superClass ? convertChild(superClass.types[0].expression) : null)
1299+
superClass: (superClass && superClass.types[0] ? convertChild(superClass.types[0].expression) : null)
13061300
});
13071301

1308-
if (hasImplements) {
1309-
result.implements = heritageClauses[0].types.map(convertClassImplements);
1302+
if (implementsClause) {
1303+
result.implements = implementsClause.types.map(convertClassImplements);
13101304
}
13111305

13121306
if (node.decorators) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class ClassWithParentAndInterface extends MyOtherClass implements MyInterface {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class ClassWithParentAndInterface implements MyInterface extends MyOtherClass {}

0 commit comments

Comments
 (0)