riot / cli

Riot.js command line tool
MIT License
46 stars 9 forks source link

Print user-friendly compilation errors #13

Closed tayler1 closed 8 years ago

tayler1 commented 8 years ago
$ riot tags --type es6
SyntaxError: unknown: Unexpected token (3:9)

Unable to debug errors based on such messages because (3:9) points to another line in original file.
Extend print with code output and filename like you did while tag syntax checking.

GianlucaGuarini commented 8 years ago

@tayler1 can you post the tag code where the error gets thrown please? Probably you simply forgot to install babel sudo npm install babel@5.8 -g

tayler1 commented 8 years ago

I got babel installed and it throws syntax error while tag processing (as shown above). One tag in tags folder:

$ cat tags/fn.tag
<fn>
  <span></span>

  set(v) {
    this.name = v
  }
</fn>
GianlucaGuarini commented 8 years ago

closing this issue in favor of this we have already answered ;)

tayler1 commented 8 years ago

I dont understand how this is related to 55 This issue is not about es6 or method definitions or any kind of stuff.

Better than previous but still unable to print filename.

$ riot tags --type coffee
[stdin]:4:5: error: unexpected this
    this.name = v
    ^^^^

Stuck... Deprecated octal what? where?

$ riot tags --type livescript
SyntaxError: deprecated octal literal 01 on line 1

L2

$ riot tags --type typescript
Error: L2: ';' expected.
L4: Declaration or statement expected.

Errors must be descriptive. Why I need (3:9) if original file doesn't contains any errors on line 3?

GianlucaGuarini commented 8 years ago

I dont understand how this is related to 55

You are trying to pass invalid code to babel and/or typescript, either you use the riot parser or you use compliant code for your custom parsers babel (es6 javascript), typescript, coffeescript ..

<fn>
  <span></span>

<script>
// this is not valid js, neither typescript and neither coffeescript
// this will be only transformed to valid javascript in case you will use the default riot parsers
// for babel use this.set = () => {  }
  set(v) { 
    this.name = v
  }
</script>
</fn>

These errors come from typescript and babel itself, it's not riot throwing them. But I will reopen this issue trying to see if I can get better output.

reverie commented 8 years ago

I'm running into this with typescript as well. What's worse is that the errors for different tags all run together, and it's impossible to tell what's what.

L5: ';' expected.
L0: Subsequent variable declarations must have the same type.  Variable 'self' must be of type 'Window', but here has type 'any'.
L1: Cannot find name '$'.
L1: Property 'q' does not exist on type 'Window'.
L2: Cannot find name 'doSearch'.
L3: Property 'trigger' does not exist on type 'Window'.
L8: Property 'doSearch' does not exist on type 'Window'.