unsplash / intlc

Compile ICU messages into code. Supports TypeScript and JSX. No runtime.
MIT License
56 stars 3 forks source link

Add external/public linter #144

Closed samhh closed 2 years ago

samhh commented 2 years ago

This PR adds an external/public linter for rules which theoretically all users of intlc would find useful, and adds a rule there to lint against {x, select, other {y}}. A select with only a wildcard branch is redundant and should be replaced with y.

The rule itself covers the first half of #136 (lint against lone wildcard) and #108 (parse/allow lone wildcard), but leaves alone #27 (case ordering). Plurals to come in another PR to prevent this one getting too large. I suggest reviewing commit-by-commit as most of them are small.

Most of the diff is due to a change to select in the AST. It's now represented with the These type: there can be cases, or a wildcard, or both.

At some point we may need to think about merging the rules in some sense so we're not iterating anew for each rule, a bit like how ESLint gives you selectors to match against. We can cross that bridge when we come to it: #143

samhh commented 2 years ago

Note to self: Add some tests for the new lint rule. Done.