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

Commit f69dab5

Browse files
committed
Breaking: Only add .implements/.accessibility/.decorators if truthy
1 parent e8e82b2 commit f69dab5

File tree

5 files changed

+81
-453
lines changed

5 files changed

+81
-453
lines changed

lib/convert.js

+77-30
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,26 @@ module.exports = function convert(config) {
229229
});
230230
}
231231

232+
/**
233+
* Converts an array of TSNode parameters into an array of ESTreeNode params
234+
* @param {TSNode[]} parameters An array of TSNode params to be converted
235+
* @returns {ESTreeNode[]} an array of converted ESTreeNode params
236+
*/
237+
function convertParameters(parameters) {
238+
if (!parameters || !parameters.length) {
239+
return [];
240+
}
241+
return parameters.map(param => {
242+
const convertedParam = convertChild(param);
243+
if (!param.decorators || !param.decorators.length) {
244+
return convertedParam;
245+
}
246+
return Object.assign(convertedParam, {
247+
decorators: convertDecorators(param.decorators)
248+
});
249+
});
250+
}
251+
232252
/**
233253
* For nodes that are copied directly from the TypeScript AST into
234254
* ESTree mostly as-is. The only difference is the addition of a type
@@ -470,7 +490,7 @@ module.exports = function convert(config) {
470490

471491
case SyntaxKind.ForInStatement:
472492
case SyntaxKind.ForOfStatement: {
473-
const isAwait = node.awaitModifier && node.awaitModifier.kind === SyntaxKind.AwaitKeyword;
493+
const isAwait = !!(node.awaitModifier && node.awaitModifier.kind === SyntaxKind.AwaitKeyword);
474494
Object.assign(result, {
475495
type: SyntaxKind[node.kind],
476496
left: convertChild(node.initializer),
@@ -507,7 +527,7 @@ module.exports = function convert(config) {
507527
generator: !!node.asteriskToken,
508528
expression: false,
509529
async: nodeUtils.hasModifier(SyntaxKind.AsyncKeyword, node),
510-
params: node.parameters.map(convertChild),
530+
params: convertParameters(node.parameters),
511531
body: convertChild(node.body)
512532
});
513533

@@ -724,12 +744,19 @@ module.exports = function convert(config) {
724744
value: convertChild(node.initializer),
725745
computed: nodeUtils.isComputedProperty(node.name),
726746
static: nodeUtils.hasStaticModifierFlag(node),
727-
accessibility: nodeUtils.getTSNodeAccessibility(node),
728747
readonly: nodeUtils.hasModifier(SyntaxKind.ReadonlyKeyword, node),
729-
decorators: convertDecorators(node.decorators),
730748
typeAnnotation: (node.type) ? convertTypeAnnotation(node.type) : null
731749
});
732750

751+
if (node.decorators) {
752+
result.decorators = convertDecorators(node.decorators);
753+
}
754+
755+
const accessibility = nodeUtils.getTSNodeAccessibility(node);
756+
if (accessibility) {
757+
result.accessibility = accessibility;
758+
}
759+
733760
if (node.name.kind === SyntaxKind.Identifier && node.questionToken) {
734761
result.key.optional = true;
735762
}
@@ -787,11 +814,7 @@ module.exports = function convert(config) {
787814
/**
788815
* Unlike in object literal methods, class method params can have decorators
789816
*/
790-
method.params = node.parameters.map(param => {
791-
const convertedParam = convertChild(param);
792-
convertedParam.decorators = convertDecorators(param.decorators);
793-
return convertedParam;
794-
});
817+
method.params = convertParameters(node.parameters);
795818

