fix(compiler): warning prints "WARNING" instead of "ERROR" (#15125)

This commit is contained in:
Victor Berchet 2017-03-14 17:12:44 -07:00 committed by Chuck Jazdzewski
parent 3c15916e17
commit 3b1956bbf2
4 changed files with 38 additions and 9 deletions

View File

@ -110,17 +110,18 @@ export class ParseSourceSpan {
export enum ParseErrorLevel {
WARNING,
FATAL
ERROR,
}
export class ParseError {
constructor(
public span: ParseSourceSpan, public msg: string,
public level: ParseErrorLevel = ParseErrorLevel.FATAL) {}
public level: ParseErrorLevel = ParseErrorLevel.ERROR) {}
toString(): string {
const ctx = this.span.start.getContext(100, 3);
const contextStr = ctx ? ` ("${ctx.before}[ERROR ->]${ctx.after}")` : '';
const contextStr =
ctx ? ` ("${ctx.before}[${ParseErrorLevel[this.level]} ->]${ctx.after}")` : '';
const details = this.span.details ? `, ${this.span.details}` : '';
return `${this.msg}${contextStr}: ${this.span.start}${details}`;
}

View File

@ -161,7 +161,7 @@ export class BindingParser {
this._reportError(
`Assigning animation triggers via @prop="exp" attributes with an expression is invalid.` +
` Use property bindings (e.g. [@prop]="exp") or use an attribute without a value (e.g. @prop) instead.`,
sourceSpan, ParseErrorLevel.FATAL);
sourceSpan, ParseErrorLevel.ERROR);
}
this._parseAnimation(name, value, sourceSpan, targetMatchableAttrs, targetProps);
} else {
@ -366,7 +366,7 @@ export class BindingParser {
private _reportError(
message: string, sourceSpan: ParseSourceSpan,
level: ParseErrorLevel = ParseErrorLevel.FATAL) {
level: ParseErrorLevel = ParseErrorLevel.ERROR) {
this._targetErrors.push(new ParseError(sourceSpan, message, level));
}
@ -405,7 +405,7 @@ export class BindingParser {
const report = isAttr ? this._schemaRegistry.validateAttribute(propName) :
this._schemaRegistry.validateProperty(propName);
if (report.error) {
this._reportError(report.msg, sourceSpan, ParseErrorLevel.FATAL);
this._reportError(report.msg, sourceSpan, ParseErrorLevel.ERROR);
}
}
}

View File

@ -98,7 +98,7 @@ export class TemplateParser {
templateUrl: string): {template: TemplateAst[], pipes: CompilePipeSummary[]} {
const result = this.tryParse(component, template, directives, pipes, schemas, templateUrl);
const warnings = result.errors.filter(error => error.level === ParseErrorLevel.WARNING);
const errors = result.errors.filter(error => error.level === ParseErrorLevel.FATAL);
const errors = result.errors.filter(error => error.level === ParseErrorLevel.ERROR);
if (warnings.length > 0) {
this._console.warn(`Template parse warnings:\n${warnings.join('\n')}`);
@ -196,7 +196,7 @@ export class TemplateParser {
} else {
const error = new TemplateParseError(
`Reference "#${name}" is defined several times`, reference.sourceSpan,
ParseErrorLevel.FATAL);
ParseErrorLevel.ERROR);
errors.push(error);
}
}));
@ -731,7 +731,7 @@ class TemplateParseVisitor implements html.Visitor {
private _reportError(
message: string, sourceSpan: ParseSourceSpan,
level: ParseErrorLevel = ParseErrorLevel.FATAL) {
level: ParseErrorLevel = ParseErrorLevel.ERROR) {
this._targetErrors.push(new ParseError(sourceSpan, message, level));
}
}

View File

@ -0,0 +1,28 @@
/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {ParseError, ParseErrorLevel, ParseLocation, ParseSourceFile, ParseSourceSpan} from '../src/parse_util'
export function main() {
describe(
'ParseError',
() => {
it('should reflect the level in the message', () => {
const file = new ParseSourceFile(`foo\nbar\nfoo`, 'url');
const start = new ParseLocation(file, 4, 1, 0);
const end = new ParseLocation(file, 6, 1, 2);
const span = new ParseSourceSpan(start, end);
const fatal = new ParseError(span, 'fatal', ParseErrorLevel.ERROR);
expect(fatal.toString()).toEqual('fatal ("foo\n[ERROR ->]bar\nfoo"): url@1:0');
const warning = new ParseError(span, 'warning', ParseErrorLevel.WARNING);
expect(warning.toString()).toEqual('warning ("foo\n[WARNING ->]bar\nfoo"): url@1:0');
});
});
}