Skip to content

Commit 0e9364f

Browse files
author
Andy
authored
Simplify functions for adding parse errors (microsoft#22513)
* Simplify functions for adding parse errors * Prefer parseErrorAt over parseErrorAtRange
1 parent 78c12cd commit 0e9364f

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

src/compiler/parser.ts

+23-21
Original file line numberDiff line numberDiff line change
@@ -979,10 +979,7 @@ namespace ts {
979979
}
980980

981981
function parseErrorAtCurrentToken(message: DiagnosticMessage, arg0?: any): void {
982-
const start = scanner.getTokenPos();
983-
const length = scanner.getTextPos() - start;
984-
985-
parseErrorAtPosition(start, length, message, arg0);
982+
parseErrorAt(scanner.getTokenPos(), scanner.getTextPos(), message, arg0);
986983
}
987984

988985
function parseErrorAtPosition(start: number, length: number, message: DiagnosticMessage, arg0?: any): void {
@@ -997,9 +994,16 @@ namespace ts {
997994
parseErrorBeforeNextFinishedNode = true;
998995
}
999996

1000-
function scanError(message: DiagnosticMessage, length?: number) {
1001-
const pos = scanner.getTextPos();
1002-
parseErrorAtPosition(pos, length || 0, message);
997+
function parseErrorAt(start: number, end: number, message: DiagnosticMessage, arg0?: any): void {
998+
parseErrorAtPosition(start, end - start, message, arg0);
999+
}
1000+
1001+
function parseErrorAtRange(range: TextRange, message: DiagnosticMessage, arg0?: any): void {
1002+
parseErrorAt(range.pos, range.end, message, arg0);
1003+
}
1004+
1005+
function scanError(message: DiagnosticMessage, length: number): void {
1006+
parseErrorAtPosition(scanner.getTextPos(), length, message);
10031007
}
10041008

10051009
function getNodePos(): number {
@@ -3809,12 +3813,13 @@ namespace ts {
38093813
const unaryOperator = token();
38103814
const simpleUnaryExpression = parseSimpleUnaryExpression();
38113815
if (token() === SyntaxKind.AsteriskAsteriskToken) {
3812-
const start = skipTrivia(sourceText, simpleUnaryExpression.pos);
3816+
const pos = skipTrivia(sourceText, simpleUnaryExpression.pos);
3817+
const { end } = simpleUnaryExpression;
38133818
if (simpleUnaryExpression.kind === SyntaxKind.TypeAssertionExpression) {
3814-
parseErrorAtPosition(start, simpleUnaryExpression.end - start, Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
3819+
parseErrorAt(pos, end, Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses);
38153820
}
38163821
else {
3817-
parseErrorAtPosition(start, simpleUnaryExpression.end - start, Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses, tokenToString(unaryOperator));
3822+
parseErrorAt(pos, end, Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses, tokenToString(unaryOperator));
38183823
}
38193824
}
38203825
return simpleUnaryExpression;
@@ -4085,7 +4090,7 @@ namespace ts {
40854090
node.closingElement = parseJsxClosingElement(inExpressionContext);
40864091

40874092
if (!tagNamesAreEquivalent(node.openingElement.tagName, node.closingElement.tagName)) {
4088-
parseErrorAtPosition(node.closingElement.pos, node.closingElement.end - node.closingElement.pos, Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, getTextOfNodeFromSourceText(sourceText, node.openingElement.tagName));
4093+
parseErrorAtRange(node.closingElement, Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, getTextOfNodeFromSourceText(sourceText, node.openingElement.tagName));
40894094
}
40904095

40914096
result = finishNode(node);
@@ -4141,11 +4146,10 @@ namespace ts {
41414146
// If we hit EOF, issue the error at the tag that lacks the closing element
41424147
// rather than at the end of the file (which is useless)
41434148
if (isJsxOpeningFragment(openingTag)) {
4144-
parseErrorAtPosition(openingTag.pos, openingTag.end - openingTag.pos, Diagnostics.JSX_fragment_has_no_corresponding_closing_tag);
4149+
parseErrorAtRange(openingTag, Diagnostics.JSX_fragment_has_no_corresponding_closing_tag);
41454150
}
41464151
else {
4147-
const openingTagName = openingTag.tagName;
4148-
parseErrorAtPosition(openingTagName.pos, openingTagName.end - openingTagName.pos, Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, getTextOfNodeFromSourceText(sourceText, openingTagName));
4152+
parseErrorAtRange(openingTag.tagName, Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, getTextOfNodeFromSourceText(sourceText, openingTag.tagName));
41494153
}
41504154
return undefined;
41514155
case SyntaxKind.LessThanSlashToken:
@@ -4317,8 +4321,7 @@ namespace ts {
43174321
const node = <JsxClosingFragment>createNode(SyntaxKind.JsxClosingFragment);
43184322
parseExpected(SyntaxKind.LessThanSlashToken);
43194323
if (tokenIsIdentifierOrKeyword(token())) {
4320-
const unexpectedTagName = parseJsxElementName();
4321-
parseErrorAtPosition(unexpectedTagName.pos, unexpectedTagName.end - unexpectedTagName.pos, Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
4324+
parseErrorAtRange(parseJsxElementName(), Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
43224325
}
43234326
if (inExpressionContext) {
43244327
parseExpected(SyntaxKind.GreaterThanToken);
@@ -6066,8 +6069,7 @@ namespace ts {
60666069
node.name = identifierName;
60676070
}
60686071
if (kind === SyntaxKind.ImportSpecifier && checkIdentifierIsKeyword) {
6069-
// Report error identifier expected
6070-
parseErrorAtPosition(checkIdentifierStart, checkIdentifierEnd - checkIdentifierStart, Diagnostics.Identifier_expected);
6072+
parseErrorAt(checkIdentifierStart, checkIdentifierEnd, Diagnostics.Identifier_expected);
60716073
}
60726074
return finishNode(node);
60736075
}
@@ -6591,7 +6593,7 @@ namespace ts {
65916593

65926594
function parseReturnTag(atToken: AtToken, tagName: Identifier): JSDocReturnTag {
65936595
if (forEach(tags, t => t.kind === SyntaxKind.JSDocReturnTag)) {
6594-
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, Diagnostics._0_tag_already_specified, tagName.escapedText);
6596+
parseErrorAt(tagName.pos, scanner.getTokenPos(), Diagnostics._0_tag_already_specified, tagName.escapedText);
65956597
}
65966598

65976599
const result = <JSDocReturnTag>createNode(SyntaxKind.JSDocReturnTag, atToken.pos);
@@ -6603,7 +6605,7 @@ namespace ts {
66036605

66046606
function parseTypeTag(atToken: AtToken, tagName: Identifier): JSDocTypeTag {
66056607
if (forEach(tags, t => t.kind === SyntaxKind.JSDocTypeTag)) {
6606-
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, Diagnostics._0_tag_already_specified, tagName.escapedText);
6608+
parseErrorAt(tagName.pos, scanner.getTokenPos(), Diagnostics._0_tag_already_specified, tagName.escapedText);
66076609
}
66086610

66096611
const result = <JSDocTypeTag>createNode(SyntaxKind.JSDocTypeTag, atToken.pos);
@@ -6813,7 +6815,7 @@ namespace ts {
68136815

68146816
function parseTemplateTag(atToken: AtToken, tagName: Identifier): JSDocTemplateTag | undefined {
68156817
if (some(tags, isJSDocTemplateTag)) {
6816-
parseErrorAtPosition(tagName.pos, scanner.getTokenPos() - tagName.pos, Diagnostics._0_tag_already_specified, tagName.escapedText);
6818+
parseErrorAt(tagName.pos, scanner.getTokenPos(), Diagnostics._0_tag_already_specified, tagName.escapedText);
68176819
}
68186820

68196821
// Type parameter list looks like '@template T,U,V'

0 commit comments

Comments
 (0)