Parse stray identifier-ish as JSXText instead of trivia

This commit is contained in:
Andrew Branch 2019-05-21 15:28:16 -07:00
parent feaef9c829
commit 2856aabd70
No known key found for this signature in database
GPG Key ID: 22CCA4B120C427D2
4 changed files with 14 additions and 15 deletions

View File

@ -4439,8 +4439,9 @@ namespace ts {
parseExpected(SyntaxKind.CloseBraceToken);
}
else {
parseExpected(SyntaxKind.CloseBraceToken, /*message*/ undefined, /*shouldAdvance*/ false);
scanJsxText();
if (parseExpected(SyntaxKind.CloseBraceToken, /*message*/ undefined, /*shouldAdvance*/ false)) {
scanJsxText();
}
}
return finishNode(node);

View File

@ -582,12 +582,13 @@ namespace FourSlash {
});
}
public verifyErrorExistsAtRange(range: Range, code: number) {
public verifyErrorExistsAtRange(range: Range, code: number, expectedMessage?: string) {
const span = ts.createTextSpanFromRange(range);
const hasMatchingError = ts.some(
this.getDiagnostics(range.fileName),
({ code, start, length }) =>
({ code, messageText, start, length }) =>
code === code &&
(!expectedMessage || expectedMessage === messageText) &&
ts.isNumber(start) && ts.isNumber(length) &&
ts.textSpansEqual(span, { start, length }));
@ -3982,8 +3983,8 @@ namespace FourSlashInterface {
this.state.verifyNoErrors();
}
public errorExistsAtRange(range: FourSlash.Range, code: number) {
this.state.verifyErrorExistsAtRange(range, code);
public errorExistsAtRange(range: FourSlash.Range, code: number, message?: string) {
this.state.verifyErrorExistsAtRange(range, code, message);
}
public numberOfErrorsInCurrentFile(expected: number) {

View File

@ -238,7 +238,7 @@ declare namespace FourSlashInterface {
signatureHelp(...options: VerifySignatureHelpOptions[], ): void;
// Checks that there are no compile errors.
noErrors(): void;
errorExistsAtRange(range: Range, code: number): void;
errorExistsAtRange(range: Range, code: number, message?: string): void;
numberOfErrorsInCurrentFile(expected: number): void;
baselineCurrentFileBreakpointLocations(): void;
baselineCurrentFileNameOrDottedNameSpans(): void;

View File

@ -2,14 +2,11 @@
//@Filename: jsxExpressionFollowedByIdentifier.tsx
////declare var React: any;
////declare var x: string;
////const a = <div>{<div />[|x|]}</div>
////const b = <div x={<div />[|x|]} />
const range = test.ranges()[0];
verify.getSyntacticDiagnostics([{
code: 1005,
message: "'}' expected.",
range,
}]);
verify.quickInfoAt(range, 'var x: string');
test.ranges().forEach(range => {
verify.errorExistsAtRange(range, 1005, "'}' expected.");
// This is just to ensure getting quick info doesnt crash
verify.not.quickInfoExists();
});