Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2.8k
Closed
Labels
Milestone
Description
Across the AST we have a lot of cases where we've made properties optional.
I think there were various reasons for why it was done this way (not that I can find the comments any more).
From the perspective of an AST consumer,undefined
can create some very weird states. Two examples of this:
- There are a number of
boolean
properties that are optional. On the surface this makes it look like the property with 3 meaningful states (true
,false
, orundefined
), even though in reality it only ever actually represents 2 states.
Usually in these cases the parser emitstrue
orundefined
(and neverfalse
), and in some rarer cases it emitstrue
, and then usesfalse
orundefined
interchangeably depending on some internal, obfuscated criteria. - There are a few cases where an array property is optional. In these cases usually the parser will never emit an empty array, and will instead emit
undefined
.- From a memory-usage perspective, this could be justified (an empty array is really a heavy "empty" marker). But if that is our goal then these cases should be typed so that it is clear that there are never 0 elements (eg by defining
[Foo, ...Foo[]]
)
- From a memory-usage perspective, this could be justified (an empty array is really a heavy "empty" marker). But if that is our goal then these cases should be typed so that it is clear that there are never 0 elements (eg by defining
We should standardise the AST to removeundefined
/optional from all places, unless there is a very good reason for it to be optional.