diff --git a/modules/@angular/compiler/src/html_lexer.ts b/modules/@angular/compiler/src/html_lexer.ts index cb9b256c95..8a2d96bcb5 100644 --- a/modules/@angular/compiler/src/html_lexer.ts +++ b/modules/@angular/compiler/src/html_lexer.ts @@ -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; @@ -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()); @@ -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() { diff --git a/modules/@angular/compiler/test/html_lexer_spec.ts b/modules/@angular/compiler/test/html_lexer_spec.ts index a0c754fd8a..c40dfe34ed 100644 --- a/modules/@angular/compiler/test/html_lexer_spec.ts +++ b/modules/@angular/compiler/test/html_lexer_spec.ts @@ -728,6 +728,14 @@ export function main() { }); describe('errors', () => { + it('should parse nested expansion forms', () => { + expect(tokenizeAndHumanizeErrors(`
before { after
`, 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://'); @@ -787,7 +795,7 @@ function tokenizeAndHumanizeLineColumn(input: string): any[] { token => [