From 63a96ee6705ec221d4d62bfd51aba07183c5f222 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Mon, 28 Mar 2022 17:29:06 +0800 Subject: [PATCH] fix(`check-types`, `no-undefined-types`): safer optional chaining --- src/jsdocUtils.js | 6 +++--- src/rules/checkTypes.js | 2 +- src/rules/noUndefinedTypes.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/jsdocUtils.js b/src/jsdocUtils.js index fd0c1da4d..acdd7a790 100644 --- a/src/jsdocUtils.js +++ b/src/jsdocUtils.js @@ -677,12 +677,12 @@ const tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => { * @returns {boolean} */ const isNewPromiseExpression = (node) => { - return node.type === 'NewExpression' && node.callee.type === 'Identifier' && + return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' && node.callee.name === 'Promise'; }; const isVoidPromise = (node) => { - return node.typeParameters?.params?.[0]?.type === 'TSVoidKeyword'; + return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword'; }; /** @@ -716,7 +716,7 @@ const hasReturnValue = (node, promFilter) => { case 'FunctionExpression': case 'FunctionDeclaration': case 'ArrowFunctionExpression': { - return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node?.body)) || + return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, promFilter); } diff --git a/src/rules/checkTypes.js b/src/rules/checkTypes.js index 3a0a931fd..64e1f1a33 100644 --- a/src/rules/checkTypes.js +++ b/src/rules/checkTypes.js @@ -205,7 +205,7 @@ export default iterateJsdoc(({ // parent object without a parent match (and not // `unifyParentAndChildTypeChecks`) and we don't want // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555 - parentNode?.elements.length && ( + parentNode?.elements?.length && ( parentNode?.left?.type === 'JsdocTypeName' && parentNode?.left?.value === 'Object' ) diff --git a/src/rules/noUndefinedTypes.js b/src/rules/noUndefinedTypes.js index 9abfab8ab..98edef9db 100644 --- a/src/rules/noUndefinedTypes.js +++ b/src/rules/noUndefinedTypes.js @@ -126,7 +126,7 @@ export default iterateJsdoc(({ // In modules, including Node, there is a global scope at top with the // Program scope inside - const cjsOrESMScope = globalScope.childScopes[0]?.block.type === 'Program'; + const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program'; const allDefinedTypes = new Set(globalScope.variables.map(({ name,