enable spec.functionName by default

This commit is contained in:
Sebastian McKenzie 2015-02-19 10:47:44 +11:00
parent 8e06db8f7d
commit 002be9a05c
30 changed files with 91 additions and 146 deletions

View File

@ -1,53 +0,0 @@
"use strict";
var util = require("../../util");
var t = require("../../types");
var visitor = {
enter: function (node, parent, scope, state) {
// check if this node is an identifier that matches the same as our function id
if (!t.isIdentifier(node, { name: state.id })) return;
// check if this node is the one referenced
if (!t.isReferenced(node, parent)) return;
// check that we don't have a local variable declared as that removes the need
// for the wrapper
var localDeclar = scope.getBindingIdentifier(state.id);
if (localDeclar !== state.outerDeclar) return;
state.selfReference = true;
this.stop();
}
};
exports.property = function (node, file, scope) {
var key = t.toComputedKey(node, node.key);
if (!t.isLiteral(key)) return node; // we can't set a function id with this
var id = t.toIdentifier(key.value);
key = t.identifier(id);
var state = {
id: id,
selfReference: false,
outerDeclar: scope.getBindingIdentifier(id),
};
scope.traverse(node, visitor, state);
var method = node.value;
if (state.selfReference) {
var templateName = "property-method-assignment-wrapper";
if (method.generator) templateName += "-generator";
node.value = util.template(templateName, {
FUNCTION: method,
FUNCTION_ID: key,
FUNCTION_KEY: scope.generateUidIdentifier(id),
WRAPPER_KEY: scope.generateUidIdentifier(id + "Wrapper")
});
} else {
method.id = key;
}
};

View File

