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
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}}
. Aselect
with only a wildcard branch is redundant and should be replaced withy
.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 theThese
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