Merge pull request #7007 from RyanCavanaugh/fix7002

Add undefined checks for malformed type tags
This commit is contained in:
Ryan Cavanaugh
2016-02-10 13:16:45 -08:00
6 changed files with 58 additions and 4 deletions
+3 -3
View File
@@ -2613,7 +2613,7 @@ namespace ts {
function getJSDocTypeForVariableLikeDeclarationFromJSDocComment(declaration: VariableLikeDeclaration): JSDocType {
// First, see if this node has an @type annotation on it directly.
const typeTag = getJSDocTypeTag(declaration);
if (typeTag) {
if (typeTag && typeTag.typeExpression) {
return typeTag.typeExpression.type;
}
@@ -2623,7 +2623,7 @@ namespace ts {
// @type annotation might have been on the variable statement, try that instead.
const annotation = getJSDocTypeTag(declaration.parent.parent);
if (annotation) {
if (annotation && annotation.typeExpression) {
return annotation.typeExpression.type;
}
}
@@ -7414,7 +7414,7 @@ namespace ts {
function getTypeForThisExpressionFromJSDoc(node: Node) {
const typeTag = getJSDocTypeTag(node);
if (typeTag && typeTag.typeExpression.type.kind === SyntaxKind.JSDocFunctionType) {
if (typeTag && typeTag.typeExpression && typeTag.typeExpression.type && typeTag.typeExpression.type.kind === SyntaxKind.JSDocFunctionType) {
const jsDocFunctionType = <JSDocFunctionType>typeTag.typeExpression.type;
if (jsDocFunctionType.parameters.length > 0 && jsDocFunctionType.parameters[0].type.kind === SyntaxKind.JSDocThisType) {
return getTypeFromTypeNode(jsDocFunctionType.parameters[0].type);
+2 -1
View File
@@ -895,7 +895,8 @@ namespace Harness {
{ name: "includeBuiltFile", type: "string" },
{ name: "fileName", type: "string" },
{ name: "libFiles", type: "string" },
{ name: "noErrorTruncation", type: "boolean" }
{ name: "noErrorTruncation", type: "boolean" },
{ name: "suppressOutputPathCheck", type: "boolean" }
];
let optionsIndex: ts.Map<ts.CommandLineOption>;
@@ -0,0 +1,17 @@
//// [myFile02.js]
/**
* Checks if `value` is classified as an `Array` object.
*
* @type Function
*/
var isArray = Array.isArray;
//// [myFile02.js]
/**
* Checks if `value` is classified as an `Array` object.
*
* @type Function
*/
var isArray = Array.isArray;
@@ -0,0 +1,13 @@
=== tests/cases/conformance/salsa/myFile02.js ===
/**
* Checks if `value` is classified as an `Array` object.
*
* @type Function
*/
var isArray = Array.isArray;
>isArray : Symbol(isArray, Decl(myFile02.js, 6, 3))
>Array.isArray : Symbol(ArrayConstructor.isArray, Decl(lib.d.ts, --, --))
>Array : Symbol(Array, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
>isArray : Symbol(ArrayConstructor.isArray, Decl(lib.d.ts, --, --))
@@ -0,0 +1,13 @@
=== tests/cases/conformance/salsa/myFile02.js ===
/**
* Checks if `value` is classified as an `Array` object.
*
* @type Function
*/
var isArray = Array.isArray;
>isArray : (arg: any) => arg is any[]
>Array.isArray : (arg: any) => arg is any[]
>Array : ArrayConstructor
>isArray : (arg: any) => arg is any[]
@@ -0,0 +1,10 @@
// @allowJS: true
// @suppressOutputPathCheck: true
// @filename: myFile02.js
/**
* Checks if `value` is classified as an `Array` object.
*
* @type Function
*/
var isArray = Array.isArray;