Compare commits

...

19 Commits

Author SHA1 Message Date
Sebastian McKenzie
f5d9636353 v4.5.1 2015-02-25 22:55:50 +11:00
Sebastian McKenzie
a7f713ef5a remove jscs since it doesn't like arrow functions :( 2015-02-25 22:53:54 +11:00
Sebastian McKenzie
ba11069b1c utilise arrow functions omfg i love ES6 holy shit 2015-02-25 22:52:22 +11:00
Sebastian McKenzie
c13f8a3f50 update contributing guide 2015-02-25 22:43:40 +11:00
Sebastian McKenzie
339bd2b6d9 self-host #443 2015-02-25 22:36:23 +11:00
Sebastian McKenzie
a2843a5cb8 4.5.0 2015-02-25 22:03:38 +11:00
Sebastian McKenzie
c31832439a v4.5.0 2015-02-25 22:02:23 +11:00
Sebastian McKenzie
b7f19221a9 fix rc json error message 2015-02-25 22:00:32 +11:00
Sebastian McKenzie
46a37f4672 fix linting errors 2015-02-25 21:59:59 +11:00
Sebastian McKenzie
cfe2c19a02 fix linting errors 2015-02-25 21:57:49 +11:00
Sebastian McKenzie
649d91ef25 add 4.5.0 changelog 2015-02-25 21:56:23 +11:00
Sebastian McKenzie
4d72bffa30 add --copy-files bin/babel flag 2015-02-25 21:56:19 +11:00
Sebastian McKenzie
5889233adc rejigger path traversal class for es6ification 2015-02-25 21:50:40 +11:00
Sebastian McKenzie
7bb98352df add .babelrc - fixes #351 2015-02-25 21:49:48 +11:00
Sebastian McKenzie
12ebeed7c6 add missing extension to umd-strict formatter... - fixes #890 2015-02-25 19:10:20 +11:00
Sebastian McKenzie
7d87e52377 rejigger strict directives transformer logic so they're included in the body before module formatters are ran - @jayphelps 2015-02-25 17:20:23 +11:00
Sebastian McKenzie
2bab285970 temporarily disable own binding identification in nameMethod helper - fixes #871 2015-02-25 11:07:51 +11:00
Sebastian McKenzie
00651e671e don't copy over non-compilable files - fixes #888 2015-02-25 10:59:26 +11:00
Sebastian McKenzie
37588a6ceb 4.4.6 2015-02-24 22:17:46 +11:00
254 changed files with 449 additions and 395 deletions

View File

@@ -1,5 +1,6 @@
{
"experimental": true,
"playground": true,
"loose": true
"loose": true,
"blacklist": ["es6.tailCall"]
}

1
.gitignore vendored
View File

