nl_tokens: Check if a given variable is assigned within a given syntax node
pl_tokens: function isVariableAssignedWithin ( symbol , node ) { var links = getNodeLinks ( <mask> ) ; if ( links . assignmentChecks ) { var cachedResult = links . assignmentChecks [ symbol . id ] ; if ( cachedResult !== undefined ) { return cachedResult ; } } else { links . assignmentChecks = { } ; } return links . assignmentChecks [ symbol . id ] = isAssignedIn ( node ) ; function isAssignedInBinaryExpression ( node ) { if ( node . operatorToken . kind >= 56 /* FirstAssignment */ && node . operatorToken . kind <= 68 /* LastAssignment */ ) { var n = node . left ; while ( n . kind === 172 /* ParenthesizedExpression */ ) { n = n . expression ; } if ( n . kind === 69 /* Identifier */ && getResolvedSymbol ( n ) === symbol ) { return true ; } } return ts . forEachChild ( node , isAssignedIn ) ; } function isAssignedInVariableDeclaration ( node ) { if ( ! ts . isBindingPattern ( node . name ) && getSymbolOfNode ( node ) === symbol && hasInitializer ( node ) ) { return true ; } return ts . forEachChild ( node , isAssignedIn ) ; } function isAssignedIn ( node ) { switch ( node . kind ) { case 181 /* BinaryExpression */ : return isAssignedInBinaryExpression ( node ) ; case 211 /* VariableDeclaration */ : case 163 /* BindingElement */ : return isAssignedInVariableDeclaration ( node ) ; case 161 /* ObjectBindingPattern */ : case 162 /* ArrayBindingPattern */ : case 164 /* ArrayLiteralExpression */ : case 165 /* ObjectLiteralExpression */ : case 166 /* PropertyAccessExpression */ : case 167 /* ElementAccessExpression */ : case 168 /* CallExpression */ : case 169 /* NewExpression */ : case 171 /* TypeAssertionExpression */ : case 189 /* AsExpression */ : case 172 /* ParenthesizedExpression */ : case 179 /* PrefixUnaryExpression */ : case 175 /* DeleteExpression */ : case 178 /* AwaitExpression */ : case 176 /* TypeOfExpression */ : case 177 /* VoidExpression */ : case 180 /* PostfixUnaryExpression */ : case 184 /* YieldExpression */ : case 182 /* ConditionalExpression */ : case 185 /* SpreadElementExpression */ : case 192 /* Block */ : case 193 /* VariableStatement */ : case 195 /* ExpressionStatement */ : case 196 /* IfStatement */ : case 197 /* DoStatement */ : case 198 /* WhileStatement */ : case 199 /* ForStatement */ : case 200 /* ForInStatement */ : case 201 /* ForOfStatement */ : case 204 /* ReturnStatement */ : case 205 /* WithStatement */ : case 206 /* SwitchStatement */ : case 241 /* CaseClause */ : case 242 /* DefaultClause */ : case 207 /* LabeledStatement */ : case 208 /* ThrowStatement */ : case 209 /* TryStatement */ : case 244 /* CatchClause */ : case 233 /* JsxElement */ : case 234 /* JsxSelfClosingElement */ : case 238 /* JsxAttribute */ : case 239 /* JsxSpreadAttribute */ : case 235 /* JsxOpeningElement */ : case 240 /* JsxExpression */ : return ts . forEachChild ( node , isAssignedIn ) ; } return false ; } }