avoid revisiting classes - #2694
This commit is contained in:
@@ -3,6 +3,9 @@ import VanillaTransformer from "./vanilla";
|
||||
import nameFunction from "babel-helper-function-name";
|
||||
|
||||
export default function ({ types: t }) {
|
||||
// todo: investigate traversal requeueing
|
||||
let VISITED = Symbol();
|
||||
|
||||
return {
|
||||
visitor: {
|
||||
ClassDeclaration(path) {
|
||||
@@ -21,8 +24,13 @@ export default function ({ types: t }) {
|
||||
},
|
||||
|
||||
ClassExpression(path, state) {
|
||||
let { node } = path;
|
||||
if (node[VISITED]) return;
|
||||
|
||||
let inferred = nameFunction(path);
|
||||
if (inferred && inferred !== path.node) return path.replaceWith(inferred);
|
||||
if (inferred && inferred !== node) return path.replaceWith(inferred);
|
||||
|
||||
node[VISITED] = true;
|
||||
|
||||
let Constructor = VanillaTransformer;
|
||||
if (state.opts.loose) Constructor = LooseTransformer;
|
||||
|
||||
8
packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2694/actual.js
vendored
Normal file
8
packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2694/actual.js
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
import BaseFoo from './BaseFoo';
|
||||
|
||||
export default class SubFoo extends BaseFoo {
|
||||
static talk() {
|
||||
super.talk();
|
||||
console.log('SubFoo.talk');
|
||||
}
|
||||
}
|
||||
29
packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2694/expected.js
vendored
Normal file
29
packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2694/expected.js
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
var _BaseFoo2 = require('./BaseFoo');
|
||||
|
||||
var _BaseFoo3 = babelHelpers.interopRequireDefault(_BaseFoo2);
|
||||
|
||||
var SubFoo = (function (_BaseFoo) {
|
||||
babelHelpers.inherits(SubFoo, _BaseFoo);
|
||||
|
||||
function SubFoo() {
|
||||
babelHelpers.classCallCheck(this, SubFoo);
|
||||
return babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(SubFoo).apply(this, arguments));
|
||||
}
|
||||
|
||||
babelHelpers.createClass(SubFoo, null, [{
|
||||
key: 'talk',
|
||||
value: function talk() {
|
||||
babelHelpers.get(Object.getPrototypeOf(SubFoo), 'talk', this).call(this);
|
||||
console.log('SubFoo.talk');
|
||||
}
|
||||
}]);
|
||||
return SubFoo;
|
||||
})(_BaseFoo3.default);
|
||||
|
||||
exports.default = SubFoo;
|
||||
4
packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2694/options.json
vendored
Normal file
4
packages/babel-plugin-transform-es2015-classes/test/fixtures/regression/2694/options.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"plugins": ["external-helpers-2"],
|
||||
"presets": ["es2015"]
|
||||
}
|
||||
Reference in New Issue
Block a user