add support for member expression super classes - closes #22
This commit is contained in:
parent
7ee8f8ff3d
commit
0664ccff98
@ -13,10 +13,23 @@ exports.ClassExpression = function (node) {
|
|||||||
return buildClass(node);
|
return buildClass(node);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var getMemberExpressionObject = function (node) {
|
||||||
|
while (node.type === "MemberExpression") {
|
||||||
|
node = node.object;
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
};
|
||||||
|
|
||||||
var buildClass = function (node) {
|
var buildClass = function (node) {
|
||||||
var superName = node.superClass;
|
var superName = node.superClass;
|
||||||
var className = node.id;
|
var className = node.id;
|
||||||
|
|
||||||
|
var superClassReference = node.superClass;
|
||||||
|
|
||||||
|
if (superName && superName.type === "MemberExpression") {
|
||||||
|
superClassReference = getMemberExpressionObject(superName);
|
||||||
|
}
|
||||||
|
|
||||||
var container = util.template("class", {
|
var container = util.template("class", {
|
||||||
CLASS_NAME: className
|
CLASS_NAME: className
|
||||||
});
|
});
|
||||||
@ -32,8 +45,8 @@ var buildClass = function (node) {
|
|||||||
CLASS_NAME: className
|
CLASS_NAME: className
|
||||||
}, true));
|
}, true));
|
||||||
|
|
||||||
container.arguments.push(superName);
|
container.arguments.push(superClassReference);
|
||||||
container.callee.params.push(superName);
|
container.callee.params.push(superClassReference);
|
||||||
}
|
}
|
||||||
|
|
||||||
buildClassBody(body, className, superName, node);
|
buildClassBody(body, className, superName, node);
|
||||||
|
|||||||
7
test/fixtures/classes/super-class-member-expression/actual.js
vendored
Normal file
7
test/fixtures/classes/super-class-member-expression/actual.js
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class BaseController extends Chaplin.Controller {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class BaseController2 extends Chaplin.Controller.Another {
|
||||||
|
|
||||||
|
}
|
||||||
27
test/fixtures/classes/super-class-member-expression/expected.js
vendored
Normal file
27
test/fixtures/classes/super-class-member-expression/expected.js
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
var BaseController = function (Chaplin) {
|
||||||
|
function BaseController() {
|
||||||
|
}
|
||||||
|
BaseController.prototype = Object.create(Chaplin.Controller.prototype, {
|
||||||
|
constructor: {
|
||||||
|
value: BaseController,
|
||||||
|
enumerable: false,
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return BaseController;
|
||||||
|
}(Chaplin);
|
||||||
|
|
||||||
|
var BaseController2 = function (Chaplin) {
|
||||||
|
function BaseController2() {
|
||||||
|
}
|
||||||
|
BaseController2.prototype = Object.create(Chaplin.Controller.Another.prototype, {
|
||||||
|
constructor: {
|
||||||
|
value: BaseController2,
|
||||||
|
enumerable: false,
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return BaseController2;
|
||||||
|
}(Chaplin);
|
||||||
Loading…
x
Reference in New Issue
Block a user