diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 68d41199de2..fde878c0533 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -9751,6 +9751,7 @@ module ts { case SyntaxKind.NumberKeyword: case SyntaxKind.StringKeyword: case SyntaxKind.BooleanKeyword: + case SyntaxKind.SymbolKeyword: return true; case SyntaxKind.VoidKeyword: return node.parent.kind !== SyntaxKind.VoidExpression; @@ -10529,7 +10530,7 @@ module ts { return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } if (parameter.type.kind !== SyntaxKind.StringKeyword && parameter.type.kind !== SyntaxKind.NumberKeyword) { - if (isESSymbolTypeNode(parameter.type)) { + if (parameter.type.kind === SyntaxKind.SymbolKeyword) { if (languageVersion < ScriptTarget.ES6) { return grammarErrorOnNode(parameter.type, Diagnostics.Symbol_indexers_are_only_available_when_targeting_ECMAScript_6_and_higher); } diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 5acaf560273..4d7c7f9d3b0 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -579,6 +579,7 @@ module ts { case SyntaxKind.StringKeyword: case SyntaxKind.NumberKeyword: case SyntaxKind.BooleanKeyword: + case SyntaxKind.SymbolKeyword: case SyntaxKind.VoidKeyword: case SyntaxKind.StringLiteral: return writeTextOfNode(currentSourceFile, type); diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 6942be3cf13..642821ffbcd 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -2515,6 +2515,7 @@ module ts { case SyntaxKind.StringKeyword: case SyntaxKind.NumberKeyword: case SyntaxKind.BooleanKeyword: + case SyntaxKind.SymbolKeyword: // If these are followed by a dot, then parse these out as a dotted type reference instead. var node = tryParse(parseKeywordAndNoDot); return node || parseTypeReference(); @@ -2539,6 +2540,7 @@ module ts { case SyntaxKind.StringKeyword: case SyntaxKind.NumberKeyword: case SyntaxKind.BooleanKeyword: + case SyntaxKind.SymbolKeyword: case SyntaxKind.VoidKeyword: case SyntaxKind.TypeOfKeyword: case SyntaxKind.OpenBraceToken: diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index fbbd69bbd69..f85df69f026 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -82,6 +82,7 @@ module ts { "string": SyntaxKind.StringKeyword, "super": SyntaxKind.SuperKeyword, "switch": SyntaxKind.SwitchKeyword, + "symbol": SyntaxKind.SymbolKeyword, "this": SyntaxKind.ThisKeyword, "throw": SyntaxKind.ThrowKeyword, "true": SyntaxKind.TrueKeyword, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 1c79ef169e9..96689afba1d 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -140,6 +140,7 @@ module ts { NumberKeyword, SetKeyword, StringKeyword, + SymbolKeyword, TypeKeyword, // Parse tree nodes diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index abf902d5fd1..9d8f5f9b563 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -852,12 +852,6 @@ module ts { return node.kind === SyntaxKind.PropertyAccessExpression && isESSymbolIdentifier((node).expression); } - export function isESSymbolTypeNode(node: Node): boolean { - return node.kind === SyntaxKind.TypeReference && - (node).typeArguments === undefined && - isESSymbolIdentifier((node).typeName); - } - /** * Includes the word "Symbol" with unicode escapes */ diff --git a/src/services/formatting/tokenRange.ts b/src/services/formatting/tokenRange.ts index 61fcb26dc9b..6dace543eab 100644 --- a/src/services/formatting/tokenRange.ts +++ b/src/services/formatting/tokenRange.ts @@ -134,7 +134,7 @@ module ts.formatting { static UnaryPredecrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.OpenParenToken, SyntaxKind.ThisKeyword, SyntaxKind.NewKeyword]); static UnaryPostdecrementExpressions = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.CloseParenToken, SyntaxKind.CloseBracketToken, SyntaxKind.NewKeyword]); static Comments = TokenRange.FromTokens([SyntaxKind.SingleLineCommentTrivia, SyntaxKind.MultiLineCommentTrivia]); - static TypeNames = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.NumberKeyword, SyntaxKind.StringKeyword, SyntaxKind.BooleanKeyword, SyntaxKind.VoidKeyword, SyntaxKind.AnyKeyword]); + static TypeNames = TokenRange.FromTokens([SyntaxKind.Identifier, SyntaxKind.NumberKeyword, SyntaxKind.StringKeyword, SyntaxKind.BooleanKeyword, SyntaxKind.SymbolKeyword, SyntaxKind.VoidKeyword, SyntaxKind.AnyKeyword]); } } } \ No newline at end of file diff --git a/src/services/services.ts b/src/services/services.ts index fcb5c696a38..277f574578a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -5754,7 +5754,8 @@ module ts { else if (token === SyntaxKind.AnyKeyword || token === SyntaxKind.StringKeyword || token === SyntaxKind.NumberKeyword || - token === SyntaxKind.BooleanKeyword) { + token === SyntaxKind.BooleanKeyword || + token === SyntaxKind.SymbolKeyword) { if (angleBracketStack > 0 && !classifyKeywordsInGenerics) { // If it looks like we're could be in something generic, don't classify this // as a keyword. We may just get overwritten by the syntactic classifier,