@ -1,7 +1,6 @@
"use strict";
var ReplaceSupers = require("../../helpers/replace-supers");
var nameMethod = require("../../helpers/name-method");
var defineMap = require("../../helpers/define-map");
var messages = require("../../../messages");
var util = require("../../../util");
@ -217,8 +216,6 @@ ClassTransformer.prototype.pushMethod = function (node) {
var kind = node.kind;
if (kind === "") {
nameMethod.property(node, this.file, this.scope);
if (this.isLoose) {
// use assignments instead of define properties for loose classes

View File

@ -1,8 +1,7 @@
"use strict";
var nameMethod = require("../../helpers/name-method");
var t = require("../../../types");
var clone = require("lodash/lang/clone");
var t = require("../../../types");
exports.check = function (node) {
return t.isProperty(node) && (node.method || node.shorthand);
@ -11,7 +10,6 @@ exports.check = function (node) {
exports.Property = function (node, parent, scope, file) {
if (node.method) {
node.method = false;
nameMethod.property(node, file, scope);
}
if (node.shorthand) {

View File

@ -1,6 +1,9 @@
module.exports = {
useStrict: require("./other/use-strict"),
// this goes at the start so we only transform the original user code
"spec.functionName": require("./spec/function-name"),
"validation.undeclaredVariableCheck": require("./validation/undeclared-variable-check"),
"validation.noForInOfAssignment": require("./validation/no-for-in-of-assignment"),
"validation.setters": require("./validation/setters"),
@ -91,7 +94,6 @@ module.exports = {
"spec.typeofSymbol": require("./spec/typeof-symbol"),
"spec.undefinedToVoid": require("./spec/undefined-to-void"),
"spec.functionName": require("./spec/function-name"),
_moduleFormatter: require("./internal/module-formatter"),

View File

@ -1,53 +1,54 @@
"use strict";
var util = require("../../../util");
var t = require("../../../types");
var util = require("../../../util");
var propertyFunctionVisitor = {
enter: function (node, parent, scope, state) {
enter: function (node, parent, scope, state, file) {
if (t.isReferencedIdentifier(node, parent, { name: state.name }) && scope.getBindingIdentifier(node.name) === state.binding) {
return state.getOuter();
}
}
};
//exports.ArrowFunctionExpression =
exports.FunctionExpression = function (node, parent, scope, file) {
// has an `id` so we don't need to infer one
if (node.id) return;
var id;
if (t.isProperty(parent)) {
if (t.isProperty(parent) && parent.kind === "init" && !parent.computed) {
// { foo: function () {} };
id = parent.key;
} else if (t.isVariableDeclarator(parent)) {
// var foo = function () {};
id = parent.id;
} else {
return;
}
var binding = scope.getBindingIdentifier(id.name);
var outerId, selfGlobalId;
scope.traverse(node, propertyFunctionVisitor, {
name: id.name,
binding: binding,
getOuter: function () {
if (!binding) {
return t.memberExpression(
selfGlobalId || (selfGlobalId = file.addHelper("self-global")),
id
);
}
return t.callExpression(
outerId || (outerId = scope.generateUidIdentifier("getOuter")),
[]
);
}
});
node.id = id;
if (outerId) {
return util.template("named-func", {
GET_OUTER_ID: outerId,
ID: id,
FUNCTION: node
FUNCTION: node,
ID: id
});
}
};
exports.optional = true;

View File

@ -15,7 +15,7 @@ function two() {
return _arguments;
};
var another = function () {
var another = function another() {
var _arguments2 = arguments;
var inner2 = function () {
return _arguments2;
@ -54,7 +54,7 @@ five({ arguments: ["foo"] });
function six(obj) {
var fn = function () {
var fn2 = function () {
var fn2 = function fn2() {
return arguments[0];
};
return fn2("foobar");

View File

@ -1,7 +1,7 @@
"use strict";
module.exports = {
init: function () {
init: function init() {
var _this = this;
return new Promise(function (resolve, reject) {
MongoClient.connect(config.mongodb, function (err, db) {

View File

@ -19,7 +19,7 @@ function unpackObject(_ref) {
console.log(unpackObject({ title: "title", author: "author" }));
var unpackArray = function (_ref, _ref3) {
var unpackArray = function unpackArray(_ref, _ref3) {
var _ref2 = _slicedToArray(_ref, 3);
var a = _ref2[0];

View File

@ -7,7 +7,7 @@ define(["exports"], function (exports) {
var foo = exports.foo = 1;
var foo = exports.foo = 1;
var bar = exports.bar = 2;
var foo2 = exports.foo2 = function () {};
var foo2 = exports.foo2 = function foo2() {};
var foo3 = exports.foo3 = undefined;
var foo4 = exports.foo4 = 2;
var foo5 = exports.foo5 = undefined;

View File

@ -6,7 +6,7 @@ exports.foo7 = foo7;
var foo = exports.foo = 1;
var foo = exports.foo = 1;
var bar = exports.bar = 2;
var foo2 = exports.foo2 = function () {};
var foo2 = exports.foo2 = function foo2() {};
var foo3 = exports.foo3 = undefined;
var foo4 = exports.foo4 = 2;
var foo5 = exports.foo5 = undefined;

View File

@ -5,7 +5,7 @@ var _classCallCheck = function (instance, Constructor) { if (!(instance instance
var foo = 1;
var foo = 1,
bar = 2;
var foo2 = function () {};
var foo2 = function foo2() {};
var foo3 = undefined;
var foo4 = 2;
var foo5 = undefined;

View File

@ -11,7 +11,7 @@ System.register([], function (_export) {
_classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
foo = _export("foo", 1);
foo2 = _export("foo2", function () {});
foo2 = _export("foo2", function foo2() {});
foo3 = _export("foo3", undefined);
foo4 = _export("foo4", 2);
foo5 = _export("foo5", undefined);

View File

@ -13,7 +13,7 @@
var foo = exports.foo = 1;
var foo = exports.foo = 1;
var bar = exports.bar = 2;
var foo2 = exports.foo2 = function () {};
var foo2 = exports.foo2 = function foo2() {};
var foo3 = exports.foo3 = undefined;
var foo4 = exports.foo4 = 2;
var foo5 = exports.foo5 = undefined;

View File

@ -1,6 +1,6 @@
"use strict";
var t = function (f) {
var t = function t(f) {
for (var _len = arguments.length, items = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
items[_key - 1] = arguments[_key];
}

View File

@ -1,6 +1,6 @@
"use strict";
var foo = function () {
var foo = function foo() {
for (var _len = arguments.length, _ref = Array(_len), _key = 0; _key < _len; _key++) {
_ref[_key] = arguments[_key];
}

View File

@ -1,6 +1,6 @@
"use strict";
var t = function () {
var t = function t() {
for (var _len = arguments.length, items = Array(_len), _key = 0; _key < _len; _key++) {
items[_key] = arguments[_key];
}

View File

@ -14,7 +14,7 @@ var fn = (_obj$foo3 = obj[foo()], _obj$foo3.method.bind(_obj$foo3));
return _val2.toFixed(_args2[0]);
}));
var get = function () {
var get = function get() {
return 2;
};
[1.1234, 23.53245, 3].map((_args3 = [get()], function (_val3) {

View File

@ -1,11 +1,11 @@
var foo = function () {
var foo = function foo() {
var _this = this;
return function () {
return React.createElement(_this, null);
};
};
var bar = function () {
var bar = function bar() {
var _this = this;
return function () {
return React.createElement(_this.foo, null);

View File

@ -1,6 +1,6 @@
var Component;
Component = React.createClass({
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,7 +1,7 @@
var Component;
Component = React.createClass({
displayName: "Component",
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,5 +1,5 @@
export default React.createClass({
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,6 +1,6 @@
module.exports = React.createClass({
displayName: "actual",
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,6 +1,6 @@
var Whateva = React.createClass({
displayName: "Whatever",
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,6 +1,6 @@
var Whateva = React.createClass({
displayName: "Whatever",
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,6 +1,6 @@
exports = {
Component: React.createClass({
render: function () {
render: function render() {
return null;
}
})

View File

@ -1,7 +1,7 @@
exports = {
Component: React.createClass({
displayName: "Component",
render: function () {
render: function render() {
return null;
}
})

View File

@ -1,5 +1,5 @@
exports.Component = React.createClass({
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,6 +1,6 @@
exports.Component = React.createClass({
displayName: "Component",
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,5 +1,5 @@
var Component = React.createClass({
render: function () {
render: function render() {
return null;
}
});

View File

@ -1,6 +1,6 @@
var Component = React.createClass({
displayName: "Component",
render: function () {
render: function render() {
return null;
}
});