* Mark `ThisExpression` as `Purish`
The other purish types are functions and literals, so I
guess it means "it doesn't have side effects"
* Super & tests
* Fix tests
* Bug replication test
* Simplify test
* Fixes#10896
* Merge path.crawl `ClassDeclaration` and `Declaration` visitors
Merged to avoid subtle assumption that `Declaration` is called before `ClassDeclaration`
* Move registartion of class id in crawl to BlockScoped
* Add some assertions to crawl test
* fix: parameter expression closure should not have access to the declaration inside function body
* fix: renameVisitor should skip when a pattern is a scope
* address review comments
* Migrate try-catch duplicate error
* Remove exception for functions and let in the same scope
* Migrate duplicate bindings tests to traverse
* Add test for subscope and let/const
* Add more test cases
Flow bindings have been deprecated for a while.
The reason behind this change is that `declare var foo`
doesn't introduce a new local binding, but it represents
a global one.
* Redeclaring a variable counts as a modification.
Fixes#6217.
* Remove "existing" logic from Binding.
Was added in #5745, but no longer triggered since 6536e605a.
* Additional testcase and require->import refactorings
* Removed duplicated getStatementParent function. Refactored all babel-traverse tests to use ESmodules