fix(compiler-cli): report all diagnostic error messages (#19886)
This fixes a problem introduced in 8d45fefc313aebd0db7b320a1d324c2d4bebd268 which modified how diagnostic error messages are reported for structural metadata errors causing some of the diagnostics to be lost. PR Close #19886
This commit is contained in:
parent
d3211a2468
commit
a0ae120093
@ -510,21 +510,25 @@ class AngularCompilerProgram implements Program {
|
|||||||
if (isSyntaxError(e)) {
|
if (isSyntaxError(e)) {
|
||||||
const parserErrors = getParseErrors(e);
|
const parserErrors = getParseErrors(e);
|
||||||
if (parserErrors && parserErrors.length) {
|
if (parserErrors && parserErrors.length) {
|
||||||
this._structuralDiagnostics =
|
this._structuralDiagnostics = [
|
||||||
parserErrors.map<Diagnostic>(e => ({
|
...(this._structuralDiagnostics || []),
|
||||||
|
...parserErrors.map<Diagnostic>(e => ({
|
||||||
messageText: e.contextualMessage(),
|
messageText: e.contextualMessage(),
|
||||||
category: ts.DiagnosticCategory.Error,
|
category: ts.DiagnosticCategory.Error,
|
||||||
span: e.span,
|
span: e.span,
|
||||||
source: SOURCE,
|
source: SOURCE,
|
||||||
code: DEFAULT_ERROR_CODE
|
code: DEFAULT_ERROR_CODE
|
||||||
}));
|
}))
|
||||||
|
];
|
||||||
} else {
|
} else {
|
||||||
this._structuralDiagnostics = [{
|
this._structuralDiagnostics = [
|
||||||
|
...(this._structuralDiagnostics || []), {
|
||||||
messageText: e.message,
|
messageText: e.message,
|
||||||
category: ts.DiagnosticCategory.Error,
|
category: ts.DiagnosticCategory.Error,
|
||||||
source: SOURCE,
|
source: SOURCE,
|
||||||
code: DEFAULT_ERROR_CODE
|
code: DEFAULT_ERROR_CODE
|
||||||
}];
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1391,5 +1391,44 @@ describe('ngc transformer command-line', () => {
|
|||||||
main(['-p', path.join(basePath, 'src/tsconfig.json')], message => messages.push(message));
|
main(['-p', path.join(basePath, 'src/tsconfig.json')], message => messages.push(message));
|
||||||
expect(exitCode).toBe(0, 'Compile failed unexpectedly.\n ' + messages.join('\n '));
|
expect(exitCode).toBe(0, 'Compile failed unexpectedly.\n ' + messages.join('\n '));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should emit all structural errors', () => {
|
||||||
|
write('src/tsconfig.json', `{
|
||||||
|
"extends": "../tsconfig-base.json",
|
||||||
|
"files": ["test-module.ts"]
|
||||||
|
}`);
|
||||||
|
write('src/lib/indirect2.ts', `
|
||||||
|
declare var f: any;
|
||||||
|
export const t2 = f\`<p>hello</p>\`;
|
||||||
|
`);
|
||||||
|
write('src/lib/indirect1.ts', `
|
||||||
|
import {t2} from './indirect2';
|
||||||
|
export const t1 = t2 + ' ';
|
||||||
|
`);
|
||||||
|
write('src/lib/test.component.ts', `
|
||||||
|
import {Component} from '@angular/core';
|
||||||
|
import {t1} from './indirect1';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
template: t1
|
||||||
|
})
|
||||||
|
export class TestComponent {}
|
||||||
|
`);
|
||||||
|
write('src/test-module.ts', `
|
||||||
|
import {NgModule} from '@angular/core';
|
||||||
|
import {TestComponent} from './lib/test.component';
|
||||||
|
|
||||||
|
@NgModule({declarations: [TestComponent]})
|
||||||
|
export class TestModule {}
|
||||||
|
`);
|
||||||
|
const messages: string[] = [];
|
||||||
|
const exitCode =
|
||||||
|
main(['-p', path.join(basePath, 'src/tsconfig.json')], message => messages.push(message));
|
||||||
|
expect(exitCode).toBe(1, 'Compile was expected to fail');
|
||||||
|
expect(messages).toEqual([
|
||||||
|
'Error: Error: Error encountered resolving symbol values statically. Tagged template expressions are not supported in metadata (position 3:27 in the original .ts file)\n' +
|
||||||
|
'Error: No template specified for component TestComponent\n'
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user