angular-cli icon indicating copy to clipboard operation
angular-cli copied to clipboard

Schematics template syntax errors should point to the offending template

Open natsid opened this issue 7 years ago • 0 comments

Bug Report or Feature Request (mark with an x)

- [ ] bug report -> please search issues before submitting
- [x] feature request

Repro steps

  • Have a syntax error in your template.
  • Run the schematic with --debug, and get a stack trace that points to schematics code, but that doesn't point to any of your own code.

The log given by the failure

This is easier to handle when you when the syntax error is something simple like misspelling a variable name, e.g. you pass in template variable foobar and have a template with <%= foobat %>:

An error occured:
ReferenceError: foobat is not defined
    at eval (eval at template (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core/src/utils/template.js:257:16), <anonymous>:22:18)
    at /usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/template.js:35:79
    at tree.visit (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/base.js:130:30)
    at files.forEach.path (/usr/local/google/home/nsidhom/.nvm/versions/node/v10.1.0/lib/node_modules/@angular-devkit/schematics-cli/node_modules/@angular-devkit/schematics/src/tree/virtual.js:131:40)
    at Array.forEach (<anonymous>)
    at FileSystemCreateTree.visit (/usr/local/google/home/nsidhom/.nvm/versions/node/v10.1.0/lib/node_modules/@angular-devkit/schematics-cli/node_modules/@angular-devkit/schematics/src/tree/virtual.js:131:24)
    at /usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/base.js:126:14
    at MergeMapSubscriber.input.pipe.operators_1.mergeMap.inputTree [as project] (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/call.js:77:24)
    at MergeMapSubscriber._tryNext (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/node_modules/rxjs/internal/operators/mergeMap.js:65:27)
    at MergeMapSubscriber._next (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/node_modules/rxjs/internal/operators/mergeMap.js:55:18)

But if you have a syntax error such as putting an unintended second symbol within the brackets like <%= foobar unintended %>, then you just get SyntaxError: Unexpected identifier, which could be anywhere and is hard to hunt down:

An error occured:
SyntaxError: Unexpected identifier
    at Function (<anonymous>)
    at Object.template (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core/src/utils/template.js:257:16)
    at /usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/template.js:35:40
    at tree.visit (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/base.js:130:30)
    at files.forEach.path (/usr/local/google/home/nsidhom/.nvm/versions/node/v10.1.0/lib/node_modules/@angular-devkit/schematics-cli/node_modules/@angular-devkit/schematics/src/tree/virtual.js:131:40)
    at Array.forEach (<anonymous>)
    at FileSystemCreateTree.visit (/usr/local/google/home/nsidhom/.nvm/versions/node/v10.1.0/lib/node_modules/@angular-devkit/schematics-cli/node_modules/@angular-devkit/schematics/src/tree/virtual.js:131:24)
    at /usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/base.js:126:14
    at MergeMapSubscriber.input.pipe.operators_1.mergeMap.inputTree [as project] (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/src/rules/call.js:77:24)
    at MergeMapSubscriber._tryNext (/usr/local/google/home/nsidhom/schematics/pantheon/node_modules/@angular-devkit/schematics/node_modules/rxjs/internal/operators/mergeMap.js:65:27)

Desired functionality

I would like for the error to point me to the offending template, and if possible, the offending line of the template. As is, these errors are incredibly hard to debug.

natsid avatar Dec 14 '18 00:12 natsid