function isSolelyIdentifierDefinitionLocation(contextToken) {
                var containingNodeKind = contextToken.parent.kind;
                switch (contextToken.kind) {
                    case 24 /* CommaToken */:
                        return containingNodeKind === 211 /* VariableDeclaration */ ||
                            containingNodeKind === 212 /* VariableDeclarationList */ ||
                            containingNodeKind === 193 /* VariableStatement */ ||
                            containingNodeKind === 217 /* EnumDeclaration */ ||
                            isFunction(containingNodeKind) ||
                            containingNodeKind === 214 /* ClassDeclaration */ ||
                            containingNodeKind === 186 /* ClassExpression */ ||
                            containingNodeKind === 215 /* InterfaceDeclaration */ ||
                            containingNodeKind === 162 /* ArrayBindingPattern */ ||
                            containingNodeKind === 216 /* TypeAliasDeclaration */; // type Map, K, |
                    case 21 /* DotToken */:
                        return containingNodeKind === 162 /* ArrayBindingPattern */; // var [.|
                    case 54 /* ColonToken */:
                        return containingNodeKind === 163 /* BindingElement */; // var {x :html|
                    case 19 /* OpenBracketToken */:
                        return containingNodeKind === 162 /* ArrayBindingPattern */; // var [x|
                    case 17 /* OpenParenToken */:
                        return containingNodeKind === 244 /* CatchClause */ ||
                            isFunction(containingNodeKind);
                    case 15 /* OpenBraceToken */:
                        return containingNodeKind === 217 /* EnumDeclaration */ ||
                            containingNodeKind === 215 /* InterfaceDeclaration */ ||
                            containingNodeKind === 155 /* TypeLiteral */; // let x : { |
                    case 23 /* SemicolonToken */:
                        return containingNodeKind === 140 /* PropertySignature */ &&
                            contextToken.parent && contextToken.parent.parent &&
                            (contextToken.parent.parent.kind === 215 /* InterfaceDeclaration */ ||
                                contextToken.parent.parent.kind === 155 /* TypeLiteral */); // let x : { a; |
                    case 25 /* LessThanToken */:
                        return containingNodeKind === 214 /* ClassDeclaration */ ||
                            containingNodeKind === 186 /* ClassExpression */ ||
                            containingNodeKind === 215 /* InterfaceDeclaration */ ||
                            containingNodeKind === 216 /* TypeAliasDeclaration */ ||
                            isFunction(containingNodeKind);
                    case 113 /* StaticKeyword */:
                        return containingNodeKind === 141 /* PropertyDeclaration */;
                    case 22 /* DotDotDotToken */:
                        return containingNodeKind === 138 /* Parameter */ ||
                            (contextToken.parent && contextToken.parent.parent &&
                                contextToken.parent.parent.kind === 162 /* ArrayBindingPattern */); // var [...z|
                    case 112 /* PublicKeyword */:
                    case 110 /* PrivateKeyword */:
                    case 111 /* ProtectedKeyword */:
                        return containingNodeKind === 138 /* Parameter */;
                    case 116 /* AsKeyword */:
                        return containingNodeKind === 226 /* ImportSpecifier */ ||
                            containingNodeKind === 230 /* ExportSpecifier */ ||
                            containingNodeKind === 224 /* NamespaceImport */;
                    case 73 /* ClassKeyword */:
                    case 81 /* EnumKeyword */:
                    case 107 /* InterfaceKeyword */:
                    case 87 /* FunctionKeyword */:
                    case 102 /* VarKeyword */:
                    case 123 /* GetKeyword */:
                    case 129 /* SetKeyword */:
                    case 89 /* ImportKeyword */:
                    case 108 /* LetKeyword */:
                    case 74 /* ConstKeyword */:
                    case 114 /* YieldKeyword */:
                    case 132 /* TypeKeyword */:
                        return true;
                }
                // Previous token may have been a keyword that was converted to an identifier.
                switch (contextToken.getText()) {
                    case "abstract":
                    case "async":
                    case "class":
                    case "const":
                    case "declare":
                    case "enum":
                    case "function":
                    case "interface":
                    case "let":
                    case "private":
                    case "protected":
                    case "public":
                    case "static":
                    case "var":
                    case "yield":
                        return true;
                }
                return false;
            }
@returns true if we are certain that the currently edited location must define a new location; false otherwise.