-
Notifications
You must be signed in to change notification settings - Fork 12.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
--erasableSyntaxOnly
#61011
base: main
Are you sure you want to change the base?
--erasableSyntaxOnly
#61011
Conversation
Looks like you're introducing a change to the public API surface area. If this includes breaking changes, please document them on our wiki's API Breaking Changes page. Also, please make sure @DanielRosenwasser and @RyanCavanaugh are aware of the changes, just as a heads up. |
Reading #59601 (comment), do we also need to ban |
Modulo VMS restrictions, it always transforms to |
ts-blank-space and Node both say no to |
name: "erasableSyntaxOnly", | ||
type: "boolean", | ||
category: Diagnostics.Interop_Constraints, | ||
description: Diagnostics.Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
JSX?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Open to suggestions 🤷
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd vote no since that would curse anyone trying to use this for "purist" purposes to not being able to use JSX at all; you're already going to get an error from Node, and in other runtimes or with a loader, it might even work just fine....
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, the fact that you already have to put JSX content in a .?sx
file means you can't possibly make the mistake of "not realizing enum is special" or whatever.
I thought Daniel wanted the text to say something different, which technically JSX is a non-ES runtime construct, but the phrasing would maybe get super awkward
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ohh that interpretation makes a lot more sense, oops
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you're already going to get an error from Node
Well you could make the same argument about all of these features right?
the fact that you already have to put JSX content in a
.?sx
file
Well we permit JSX in JS files 😄
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall I think it is fine either way, just a slightly weird distinction.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The implementation seems right to me; cross checking with other tools, I don't believe we missed anything, but it might be a good idea to add a test that shows that namespaces need to be recursively checked.
class PrivateClass { | ||
|
||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
} | |
} | |
namespace IllegalBecauseNestedInstantiated { | |
namespace Nested { | |
export const m = 1; | |
} | |
} |
Might be good to explicitly note that nesting needs to be checked too in case third parties read our tests and don't realize their "contains values" check has to be recursive.
namespace NotInstantiated { | ||
export interface JustAType { } | ||
export type ATypeInANamespace = {}; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
} | |
namespace Nested { | |
export type ATypeInANamespace = {}; | |
} | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this file be updated to copy the state of the other file now that it changed?
Worth re-noting for people watching this that ts-blank-space and Node.js' Amaro currently do not handle uninstantiated (type-only) namespaces: |
Implements #59601