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

Commit 38bd1ae

Browse files
authored
Breaking: Check for isTypeKeyword in type params (fixes #373) (#374)
1 parent 3727956 commit 38bd1ae

File tree

4 files changed

+62
-180
lines changed

4 files changed

+62
-180
lines changed

lib/convert.js

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,18 +110,30 @@ module.exports = function convert(config) {
110110
greaterThanToken.end
111111
],
112112
loc: nodeUtils.getLocFor(firstTypeArgument.pos - 1, greaterThanToken.end, ast),
113-
params: typeArguments.map(typeArgument => ({
114-
type: AST_NODE_TYPES.TSTypeReference,
115-
range: [
116-
typeArgument.getStart(),
117-
typeArgument.getEnd()
118-
],
119-
loc: nodeUtils.getLoc(typeArgument, ast),
120-
typeName: convertChild(typeArgument.typeName || typeArgument),
121-
typeParameters: (typeArgument.typeArguments)
122-
? convertTypeArgumentsToTypeParameters(typeArgument.typeArguments)
123-
: null
124-
}))
113+
params: typeArguments.map(typeArgument => {
114+
if (nodeUtils.isTypeKeyword(typeArgument.kind)) {
115+
return {
116+
type: AST_NODE_TYPES[`TS${SyntaxKind[typeArgument.kind]}`],
117+
range: [
118+
typeArgument.getStart(),
119+
typeArgument.getEnd()
120+
],
121+
loc: nodeUtils.getLoc(typeArgument, ast)
122+
};
123+
}
124+
return {
125+
type: AST_NODE_TYPES.TSTypeReference,
126+
range: [
127+
typeArgument.getStart(),
128+
typeArgument.getEnd()
129+
],
130+
loc: nodeUtils.getLoc(typeArgument, ast),
131+
typeName: convertChild(typeArgument.typeName || typeArgument),
132+
typeParameters: (typeArgument.typeArguments)
133+
? convertTypeArgumentsToTypeParameters(typeArgument.typeArguments)
134+
: undefined
135+
};
136+
})
125137
};
126138
}
127139

@@ -794,10 +806,13 @@ module.exports = function convert(config) {
794806
value: convertChild(node.initializer),
795807
computed: nodeUtils.isComputedProperty(node.name),
796808
static: nodeUtils.hasStaticModifierFlag(node),
797-
readonly: nodeUtils.hasModifier(SyntaxKind.ReadonlyKeyword, node),
798-
typeAnnotation: (node.type) ? convertTypeAnnotation(node.type) : null
809+
readonly: nodeUtils.hasModifier(SyntaxKind.ReadonlyKeyword, node)
799810
});
800811

812+
if (node.type) {
813+
result.typeAnnotation = convertTypeAnnotation(node.type);
814+
}
815+
801816
if (node.decorators) {
802817
result.decorators = convertDecorators(node.decorators);
803818
}

lib/node-utils.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,8 @@ module.exports = {
183183
convertToken,
184184
convertTokens,
185185
getNodeContainer,
186-
isWithinTypeAnnotation
186+
isWithinTypeAnnotation,
187+
isTypeKeyword
187188
};
188189
/* eslint-enable no-use-before-define */
189190

@@ -313,6 +314,27 @@ function isJSXToken(node) {
313314
);
314315
}
315316

317+
/**
318+
* Returns true if the given TSNode.kind value corresponds to a type keyword
319+
* @param {number} kind TypeScript SyntaxKind
320+
* @returns {boolean} is a type keyword
321+
*/
322+
function isTypeKeyword(kind) {
323+
switch (kind) {
324+
case SyntaxKind.AnyKeyword:
325+
case SyntaxKind.BooleanKeyword:
326+
case SyntaxKind.NeverKeyword:
327+
case SyntaxKind.NumberKeyword:
328+
case SyntaxKind.ObjectKeyword:
329+
case SyntaxKind.StringKeyword:
330+
case SyntaxKind.SymbolKeyword:
331+
case SyntaxKind.VoidKeyword:
332+
return true;
333+
default:
334+
return false;
335+
}
336+
}
337+
316338
/**
317339
* Returns the declaration kind of the given TSNode
318340
* @param {TSNode} node TypeScript AST node

tests/ast-alignment/spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,9 @@ const fixturePatternsToTest = [
423423
"typescript/basics/function-with-await.src.ts",
424424
"typescript/errorRecovery/class-extends-empty-implements.src.ts",
425425
"typescript/basics/const-enum.src.ts",
426+
"typescript/basics/class-with-readonly-property.src.ts",
427+
"typescript/expressions/call-expression-type-arguments.src.ts",
428+
"typescript/expressions/new-expression-type-arguments.src.ts",
426429

427430
{
428431
pattern: "typescript/basics/export-named-enum.src.ts",
@@ -486,7 +489,6 @@ const fixturePatternsToTest = [
486489
// "typescript/basics/class-with-protected-parameter-properties.src.ts",
487490
// "typescript/basics/class-with-public-parameter-properties.src.ts",
488491
// "typescript/basics/class-with-readonly-parameter-properties.src.ts",
489-
// "typescript/basics/class-with-readonly-property.src.ts",
490492
// "typescript/basics/class-with-type-parameter-default.src.ts",
491493
// "typescript/basics/class-with-type-parameter-underscore.src.ts",
492494
// "typescript/basics/class-with-type-parameter.src.ts",
@@ -544,8 +546,6 @@ const fixturePatternsToTest = [
544546
// "typescript/decorators/property-decorators/property-decorator-instance-member.src.ts",
545547
// "typescript/decorators/property-decorators/property-decorator-static-member.src.ts",
546548
// "typescript/errorRecovery/interface-empty-extends.src.ts",
547-
// "typescript/expressions/call-expression-type-arguments.src.ts",
548-
// "typescript/expressions/new-expression-type-arguments.src.ts",
549549
// "typescript/namespaces-and-modules/ambient-module-declaration-with-import.src.ts",
550550
// "typescript/namespaces-and-modules/declare-namespace-with-exported-function.src.ts",
551551
// "typescript/namespaces-and-modules/module-with-default-exports.src.ts",

0 commit comments

Comments
 (0)