796819
/**
797820
* TypeScript class methods can be defined as "abstract"
@@ -806,11 +829,18 @@ module.exports = function convert(config) {
806829
value: method,
807830
computed: nodeUtils.isComputedProperty(node.name),
808831
static: nodeUtils.hasStaticModifierFlag(node),
809-
kind: "method",
810-
accessibility: nodeUtils.getTSNodeAccessibility(node),
811-
decorators: convertDecorators(node.decorators)
832+
kind: "method"
812833
});
813834

835+
if (node.decorators) {
836+
result.decorators = convertDecorators(node.decorators);
837+
}
838+
839+
const accessibility = nodeUtils.getTSNodeAccessibility(node);
840+
if (accessibility) {
841+
result.accessibility = accessibility;
842+
}
843+
814844
}
815845

816846
if (result.key.type === AST_NODE_TYPES.Identifier && node.questionToken) {
@@ -844,13 +874,7 @@ module.exports = function convert(config) {
844874
constructor = {
845875
type: AST_NODE_TYPES.FunctionExpression,
846876
id: null,
847-
params: node.parameters.map(param => {
848-
const convertedParam = convertChild(param);
849-
const decorators = convertDecorators(param.decorators);
850-
return Object.assign(convertedParam, {
851-
decorators
852-
});
853-
}),
877+
params: convertParameters(node.parameters),
854878
generator: false,
855879
expression: false,
856880
async: false,
@@ -910,10 +934,15 @@ module.exports = function convert(config) {
910934
key: constructorKey,
911935
value: constructor,
912936
computed: constructorIsComputed,
913-
accessibility: nodeUtils.getTSNodeAccessibility(node),
914937
static: constructorIsStatic,
915938
kind: (constructorIsStatic || constructorIsComputed) ? "method" : "constructor"
916939
});
940+
941+
const accessibility = nodeUtils.getTSNodeAccessibility(node);
942+
if (accessibility) {
943+
result.accessibility = accessibility;
944+
}
945+
917946
break;
918947

919948
}
@@ -923,7 +952,7 @@ module.exports = function convert(config) {
923952
type: AST_NODE_TYPES.FunctionExpression,
924953
id: convertChild(node.name),
925954
generator: !!node.asteriskToken,
926-
params: node.parameters.map(convertChild),
955+
params: convertParameters(node.parameters),
927956
body: convertChild(node.body),
928957
async: nodeUtils.hasModifier(SyntaxKind.AsyncKeyword, node),
929958
expression: false
@@ -1022,7 +1051,7 @@ module.exports = function convert(config) {
10221051
type: AST_NODE_TYPES.ArrowFunctionExpression,
10231052
generator: false,
10241053
id: null,
1025-
params: node.parameters.map(convertChild),
1054+
params: convertParameters(node.parameters),
10261055
body: convertChild(node.body),
10271056
async: nodeUtils.hasModifier(SyntaxKind.AsyncKeyword, node),
10281057
expression: node.body.kind !== SyntaxKind.Block
@@ -1271,11 +1300,17 @@ module.exports = function convert(config) {
12711300
range: [openBrace.getStart(), result.range[1]],
12721301
loc: nodeUtils.getLocFor(openBrace.getStart(), node.end, ast)
12731302
},
1274-
superClass: (superClass ? convertChild(superClass.types[0].expression) : null),
1275-
implements: hasImplements ? heritageClauses[0].types.map(convertClassImplements) : [],
1276-
decorators: convertDecorators(node.decorators)
1303+
superClass: (superClass ? convertChild(superClass.types[0].expression) : null)
12771304
});
12781305

1306+
if (hasImplements) {
1307+
result.implements = heritageClauses[0].types.map(convertClassImplements);
1308+
}
1309+
1310+
if (node.decorators) {
1311+
result.decorators = convertDecorators(node.decorators);
1312+
}
1313+
12791314
const filteredMembers = node.members.filter(nodeUtils.isESTreeClassMember);
12801315

12811316
if (filteredMembers.length) {
@@ -1836,14 +1871,18 @@ module.exports = function convert(config) {
18361871
optional: nodeUtils.isOptional(node),
18371872
computed: nodeUtils.isComputedProperty(node.name),
18381873
key: convertChild(node.name),
1839-
params: node.parameters.map(parameter => convertChild(parameter)),
1874+
params: convertParameters(node.parameters),
18401875
typeAnnotation: (node.type) ? convertTypeAnnotation(node.type) : null,
1841-
accessibility: nodeUtils.getTSNodeAccessibility(node),
18421876
readonly: nodeUtils.hasModifier(SyntaxKind.ReadonlyKeyword, node),
18431877
static: nodeUtils.hasModifier(SyntaxKind.StaticKeyword, node),
18441878
export: nodeUtils.hasModifier(SyntaxKind.ExportKeyword, node)
18451879
});
18461880

1881+
const accessibility = nodeUtils.getTSNodeAccessibility(node);
1882+
if (accessibility) {
1883+
result.accessibility = accessibility;
1884+
}
1885+
18471886
if (node.typeParameters) {
18481887
result.typeParameters = convertTSTypeParametersToTypeParametersDeclaration(node.typeParameters);
18491888
}
@@ -1859,12 +1898,16 @@ module.exports = function convert(config) {
18591898
key: convertChild(node.name),
18601899
typeAnnotation: (node.type) ? convertTypeAnnotation(node.type) : null,
18611900
initializer: convertChild(node.initializer),
1862-
accessibility: nodeUtils.getTSNodeAccessibility(node),
18631901
readonly: nodeUtils.hasModifier(SyntaxKind.ReadonlyKeyword, node),
18641902
static: nodeUtils.hasModifier(SyntaxKind.StaticKeyword, node),
18651903
export: nodeUtils.hasModifier(SyntaxKind.ExportKeyword, node)
18661904
});
18671905

1906+
const accessibility = nodeUtils.getTSNodeAccessibility(node);
1907+
if (accessibility) {
1908+
result.accessibility = accessibility;
1909+
}
1910+
18681911
break;
18691912
}
18701913

@@ -1873,19 +1916,23 @@ module.exports = function convert(config) {
18731916
type: AST_NODE_TYPES.TSIndexSignature,
18741917
index: convertChild(node.parameters[0]),
18751918
typeAnnotation: (node.type) ? convertTypeAnnotation(node.type) : null,
1876-
accessibility: nodeUtils.getTSNodeAccessibility(node),
18771919
readonly: nodeUtils.hasModifier(SyntaxKind.ReadonlyKeyword, node),
18781920
static: nodeUtils.hasModifier(SyntaxKind.StaticKeyword, node),
18791921
export: nodeUtils.hasModifier(SyntaxKind.ExportKeyword, node)
18801922
});
18811923

1924+
const accessibility = nodeUtils.getTSNodeAccessibility(node);
1925+
if (accessibility) {
1926+
result.accessibility = accessibility;
1927+
}
1928+
18821929
break;
18831930
}
18841931

18851932
case SyntaxKind.ConstructSignature: {
18861933
Object.assign(result, {
18871934
type: AST_NODE_TYPES.TSConstructSignature,
1888-
params: node.parameters.map(parameter => convertChild(parameter)),
1935+
params: convertParameters(node.parameters),
18891936
typeAnnotation: (node.type) ? convertTypeAnnotation(node.type) : null
18901937
});
18911938

tests/lib/__snapshots__/basics.js.snap

-2
Original file line numberDiff line numberDiff line change
@@ -1084,7 +1084,6 @@ Object {
10841084
],
10851085
"type": "ClassBody",
10861086
},
1087-
"decorators": Array [],
10881087
"id": Object {
10891088
"loc": Object {
10901089
"end": Object {
@@ -1103,7 +1102,6 @@ Object {
11031102
],
11041103
"type": "Identifier",
11051104
},
1106-
"implements": Array [],
11071105
"loc": Object {
11081106
"end": Object {
11091107
"column": 1,

tests/lib/__snapshots__/comments.js.snap

-4
Original file line numberDiff line numberDiff line change
@@ -458,9 +458,7 @@ Object {
458458
"body": Object {
459459
"body": Array [
460460
Object {
461-
"accessibility": null,
462461
"computed": false,
463-
"decorators": Array [],
464462
"key": Object {
465463
"loc": Object {
466464
"end": Object {
@@ -554,9 +552,7 @@ Object {
554552
],
555553
"type": "ClassBody",
556554
},
557-
"decorators": Array [],
558555
"id": null,
559-
"implements": Array [],
560556
"loc": Object {
561557
"end": Object {
562558
"column": 1,

0 commit comments

Comments
 (0)