diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 039baaa09e..086a042266 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,6 +9,8 @@ | Writing tests | + Debugging code + | Internals

@@ -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_ Resume script execution button. 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)) diff --git a/Makefile b/Makefile index b35ddf0707..2eadaffb7a 100644 --- a/Makefile +++ b/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 diff --git a/README.md b/README.md index 7987b5b840..21a845d354 100644 --- a/README.md +++ b/README.md @@ -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 + +[](https://github.com/babel-bot) | +|---| +| Babel Bot | +| [@babel-bot](https://github.com/babel-bot) | +| [@babeljs](https://twitter.com/babeljs) | + ### Inactive members [![Amjad Masad](https://avatars.githubusercontent.com/u/587518?s=64)](https://github.com/amasad) | [![James Kyle](https://avatars.githubusercontent.com/u/952783?s=64)](https://github.com/thejameskyle) | [![Jesse McCarthy](https://avatars.githubusercontent.com/u/129203?s=64)](https://github.com/jmm) | [![Sebastian McKenzie](https://avatars.githubusercontent.com/u/853712?s=64)](https://github.com/kittens) (Creator) | diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000000..3e31ee1814 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,4 @@ +coverage: + parsers: + javascript: + enable_partials: yes diff --git a/package.json b/package.json index dc045dc0ee..35b4fbc876 100644 --- a/package.json +++ b/package.json @@ -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": [ diff --git a/packages/babel-cli/test/fixtures/babel-node/arguments/in-files/bar.js b/packages/babel-cli/test/fixtures/babel-node/arguments/in-files/bar.js new file mode 100644 index 0000000000..13257ec5e8 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel-node/arguments/in-files/bar.js @@ -0,0 +1 @@ +console.log(process.argv[2]); diff --git a/packages/babel-cli/test/fixtures/babel-node/arguments/options.json b/packages/babel-cli/test/fixtures/babel-node/arguments/options.json new file mode 100644 index 0000000000..5aa934d555 --- /dev/null +++ b/packages/babel-cli/test/fixtures/babel-node/arguments/options.json @@ -0,0 +1,4 @@ +{ + "args": ["bar", "foo"], + "stdout": "foo" +} diff --git a/packages/babel-core/src/transformation/file/options/option-manager.js b/packages/babel-core/src/transformation/file/options/option-manager.js index 7a106f8ada..0dd3ecf70d 100644 --- a/packages/babel-core/src/transformation/file/options/option-manager.js +++ b/packages/babel-core/src/transformation/file/options/option-manager.js @@ -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) { diff --git a/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js b/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js index b2f7d13c73..1f313cfaa1 100644 --- a/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js +++ b/packages/babel-core/test/fixtures/resolution/resolve-addons-relative-to-file/node_modules/addons/preset.js @@ -1,7 +1,10 @@ -module.exports = function () { - return { - plugins: [plugin], +module.exports = function (context, options, fileContext) { + if (/resolve-addons-relative-to-file$/.test(fileContext.dirname)) { + return { + plugins: [plugin], + }; } + return {}; }; function plugin () { diff --git a/packages/babel-generator/src/generators/statements.js b/packages/babel-generator/src/generators/statements.js index f6291e0165..574ef5c249 100644 --- a/packages/babel-generator/src/generators/statements.js +++ b/packages/babel-generator/src/generators/statements.js @@ -89,7 +89,6 @@ const buildForXStatement = function (op) { this.space(); } this.token("("); - this.print(node.left, node); this.space(); this.word(op); diff --git a/packages/babel-generator/src/node/parentheses.js b/packages/babel-generator/src/node/parentheses.js index 558bceb14c..948198f7cb 100644 --- a/packages/babel-generator/src/node/parentheses.js +++ b/packages/babel-generator/src/node/parentheses.js @@ -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): boolean { + return isFirstInStatement(printStack); +} + export function Binary(node: Object, parent: Object): boolean { if ((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) { return true; diff --git a/packages/babel-generator/test/fixtures/parentheses/do-expression/actual.js b/packages/babel-generator/test/fixtures/parentheses/do-expression/actual.js new file mode 100644 index 0000000000..21177fdcef --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/do-expression/actual.js @@ -0,0 +1,3 @@ +(do { + foo; +}); diff --git a/packages/babel-generator/test/fixtures/parentheses/do-expression/expected.js b/packages/babel-generator/test/fixtures/parentheses/do-expression/expected.js new file mode 100644 index 0000000000..21177fdcef --- /dev/null +++ b/packages/babel-generator/test/fixtures/parentheses/do-expression/expected.js @@ -0,0 +1,3 @@ +(do { + foo; +}); diff --git a/packages/babel-plugin-transform-es2015-shorthand-properties/README.md b/packages/babel-plugin-transform-es2015-shorthand-properties/README.md index 171aa1ead7..95c87e2fa3 100644 --- a/packages/babel-plugin-transform-es2015-shorthand-properties/README.md +++ b/packages/babel-plugin-transform-es2015-shorthand-properties/README.md @@ -13,7 +13,7 @@ var o = { a, b, c }; **Out** ```js -var o = { a: a, b: b, c:c }; +var o = { a: a, b: b, c: c }; ``` **In** diff --git a/packages/babel-plugin-transform-es2015-spread/README.md b/packages/babel-plugin-transform-es2015-spread/README.md index 0ba50ddc03..af75353e36 100644 --- a/packages/babel-plugin-transform-es2015-spread/README.md +++ b/packages/babel-plugin-transform-es2015-spread/README.md @@ -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 diff --git a/packages/babel-plugin-transform-react-constant-elements/README.md b/packages/babel-plugin-transform-react-constant-elements/README.md index 4f0db40e03..4754c94534 100644 --- a/packages/babel-plugin-transform-react-constant-elements/README.md +++ b/packages/babel-plugin-transform-react-constant-elements/README.md @@ -6,7 +6,7 @@ **In** -```js +```jsx const Hr = () => { return
; }; @@ -14,7 +14,7 @@ const Hr = () => { **Out** -```js +```jsx const _ref =
; const Hr = () => { @@ -26,13 +26,13 @@ const Hr = () => { - **Spread Operator** - ```js + ```jsx
``` - **Refs** - ```js + ```jsx
this.node = node} /> ``` diff --git a/packages/babel-runtime/package.json b/packages/babel-runtime/package.json index 50c0c37b87..aa64eadd57 100644 --- a/packages/babel-runtime/package.json +++ b/packages/babel-runtime/package.json @@ -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" } } diff --git a/packages/babel-traverse/test/scope.js b/packages/babel-traverse/test/scope.js index 7f823ecfd6..ac6e251c26 100644 --- a/packages/babel-traverse/test/scope.js +++ b/packages/babel-traverse/test/scope.js @@ -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 }); + }); }); });