* rename own binding inside methods if it collides with class ref. fix#11994
* fix name collisions in constructor
* do fix name collisions in constructor
* move logic in ReplaceSupers
* fix tests of helper-create-class-features-plugin
* remove replaceSupers in pushConstructor
* use environmentVisitor
* skip classLike nodes
* fix super ref in computed key
* Ignore abstract methods when decorating class
* Address Nico's feedback
* Add input/output test
* Update test output to account for _nonIterableRest changes
* Draft fix for TDZError in computed prototype methods
* Added tests for loose:false and also extracted handleClassTDZ
* Added state parameter to handleClassTDZ function
* Extracted the state object to a variable
* Added helper comments for environmentVisitor
* Added else condition to traverse computed Path
* Cached computed path key into a variable
fix#9189
Obviously this code is intended to throw an error if someone tries to reference a class before it's defined, like:
```js
class Foo {
someField = Foo;
}
```
But there's no problem with referencing the class in a type annotation before it's defined, and this is often necessary for tree structures:
```js
class Foo {
[someSymbol]: Foo;
}
```
* Make @babel/plugin-class-features a normal helper package
This effectively disallows using it directly.
* Rename helper
* Style
* Don't add prefix to plugin name
* Move private methods plugin