unsplash / intlc

Compile ICU messages into code. Supports TypeScript and JSX. No runtime.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Multiple error reporting

samhh opened this issue · comments

Given:

{
  "f": {
    "message": "{x, bad1}"
  },
  "g": {
    "message": "{y, bad2}"
  }
}

We currently fail at the first sign of trouble:

$ intlc compile <file> -l <locale>
f:1:5:
  |
1 | {x, bad1}
  |     ^^^^^
unexpected "bad1}"
expecting "boolean", "date", "number", "plural", "select", "selectordinal", "time", or white space

Ideally we'd be able to continue trying to parse messages, collating all failures and reporting them together at the end:

$ intlc compile <file> -l <locale>
2 messages failed to compile:

f:1:5:
  |
1 | {x, bad1}
  |     ^^^^^
unexpected "bad1}"
expecting "boolean", "date", "number", "plural", "select", "selectordinal", "time", or white space

g:1:5:
  |
1 | {y, bad2}
  |     ^^^^^
unexpected "bad2}"
expecting "boolean", "date", "number", "plural", "select", "selectordinal", "time", or white space

Better yet the line numbers/etc could correlate to the JSON input:

$ intlc compile <file> -l <locale>
2 messages failed to compile:

<file>:3:5:
  |
3 |     "message": {x, bad1}
  |                    ^^^^^
unexpected "bad1}"
expecting "boolean", "date", "number", "plural", "select", "selectordinal", "time", or white space

<file>:6:5:
  |
6 |     "message": {y, bad2}
  |                    ^^^^^
unexpected "bad2}"
expecting "boolean", "date", "number", "plural", "select", "selectordinal", "time", or white space