Initial draft of named tuple members · microsoft/TypeScript@c80c84a (original) (raw)
`@@ -179,7 +179,7 @@ namespace ts {
`
179
179
`case SyntaxKind.ArrayType:
`
180
180
`return visitNode(cbNode, (node).elementType);
`
181
181
`case SyntaxKind.TupleType:
`
182
``
`-
return visitNodes(cbNode, cbNodes, (node).elementTypes);
`
``
182
`+
return visitNodes(cbNode, cbNodes, (node).elements);
`
183
183
`case SyntaxKind.UnionType:
`
184
184
`case SyntaxKind.IntersectionType:
`
185
185
`return visitNodes(cbNode, cbNodes, (node).types);
`
`@@ -207,6 +207,11 @@ namespace ts {
`
207
207
`visitNode(cbNode, (node).type);
`
208
208
`case SyntaxKind.LiteralType:
`
209
209
`return visitNode(cbNode, (node).literal);
`
``
210
`+
case SyntaxKind.NamedTupleMember:
`
``
211
`+
return visitNode(cbNode, (node).dotDotDotToken) ||
`
``
212
`+
visitNode(cbNode, (node).name) ||
`
``
213
`+
visitNode(cbNode, (node).questionToken) ||
`
``
214
`+
visitNode(cbNode, (node).type);
`
210
215
`case SyntaxKind.ObjectBindingPattern:
`
211
216
`case SyntaxKind.ArrayBindingPattern:
`
212
217
`return visitNodes(cbNode, cbNodes, (node).elements);
`
`@@ -3056,9 +3061,33 @@ namespace ts {
`
3056
3061
`return type;
`
3057
3062
`}
`
3058
3063
``
``
3064
`+
function isNextTokenColonOrQuestionColon() {
`
``
3065
`+
return nextToken() === SyntaxKind.ColonToken || (token() === SyntaxKind.QuestionToken && nextToken() === SyntaxKind.ColonToken);
`
``
3066
`+
}
`
``
3067
+
``
3068
`+
function isTupleElementName() {
`
``
3069
`+
if (token() === SyntaxKind.DotDotDotToken) {
`
``
3070
`+
return tokenIsIdentifierOrKeyword(nextToken()) && isNextTokenColonOrQuestionColon();
`
``
3071
`+
}
`
``
3072
`+
return tokenIsIdentifierOrKeyword(token()) && isNextTokenColonOrQuestionColon();
`
``
3073
`+
}
`
``
3074
+
``
3075
`+
function parseTupleElementNameOrTupleElementType() {
`
``
3076
`+
if (lookAhead(isTupleElementName)) {
`
``
3077
`+
const node = createNode(SyntaxKind.NamedTupleMember);
`
``
3078
`+
node.dotDotDotToken = parseOptionalToken(SyntaxKind.DotDotDotToken);
`
``
3079
`+
node.name = parseIdentifierName();
`
``
3080
`+
node.questionToken = parseOptionalToken(SyntaxKind.QuestionToken);
`
``
3081
`+
parseExpected(SyntaxKind.ColonToken);
`
``
3082
`+
node.type = parseTupleElementType();
`
``
3083
`+
return addJSDocComment(finishNode(node));
`
``
3084
`+
}
`
``
3085
`+
return parseTupleElementType();
`
``
3086
`+
}
`
``
3087
+
3059
3088
`function parseTupleType(): TupleTypeNode {
`
3060
3089
`const node = createNode(SyntaxKind.TupleType);
`
3061
``
`-
node.elementTypes = parseBracketedList(ParsingContext.TupleElementTypes, parseTupleElementType, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken);
`
``
3090
`+
node.elements = parseBracketedList(ParsingContext.TupleElementTypes, parseTupleElementNameOrTupleElementType, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken);
`
3062
3091
`return finishNode(node);
`
3063
3092
`}
`
3064
3093
``