Prototype assignments count as method-like #23137
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
For the purposes of reporting prototype/instance property conflicts, the compiler previously assumed that only methods were prototype properties. The intent of the error is to prevent instance vs property confusion like this:
However, in Javascript, any assignment directly to the prototype is a prototype property, as in the line
Derived.prototype.x = 2
. So there's no conflict when the base property is on the prototype and the derived one is too:This abstract-like pattern appears in webpack. Note that "isMethodLike" should really be "isPrototypeProperty" but the compiler is not very good at tracking this distinction. I optimistically renamed the function and documented its limitations in a comment.
Fixes #22895 (for real this time)