Skip to content

Commit

Permalink
feat(HtmlLexer): better hint on unclosed ICU message errors
Browse files Browse the repository at this point in the history
  • Loading branch information
vicb committed Jul 23, 2016
1 parent 54f2edb commit 4117836
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
7 changes: 5 additions & 2 deletions modules/@angular/compiler/src/html_lexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,9 @@ class _HtmlTokenizer {
}

private _createError(msg: string, span: ParseSourceSpan): _ControlFlowError {
if (this._isInExpansionForm()) {
msg += ' (Do you have an unescaped "{" in your template?).';
}
const error = new HtmlTokenError(msg, this._currentTokenType, span);
this._currentTokenStart = null;
this._currentTokenType = null;
Expand Down Expand Up @@ -523,6 +526,8 @@ class _HtmlTokenizer {
this._requireCharCode(chars.$LBRACE);
this._endToken([]);

this._expansionCaseStack.push(HtmlTokenType.EXPANSION_FORM_START);

this._beginToken(HtmlTokenType.RAW_TEXT, this._getLocation());
const condition = this._readUntil(chars.$COMMA);
this._endToken([condition], this._getLocation());
Expand All @@ -534,8 +539,6 @@ class _HtmlTokenizer {
this._endToken([type], this._getLocation());
this._requireCharCode(chars.$COMMA);
this._attemptCharCodeUntilFn(isNotWhitespace);

this._expansionCaseStack.push(HtmlTokenType.EXPANSION_FORM_START);
}

private _consumeExpansionCaseStart() {
Expand Down
12 changes: 10 additions & 2 deletions modules/@angular/compiler/test/html_lexer_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,14 @@ export function main() {
});

describe('errors', () => {
it('should parse nested expansion forms', () => {
expect(tokenizeAndHumanizeErrors(`<p>before { after</p>`, true)).toEqual([[
HtmlTokenType.RAW_TEXT,
'Unexpected character "EOF" (Do you have an unescaped "{" in your template?).',
'0:21',
]]);
});

it('should include 2 lines of context in message', () => {
let src = '111\n222\n333\nE\n444\n555\n666\n';
let file = new ParseSourceFile(src, 'file://');
Expand Down Expand Up @@ -787,7 +795,7 @@ function tokenizeAndHumanizeLineColumn(input: string): any[] {
token => [<any>token.type, humanizeLineColumn(token.sourceSpan.start)]);
}

function tokenizeAndHumanizeErrors(input: string): any[] {
return tokenizeHtml(input, 'someUrl')
function tokenizeAndHumanizeErrors(input: string, tokenizeExpansionForms: boolean = false): any[] {
return tokenizeHtml(input, 'someUrl', tokenizeExpansionForms)
.errors.map(e => [<any>e.tokenType, e.msg, humanizeLineColumn(e.span.start)]);
}

0 comments on commit 4117836

Please sign in to comment.