test(compiler): Demonstrate recoverable parsing of unterminated pipes (#39113)
There is no actionable change in this commit other than to pretty-print EOF tokens. Actual parsing of unterminated pipes is already supported, this just adds a test for it. Part of #38596 PR Close #39113
This commit is contained in:
parent
6085d2acc9
commit
3f00c6150b
|
@ -491,10 +491,14 @@ export class _ParseAST {
|
||||||
this.error(`Missing expected operator ${operator}`);
|
this.error(`Missing expected operator ${operator}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prettyPrintToken(tok: Token): string {
|
||||||
|
return tok === EOF ? 'end of input' : `token ${tok}`;
|
||||||
|
}
|
||||||
|
|
||||||
expectIdentifierOrKeyword(): string {
|
expectIdentifierOrKeyword(): string {
|
||||||
const n = this.next;
|
const n = this.next;
|
||||||
if (!n.isIdentifier() && !n.isKeyword()) {
|
if (!n.isIdentifier() && !n.isKeyword()) {
|
||||||
this.error(`Unexpected token ${n}, expected identifier or keyword`);
|
this.error(`Unexpected ${this.prettyPrintToken(n)}, expected identifier or keyword`);
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
this.advance();
|
this.advance();
|
||||||
|
@ -504,7 +508,7 @@ export class _ParseAST {
|
||||||
expectIdentifierOrKeywordOrString(): string {
|
expectIdentifierOrKeywordOrString(): string {
|
||||||
const n = this.next;
|
const n = this.next;
|
||||||
if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {
|
if (!n.isIdentifier() && !n.isKeyword() && !n.isString()) {
|
||||||
this.error(`Unexpected token ${n}, expected identifier, keyword, or string`);
|
this.error(`Unexpected ${this.prettyPrintToken(n)}, expected identifier, keyword, or string`);
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
this.advance();
|
this.advance();
|
||||||
|
|
|
@ -393,6 +393,11 @@ describe('parser', () => {
|
||||||
checkBinding('a | b:(c | d)', '(a | b:(c | d))');
|
checkBinding('a | b:(c | d)', '(a | b:(c | d))');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should parse incomplete pipes', () => {
|
||||||
|
checkBinding('a | b | ', '((a | b) | )');
|
||||||
|
expectBindingError('a | b | ', 'Unexpected end of input, expected identifier or keyword');
|
||||||
|
});
|
||||||
|
|
||||||
it('should only allow identifier or keyword as formatter names', () => {
|
it('should only allow identifier or keyword as formatter names', () => {
|
||||||
expectBindingError('"Foo"|(', 'identifier or keyword');
|
expectBindingError('"Foo"|(', 'identifier or keyword');
|
||||||
expectBindingError('"Foo"|1234', 'identifier or keyword');
|
expectBindingError('"Foo"|1234', 'identifier or keyword');
|
||||||
|
|
Loading…
Reference in New Issue