@@ -13,3 +13,4 @@ dist
.package.json
packages/babel-runtime/*.js
packages/babel-runtime/regenerator/*.js
lib

58
.jscsrc
View File

@@ -1,58 +0,0 @@
{
"excludeFiles": ["lib/babel/transformation/templates"],
"disallowSpacesInNamedFunctionExpression": {
"beforeOpeningRoundBrace": true
},
"requireSpacesInAnonymousFunctionExpression": {
"beforeOpeningRoundBrace": true
},
"requireSpacesInAnonymousFunctionExpression": {
"beforeOpeningRoundBrace": true
},
"disallowSpacesInFunctionDeclaration": {
"beforeOpeningRoundBrace": true
},
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,
"disallowSpaceAfterObjectKeys": true,
"disallowSpaceAfterPrefixUnaryOperators": true,
"disallowSpaceBeforePostfixUnaryOperators": true,
"disallowSpaceBeforeBinaryOperators": [
","
],
"disallowMixedSpacesAndTabs": true,
"disallowTrailingWhitespace": true,
"disallowYodaConditions": true,
"disallowKeywords": [ "with" ],
"disallowMultipleLineBreaks": true,
"requireSpaceBeforeBlockStatements": true,
"requireParenthesesAroundIIFE": true,
"requireSpacesInConditionalExpression": true,
"requireBlocksOnNewline": 1,
"requireCommaBeforeLineBreak": true,
"requireSpaceBeforeBinaryOperators": true,
"requireSpaceAfterBinaryOperators": true,
"requireLineFeedAtFileEnd": true,
"requireCapitalizedConstructors": true,
"requireSpacesInForStatement": true,
"requireCurlyBraces": [
"do"
],
"requireSpaceAfterKeywords": [
"if",
"else",
"for",
"while",
"do",
"switch",
"case",
"return",
"try",
"catch",
"typeof",
"function"
],
"validateLineBreaks": "LF",
"validateQuoteMarks": "\"",
"validateIndentation": 2
}

View File

@@ -1 +1 @@
lib/babel/transformation/templates
src/babel/transformation/templates

View File

@@ -13,3 +13,4 @@ CHANGELOG.md
coverage
vendor
packages
src

View File

@@ -13,6 +13,15 @@ _Note: Gaps between patch versions are faulty/broken releases._
See [CHANGELOG - 6to5](CHANGELOG-6to5.md) for the pre-4.0.0 version changelog.
## 4.5.0
* **New Feature**
* Add `.babelrc` support.
* **Bug Fix**
* Move use strict directives to the module formatter bodies.
* **Internal**
* Make default `bin/babel` behaviour to ignore non-compilable files and add a `--copy-files` flag to revert to the old behaviour.
## 4.4.6
* **Bug Fix**

View File

@@ -10,6 +10,49 @@ pollutes the git tree.
## Developing
#### Setup
```sh
$ git clone https://github.com/babel/babel
$ cd babel
$ make bootstrap
```
Then you need to run:
```sh
$ make watch-core
```
This will compile babel and then sit in the background and on file modification
recompile the necessary files.
#### Running tests
You can run tests via:
```sh
$ make test
```
This will usually take around two minutes as it's compiling the entire
[test262](https://github.com/tc39/test262) test suite and validating it's AST.
This is mostly overkill and you can limit the tests to a select few by directly
running them with `mocha`:
```sh
$ mocha test/transformation.js
```
#### Linting
Please follow the correct code style, this ensures that the code is consistent
and increases maintainability.
```sh
$ make lint
```
#### Workflow
* Fork the repository
@@ -18,8 +61,7 @@ pollutes the git tree.
* Link your forked clone (`npm link`)
* Develop your changes ensuring you're fetching updates from upstream often
* Ensure the test are passing (`make test`)
* Create new pull request explaining your proposed change or reference an issue
in your commit message
* Create new pull request explaining your proposed change or reference an issue in your commit message
#### Code Standards
@@ -43,11 +85,3 @@ pollutes the git tree.
* **Declaration**
* No unused variables
* No pollution of global variables and prototypes
## Testing
$ make test
## Linting
$ make lint

View File

@@ -4,7 +4,6 @@ UGLIFY_CMD = node_modules/uglify-js/bin/uglifyjs
#UGLIFY_CMD = node_modules/uglify-js/bin/uglifyjs --mangle sort
JSHINT_CMD = node_modules/jshint/bin/jshint
MOCHA_CMD = node_modules/mocha/bin/_mocha
JSCS_CMD = node_modules/jscs/bin/jscs
BABEL_CMD = node_modules/babel/bin/babel
export NODE_ENV = test
@@ -12,13 +11,14 @@ export NODE_ENV = test
.PHONY: clean test test-cov test-clean lint test-travis test-simple test-all test-browser publish build bootstrap publish-core publish-runtime build-core watch-core
build-core:
#node $(BABEL_CMD) src --out-dir lib
node $(BABEL_CMD) src --out-dir lib --copy-files
watch-core:
#node $(BABEL_CMD) src --out-dir lib --watch
node $(BABEL_CMD) src --out-dir lib --watch --copy-files
build:
mkdir -p dist
make build-core
node tools/cache-templates
@@ -37,8 +37,7 @@ clean:
rm -rf coverage templates.json test/tmp dist
lint:
$(JSHINT_CMD) --reporter node_modules/jshint-stylish/stylish.js lib bin
$(JSCS_CMD) lib bin
$(JSHINT_CMD) --reporter node_modules/jshint-stylish/stylish.js src bin
test-clean:
rm -rf test/tmp

View File

@@ -43,7 +43,7 @@ module.exports = function (commander, filenames, opts) {
var src = path.join(dirname, filename);
if (util.canCompile(filename)) {
write(src, filename);
} else {
} else if (commander.copyFiles) {
outputFileSync(path.join(commander.outDir, filename), fs.readFileSync(src));
}
});
@@ -64,7 +64,7 @@ module.exports = function (commander, filenames, opts) {
_.each(["add", "change"], function (type) {
watcher.on(type, function (filename) {
var relative = path.relative(dirname, filename) || filename;
write(filename, relative);
if (util.canCompile(filename)) write(filename, relative);
});
});
});

View File

@@ -28,6 +28,7 @@ commander.option("-M, --module-ids", "Insert module id in modules", false);
commander.option("-R, --react-compat", "Makes the react transformer produce pre-v0.12 code");
commander.option("--keep-module-id-extensions", "Keep extensions when generating module ids", false);
commander.option("-a, --auxiliary-comment [comment]", "Comment text to prepend to all auxiliary code");
commander.option("-D, --copy-files", "When compiling a directory copy over non-compilable files");
commander.on("--help", function () {
var outKeys = function (title, obj) {

View File

@@ -1,10 +1,11 @@
var readdir = require("fs-readdir-recursive");
var index = require("./index");
var babel = require("../../lib/babel/api/node");
var util = require("../../lib/babel/util");
var path = require("path");
var fs = require("fs");
var _ = require("lodash");
var resolveRc = require("../../lib/babel/api/register/resolve-rc");
var readdir = require("fs-readdir-recursive");
var index = require("./index");
var babel = require("../../lib/babel/api/node");
var util = require("../../lib/babel/util");
var path = require("path");
var fs = require("fs");
var _ = require("lodash");
exports.readdirFilter = function (filename) {
return readdir(filename).filter(function (filename) {
@@ -23,6 +24,7 @@ exports.addSourceMappingUrl = function (code, loc) {
exports.transform = function (filename, code, opts) {
opts = _.defaults(opts || {}, index.opts);
opts.filename = filename;
resolveRc(filename, opts);
var result;
try {

View File

@@ -1,3 +0,0 @@
{
"blacklist": ["useStrict"]
}

View File

@@ -1,33 +0,0 @@
"use strict";
var t = require("../../../types");
exports.secondPass = true;
exports.BlockStatement =
exports.Program = function (node, parent, scope, file) {
if (!node._declarations) return;
var kinds = {};
var kind;
for (var i in node._declarations) {
var declar = node._declarations[i];
kind = declar.kind || "var";
var declarNode = t.variableDeclarator(declar.id, declar.init);
if (declar.init) {
node.body.unshift(file.attachAuxiliaryComment(t.variableDeclaration(kind, [declarNode])));
} else {
kinds[kind] = kinds[kind] || [];
kinds[kind].push(declarNode);
}
}
for (kind in kinds) {
node.body.unshift(file.attachAuxiliaryComment(t.variableDeclaration(kind, kinds[kind])));
}
node._declarations = null;
};

View File

@@ -1,7 +1,7 @@
{
"name": "babel",
"description": "Turn ES6 code into readable vanilla ES5 with source maps",
"version": "4.4.6",
"version": "4.5.1",
"author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://babeljs.io/",
"repository": "babel/babel",
@@ -67,11 +67,11 @@
"trim-right": "^1.0.0"
},
"devDependencies": {
"babel": "4.5.0",
"browserify": "^8.1.3",
"chai": "^2.0.0",
"esvalid": "^1.1.0",
"istanbul": "^0.3.5",
"jscs": "^1.11.3",
"jshint": "^2.6.0",
"jshint-stylish": "^1.0.0",
"matcha": "^0.6.0",

View File

@@ -1,7 +1,7 @@
{
"name": "babel-runtime",
"description": "babel selfContained runtime",
"version": "4.4.5",
"version": "4.5.0",
"repository": "babel/babel",
"author": "Sebastian McKenzie <sebmck@gmail.com>"
}

View File

@@ -4,6 +4,7 @@ require("../../polyfill");
var sourceMapSupport = require("source-map-support");
var registerCache = require("./cache");
var resolveRc = require("./resolve-rc");
var extend = require("lodash/object/extend");
var babel = require("../node");
var each = require("lodash/collection/each");
@@ -44,7 +45,10 @@ var mtime = function (filename) {
var compile = function (filename) {
var result;
var cacheKey = filename + ":" + JSON.stringify(transformOpts);
var opts = extend({}, transformOpts);
resolveRc(filename, opts);
var cacheKey = filename + ":" + JSON.stringify(opts);
if (cache) {
var cached = cache[cacheKey];
@@ -54,10 +58,10 @@ var compile = function (filename) {
}
if (!result) {
result = babel.transformFileSync(filename, extend({
result = babel.transformFileSync(filename, extend(opts, {
sourceMap: true,
ast: false
}, transformOpts));
}));
}
if (cache) {

View File

@@ -0,0 +1,50 @@
"use strict";
var merge = require("lodash/object/merge");
var path = require("path");
var fs = require("fs");
var cache = {};
function exists(filename) {
var cached = cache[filename];
if (cached != null) return cached;
return cache[filename] = fs.existsSync(filename);
}
module.exports = function (loc, opts) {
var rel = ".babelrc";
opts = opts || {};
function find(start, rel) {
var file = path.join(start, rel);
if (exists(file)) {
var content = fs.readFileSync(file, "utf8");
var json;
try {
json = JSON.parse(content);
} catch (err) {
err.message = file + ": " + err.message;
throw err;
}
if (json.breakConfig) return;
merge(opts, json, function(a, b) {
if (Array.isArray(a)) {
return a.concat(b);
}
});
}
var up = path.dirname(start);
if (up !== start) { // root
find(up, rel);
}
}
find(loc, rel);
return opts;
};

View File

@@ -40,16 +40,14 @@ exports.JSXExpressionContainer = function (node, print) {
};
exports.JSXElement = function (node, print) {
var self = this;
var open = node.openingElement;
print(open);
if (open.selfClosing) return;
this.indent();
each(node.children, function (child) {
each(node.children, (child) => {
if (t.isLiteral(child)) {
self.push(child.value);
this.push(child.value);
} else {
print(child);
}

View File

@@ -58,8 +58,6 @@ exports.ExportDeclaration = function (node, print) {
};
exports.ImportDeclaration = function (node, print) {
var self = this;
this.push("import ");
if (node.isType) {
@@ -70,16 +68,16 @@ exports.ImportDeclaration = function (node, print) {
if (specfiers && specfiers.length) {
var foundImportSpecifier = false;
each(node.specifiers, function (spec, i) {
each(node.specifiers, (spec, i) => {
if (+i > 0) {
self.push(", ");
this.push(", ");
}
var isDefault = t.isSpecifierDefault(spec);
if (!isDefault && spec.type !== "ImportBatchSpecifier" && !foundImportSpecifier) {
foundImportSpecifier = true;
self.push("{ ");
this.push("{ ");
}
print(spec);

View File

@@ -15,16 +15,15 @@ exports.TemplateLiteral = function (node, print) {
this.push("`");
var quasis = node.quasis;
var self = this;
var len = quasis.length;
each(quasis, function (quasi, i) {
each(quasis, (quasi, i) => {
print(quasi);
if (i + 1 < len) {
self.push("${ ");
this.push("${ ");
print(node.expressions[i]);
self.push(" }");
this.push(" }");
}
});

View File

@@ -58,23 +58,22 @@ exports.Property = function (node, print) {
exports.ArrayExpression =
exports.ArrayPattern = function (node, print) {
var elems = node.elements;
var self = this;
var len = elems.length;
this.push("[");
each(elems, function (elem, i) {
each(elems, (elem, i) => {
if (!elem) {
// If the array expression ends with a hole, that hole
// will be ignored by the interpreter, but if it ends with
// two (or more) holes, we need to write out two (or more)
// commas so that the resulting code is interpreted with
// both (all) of the holes.
self.push(",");
this.push(",");
} else {
if (i > 0) self.push(" ");
if (i > 0) this.push(" ");
print(elem);
if (i < len - 1) self.push(",");
if (i < len - 1) this.push(",");
}
});

View File

@@ -105,20 +105,18 @@ CodeGenerator.prototype.generate = function () {
};
CodeGenerator.prototype.buildPrint = function (parent) {
var self = this;
var print = function (node, opts) {
return self.print(node, parent, opts);
var print = (node, opts) => {
return this.print(node, parent, opts);
};
print.sequence = function (nodes, opts) {
print.sequence = (nodes, opts) => {
opts = opts || {};
opts.statement = true;
return self.printJoin(print, nodes, opts);
return this.printJoin(print, nodes, opts);
};
print.join = function (nodes, opts) {
return self.printJoin(print, nodes, opts);
print.join = (nodes, opts) => {
return this.printJoin(print, nodes, opts);
};
print.list = function (items, opts) {
@@ -127,12 +125,12 @@ CodeGenerator.prototype.buildPrint = function (parent) {
print.join(items, opts);
};
print.block = function (node) {
return self.printBlock(print, node);
print.block = (node) => {
return this.printBlock(print, node);
};
print.indentOnComments = function (node) {
return self.printAndIndentOnComments(print, node);
print.indentOnComments = (node) => {
return this.printAndIndentOnComments(print, node);
};
return print;
@@ -150,11 +148,9 @@ CodeGenerator.prototype.print = function (node, parent, opts) {
this.format.concise = true;
}
var self = this;
opts = opts || {};
var newline = function (leading) {
var newline = (leading) => {
if (!opts.statement && !n.isUserWhitespacable(node, parent)) {
return;
}
@@ -164,9 +160,9 @@ CodeGenerator.prototype.print = function (node, parent, opts) {
if (node.start != null && !node._ignoreUserWhitespace) {
// user node
if (leading) {
lines = self.whitespace.getNewlinesBefore(node);
lines = this.whitespace.getNewlinesBefore(node);
} else {
lines = self.whitespace.getNewlinesAfter(node);
lines = this.whitespace.getNewlinesAfter(node);
}
} else {
// generated node
@@ -178,10 +174,10 @@ CodeGenerator.prototype.print = function (node, parent, opts) {
if (needs(node, parent)) lines++;
// generated nodes can't add starting file whitespace
if (!self.buffer.buf) lines = 0;
if (!this.buffer.buf) lines = 0;
}
self.newline(lines);
this.newline(lines);
};
if (this[node.type]) {
@@ -224,28 +220,27 @@ CodeGenerator.prototype.printJoin = function (print, nodes, opts) {
opts = opts || {};
var self = this;
var len = nodes.length;
var len = nodes.length;
if (opts.indent) self.indent();
if (opts.indent) this.indent();
each(nodes, function (node, i) {
each(nodes, (node, i) => {
print(node, {
statement: opts.statement,
addNewlines: opts.addNewlines,
after: function () {
after: () => {
if (opts.iterator) {
opts.iterator(node, i);
}
if (opts.separator && i < len - 1) {
self.push(opts.separator);
this.push(opts.separator);
}
}
});
});
if (opts.indent) self.dedent();
if (opts.indent) this.dedent();
};
CodeGenerator.prototype.printAndIndentOnComments = function (print, node) {
@@ -289,14 +284,13 @@ CodeGenerator.prototype.getComments = function (key, node, parent) {
var comments = [];
var nodes = [node];
var self = this;
if (t.isExpressionStatement(node)) {
nodes.push(node.argument);
}
each(nodes, function (node) {
comments = comments.concat(self._getComments(key, node));
each(nodes, (node) => {
comments = comments.concat(this._getComments(key, node));
});
return comments;
@@ -312,13 +306,11 @@ CodeGenerator.prototype._printComments = function (comments) {
if (!this.format.comments) return;
if (!comments || !comments.length) return;
var self = this;
each(comments, function (comment) {
each(comments, (comment) => {
var skip = false;
// find the original comment in the ast and set it as displayed
each(self.ast.comments, function (origComment) {
each(this.ast.comments, function (origComment) {
if (origComment.start === comment.start) {
// comment has already been output
if (origComment._displayed) skip = true;
@@ -331,38 +323,38 @@ CodeGenerator.prototype._printComments = function (comments) {
if (skip) return;
// whitespace before
self.newline(self.whitespace.getNewlinesBefore(comment));
this.newline(this.whitespace.getNewlinesBefore(comment));
var column = self.position.column;
var val = self.generateComment(comment);
var column = this.position.column;
var val = this.generateComment(comment);
if (column && !self.isLast(["\n", " ", "[", "{"])) {
self._push(" ");
if (column && !this.isLast(["\n", " ", "[", "{"])) {
this._push(" ");
column++;
}
//
if (comment.type === "Block" && self.format.indent.adjustMultilineComment) {
if (comment.type === "Block" && this.format.indent.adjustMultilineComment) {
var offset = comment.loc.start.column;
if (offset) {
var newlineRegex = new RegExp("\\n\\s{1," + offset + "}", "g");
val = val.replace(newlineRegex, "\n");
}
var indent = Math.max(self.indentSize(), column);
var indent = Math.max(this.indentSize(), column);
val = val.replace(/\n/g, "\n" + repeating(" ", indent));
}
if (column === 0) {
val = self.getIndent() + val;
val = this.getIndent() + val;
}
//
self._push(val);
this._push(val);
// whitespace after
self.newline(self.whitespace.getNewlinesAfter(comment));
this.newline(this.whitespace.getNewlinesAfter(comment));
});
};

View File

@@ -370,8 +370,6 @@ File.prototype.addCode = function (code) {
};
File.prototype.parse = function (code) {
var self = this;
code = this.addCode(code);
var opts = this.opts;
@@ -379,9 +377,9 @@ File.prototype.parse = function (code) {
opts.allowImportExportEverywhere = this.isLoose("es6.modules");
opts.strictMode = this.transformers.useStrict.canRun();
return parse(opts, code, function (tree) {
self.transform(tree);
return self.generate();
return parse(opts, code, (tree) => {
this.transform(tree);
return this.generate();
});
};

View File

@@ -47,7 +47,7 @@ var visit = function (node, name, scope) {
// check to see if we have a local binding of the id we're setting inside of
// the function, this is important as there are caveats associated
var bindingInfo = scope.getOwnBindingInfo(name);
var bindingInfo = null; // todo: proper scope not being passed in es6/classes // scope.getOwnBindingInfo(name);
if (bindingInfo) {
if (bindingInfo.kind === "param") {

View File

@@ -0,0 +1,21 @@
"use strict";
var t = require("../../types");
exports.has = function (node) {
var first = node.body[0];
return t.isExpressionStatement(first) && t.isLiteral(first.expression, { value: "use strict" });
};
exports.wrap = function (node, callback) {
var useStrictNode;
if (exports.has(node)) {
useStrictNode = node.body.shift();
}
callback();
if (useStrictNode) {
node.body.unshift(useStrictNode);
}
};

View File

@@ -0,0 +1,3 @@
{
"blacklist": ["useStrict", "es6.blockScoping"]
}

Some files were not shown because too many files have changed in this diff Show More