From f5d71ae5da91c34152efe2fa0d6a5917de849961 Mon Sep 17 00:00:00 2001 From: cxtom Date: Tue, 4 Jun 2019 19:46:51 +0800 Subject: [PATCH] feat: support x === undefined & x !== undefined --- src/features/global.ts | 23 ++++++++++++++++++++++- src/utilities/nodeTest.ts | 2 +- test/features/isset.php | 9 +++++++++ test/features/isset.ts | 9 +++++++++ typescript.d.ts | 1 + 5 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 test/features/isset.php create mode 100644 test/features/isset.ts diff --git a/src/features/global.ts b/src/features/global.ts index 3c1ebd6..a94c4e4 100644 --- a/src/features/global.ts +++ b/src/features/global.ts @@ -7,7 +7,11 @@ import { EmitHint, isCallExpression, isPropertyAccessExpression, - isIdentifier + isIdentifier, + isBinaryExpression, + SyntaxKind, + createCall, + createIdentifier } from 'typescript'; import method from '../utilities/method'; @@ -59,6 +63,23 @@ export default { } } + if ( + isBinaryExpression(node) + && node.operatorToken.kind === SyntaxKind.EqualsEqualsEqualsToken + && node.right.originalKeywordKind === SyntaxKind.UndefinedKeyword + ) { + helpers.writePunctuation('!'); + return helpers.emitExpression(createCall(createIdentifier('isset'), [], [node.left])); + } + + if ( + isBinaryExpression(node) + && node.operatorToken.kind === SyntaxKind.ExclamationEqualsEqualsToken + && node.right.originalKeywordKind === SyntaxKind.UndefinedKeyword + ) { + return helpers.emitExpression(createCall(createIdentifier('isset'), [], [node.left])); + } + return false; } }; diff --git a/src/utilities/nodeTest.ts b/src/utilities/nodeTest.ts index c5865c4..863b8c7 100644 --- a/src/utilities/nodeTest.ts +++ b/src/utilities/nodeTest.ts @@ -184,4 +184,4 @@ export function isVisibilityModifier(node: ts.Modifier) { export function isSupportedPropertyModifier(node: ts.Modifier) { return isVisibilityModifier(node) || node.kind === SyntaxKind.StaticKeyword; -} +} \ No newline at end of file diff --git a/test/features/isset.php b/test/features/isset.php new file mode 100644 index 0000000..f8f4b67 --- /dev/null +++ b/test/features/isset.php @@ -0,0 +1,9 @@ +