Merge remote-tracking branch 'origin/master' into merge-master
This commit is contained in:
commit
d33d023594
@ -9,6 +9,8 @@
|
||||
|
|
||||
<strong><a href="#writing-tests">Writing tests</a></strong>
|
||||
|
|
||||
<strong><a href="#debugging-code">Debugging code</a></strong>
|
||||
|
|
||||
<strong><a href="#internals">Internals</a></strong>
|
||||
</p>
|
||||
|
||||
@ -127,7 +129,8 @@ $ TEST_DEBUG=true make test
|
||||
To test the code coverage, use:
|
||||
|
||||
```sh
|
||||
$ make test-cov
|
||||
$ BABEL_ENV=cov make build
|
||||
$ ./scripts/test-cov.sh
|
||||
```
|
||||
|
||||
#### Writing tests
|
||||
@ -199,9 +202,46 @@ For both `babel-plugin-x` and `babylon`, you can easily generate an `expected.js
|
||||
- expected.json (will be generated if not created)
|
||||
```
|
||||
|
||||
#### Debugging code
|
||||
|
||||
A common approach to debugging JavaScript code is to walk through the code using the [Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/) debugger.
|
||||
For illustration purposes, we are going to assume that we need to get a better understanding of [`Generator.generate()`](https://github.com/babel/babel/blob/b5246994b57f06af871be6a63dcc4c6fd41d94d6/packages/babel-generator/src/index.js#L32), which is responsible for generating code for a given AST.
|
||||
To get a better understanding of what is actually going on for this particular piece of code, we are going to make use of breakpoints.
|
||||
|
||||
```diff
|
||||
generate() {
|
||||
+ debugger; // breakpoint
|
||||
return super.generate(this.ast);
|
||||
}
|
||||
```
|
||||
|
||||
To include the changes, we have to make sure to build Babel:
|
||||
|
||||
```bash
|
||||
$ make build
|
||||
```
|
||||
|
||||
Next, we need to execute `Generator.generate()`, which can be achieved by running a test case in the `babel-generator` package.
|
||||
For example, we can run the test case that tests the generation of class declarations:
|
||||
|
||||
```bash
|
||||
$ TEST_DEBUG=true TEST_GREP=ClassDeclaration make test-only
|
||||
|
||||
./scripts/test.sh
|
||||
Debugger listening on port 9229.
|
||||
Warning: This is an experimental feature and could change at any time.
|
||||
To start debugging, open the following URL in Chrome:
|
||||
chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/3cdaebd2-be88-4e7b-a94b-432950ab72d0
|
||||
```
|
||||
|
||||
To start the debugging in Chrome DevTools, open the given URL.
|
||||
The debugger starts at the first executed line of code, which is Mocha's first line by default.
|
||||
Click _Resume script execution_ <img src="https://i.imgur.com/TmYBn9d.png" alt="Resume script execution button." width="16"> to jump to the set breakpoint.
|
||||
Note that the code shown in Chrome DevTools is compiled code and therefore differs.
|
||||
|
||||
#### Internals
|
||||
- AST spec ([babylon/ast/spec.md](https://github.com/babel/babylon/blob/master/ast/spec.md))
|
||||
- Versionning ([doc/design/versioning.md](./doc/design/versioning.md))
|
||||
- Versioning ([doc/design/versioning.md](./doc/design/versioning.md))
|
||||
- Monorepo ([doc/design/monorepo.md](./doc/design/monorepo.md))
|
||||
- Compiler environment support ([doc/design/compiler-environment-support.md](./doc/design/compiler-environment-support.md))
|
||||
- Compiler assumptions ([doc/design/compiler-assumptions.md](./doc/design/compiler-assumptions.md))
|
||||
|
||||
4
Makefile
4
Makefile
@ -49,11 +49,11 @@ test-only:
|
||||
test: lint test-only
|
||||
|
||||
test-ci:
|
||||
NODE_ENV=test make bootstrap
|
||||
make bootstrap
|
||||
make test-only
|
||||
|
||||
test-ci-coverage:
|
||||
NODE_ENV=test BABEL_ENV=cov make bootstrap
|
||||
BABEL_ENV=cov make bootstrap
|
||||
./scripts/test-cov.sh
|
||||
./node_modules/.bin/codecov -f coverage/coverage-final.json
|
||||
|
||||
|
||||
@ -203,6 +203,14 @@ Babel | Daniel Tschinder | Logan Smyth | Henry Zhu |
|
||||
| [@kangax](https://github.com/kangax) | [@kaicataldo](https://github.com/kaicataldo) | [@motiz88](https://github.com/motiz88) | [@xtuc](https://github.com/xtuc) |
|
||||
| [@kangax](https://twitter.com/kangax) | [@kai_cataldo](https://twitter.com/kai_cataldo) | [@motiz88](https://twitter.com/motiz88) | [@svensauleau](https://twitter.com/svensauleau) |
|
||||
|
||||
### Non-Human Members
|
||||
|
||||
[<img src="https://github.com/babel/babel-bot/raw/master/babel-bot.png" height="64">](https://github.com/babel-bot) |
|
||||
|---|
|
||||
| Babel Bot |
|
||||
| [@babel-bot](https://github.com/babel-bot) |
|
||||
| [@babeljs](https://twitter.com/babeljs) |
|
||||
|
||||
### Inactive members
|
||||
|
||||
[](https://github.com/amasad) | [](https://github.com/thejameskyle) | [](https://github.com/jmm) | [](https://github.com/kittens) (Creator) |
|
||||
|
||||
4
codecov.yml
Normal file
4
codecov.yml
Normal file
@ -0,0 +1,4 @@
|
||||
coverage:
|
||||
parsers:
|
||||
javascript:
|
||||
enable_partials: yes
|
||||
@ -1,4 +1,5 @@
|
||||
{
|
||||
"name": "babel",
|
||||
"private": true,
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
@ -44,6 +45,10 @@
|
||||
"through2": "^2.0.0",
|
||||
"uglify-js": "^2.4.16"
|
||||
},
|
||||
"devEngines": {
|
||||
"node": ">= 0.10 <= 7.x",
|
||||
"npm": "2.x || 3.x || 4.x"
|
||||
},
|
||||
"babel": {
|
||||
"comments": false,
|
||||
"presets": [
|
||||
|
||||
1
packages/babel-cli/test/fixtures/babel-node/arguments/in-files/bar.js
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel-node/arguments/in-files/bar.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
console.log(process.argv[2]);
|
||||
4
packages/babel-cli/test/fixtures/babel-node/arguments/options.json
vendored
Normal file
4
packages/babel-cli/test/fixtures/babel-node/arguments/options.json
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"args": ["bar", "foo"],
|
||||
"stdout": "foo"
|
||||
}
|
||||
@ -270,7 +270,7 @@ export default class OptionManager {
|
||||
}
|
||||
const presetFactory = this.getPresetFactoryForPreset(presetLoc || preset);
|
||||
|
||||
preset = presetFactory(context, options);
|
||||
preset = presetFactory(context, options, { dirname });
|
||||
|
||||
if (onResolve) onResolve(preset, presetLoc);
|
||||
} catch (e) {
|
||||
|
||||
@ -1,7 +1,10 @@
|
||||
module.exports = function () {
|
||||
module.exports = function (context, options, fileContext) {
|
||||
if (/resolve-addons-relative-to-file$/.test(fileContext.dirname)) {
|
||||
return {
|
||||
plugins: [plugin],
|
||||
};
|
||||
}
|
||||
return {};
|
||||
};
|
||||
|
||||
function plugin () {
|
||||
|
||||
@ -89,7 +89,6 @@ const buildForXStatement = function (op) {
|
||||
this.space();
|
||||
}
|
||||
this.token("(");
|
||||
|
||||
this.print(node.left, node);
|
||||
this.space();
|
||||
this.word(op);
|
||||
|
||||
@ -46,6 +46,10 @@ export function ObjectExpression(node: Object, parent: Object, printStack: Array
|
||||
return isFirstInStatement(printStack, { considerArrow: true });
|
||||
}
|
||||
|
||||
export function DoExpression(node: Object, parent: Object, printStack: Array<Object>): boolean {
|
||||
return isFirstInStatement(printStack);
|
||||
}
|
||||
|
||||
export function Binary(node: Object, parent: Object): boolean {
|
||||
if ((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) {
|
||||
return true;
|
||||
|
||||
3
packages/babel-generator/test/fixtures/parentheses/do-expression/actual.js
vendored
Normal file
3
packages/babel-generator/test/fixtures/parentheses/do-expression/actual.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
(do {
|
||||
foo;
|
||||
});
|
||||
3
packages/babel-generator/test/fixtures/parentheses/do-expression/expected.js
vendored
Normal file
3
packages/babel-generator/test/fixtures/parentheses/do-expression/expected.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
(do {
|
||||
foo;
|
||||
});
|
||||
@ -11,7 +11,7 @@ var a = ['a', 'b', 'c'];
|
||||
var b = [...a, 'foo'];
|
||||
|
||||
var c = { foo: 'bar', baz: 42 };
|
||||
var d = {...o, a: 2};
|
||||
var d = {...c, a: 2};
|
||||
```
|
||||
|
||||
**Out**
|
||||
@ -33,7 +33,7 @@ var a = [ 'a', 'b', 'c' ];
|
||||
var b = [].concat(a, [ 'foo' ]);
|
||||
|
||||
var c = { foo: 'bar', baz: 42 };
|
||||
var d = _extends({}, o, { a: 2 });
|
||||
var d = _extends({}, c, { a: 2 });
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
**In**
|
||||
|
||||
```js
|
||||
```jsx
|
||||
const Hr = () => {
|
||||
return <hr className="hr" />;
|
||||
};
|
||||
@ -14,7 +14,7 @@ const Hr = () => {
|
||||
|
||||
**Out**
|
||||
|
||||
```js
|
||||
```jsx
|
||||
const _ref = <hr className="hr" />;
|
||||
|
||||
const Hr = () => {
|
||||
@ -26,13 +26,13 @@ const Hr = () => {
|
||||
|
||||
- **Spread Operator**
|
||||
|
||||
```js
|
||||
```jsx
|
||||
<div {...foobar} />
|
||||
```
|
||||
|
||||
- **Refs**
|
||||
|
||||
```js
|
||||
```jsx
|
||||
<div ref="foobar" />
|
||||
<div ref={node => this.node = node} />
|
||||
```
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "babel-runtime",
|
||||
"version": "6.22.0",
|
||||
"version": "6.23.0",
|
||||
"description": "babel selfContained runtime",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-runtime",
|
||||
@ -11,6 +11,6 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-helpers": "^6.22.0",
|
||||
"babel-plugin-transform-runtime": "^6.22.0"
|
||||
"babel-plugin-transform-runtime": "^6.23.0"
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,6 +14,19 @@ function getPath(code) {
|
||||
return path;
|
||||
}
|
||||
|
||||
function getIdentifierPath(code) {
|
||||
const ast = parse(code);
|
||||
let nodePath;
|
||||
traverse(ast, {
|
||||
Identifier: function(path) {
|
||||
nodePath = path;
|
||||
path.stop();
|
||||
}
|
||||
});
|
||||
|
||||
return nodePath;
|
||||
}
|
||||
|
||||
describe("scope", function () {
|
||||
describe("binding paths", function () {
|
||||
it("function declaration id", function () {
|
||||
@ -67,5 +80,13 @@ describe("scope", function () {
|
||||
_foo2: { }
|
||||
`).scope.generateUid("foo"), "_foo3");
|
||||
});
|
||||
|
||||
it("reference paths", function() {
|
||||
const path = getIdentifierPath("function square(n) { return n * n}");
|
||||
const referencePaths = path.context.scope.bindings.n.referencePaths;
|
||||
assert.equal(referencePaths.length, 2);
|
||||
assert.deepEqual(referencePaths[0].node.loc.start, { line: 1, column:28 });
|
||||
assert.deepEqual(referencePaths[1].node.loc.start, { line: 1, column:32 });
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user