Closed kzc closed 6 years ago
My first guess is that we can only improve this by delaying validation of update and assignment expressions till after we traversed the whole tree. A simpler alternative would be to turn this error into a warning.
I think the former is the way to go. A warning with false positives is not helpful.
Acorn catches a number of these types of errors doesn't it? If so, maybe this logic is not required at all.
Well, I think a warning would be a reasonable approach, exactly because it could be a false positive. Also, a) it is easily fixable b) it is confusing for humans, so fixing it makes sense anyway. But I'm not opposed to the more elaborate and correct solution.
As far as I know acorn doesn't do anything like this, for example it parses const x = 1; ++x
.
The problem is that warnings are almost always ignored by users - even if valid. What's the downside of passing illegal code to Buble as you have above? The generated code will incorrectly behave as if the const
is a let
?
Yes, it will be transpiled to a var
. Since most people never run their untranspiled code, this would effectively mean that they can theoretically use const
in all kinds of wrong places, ignore the warnings and have incorrect assumptions about their code.
That doesn't sound desirable - particularly for users like me who never use linters.
I actually found an easy solution for this: The checks used to happen in initialise
, now I moved them to transpile
. I also added them to destructuring assignments.
@adrianheine Well done! Thanks.
Related sources:
src/program/types/AssignmentExpression.js#L7-L9 src/program/types/UpdateExpression.js#L7-L11