Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/babel-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"babel-template": "7.0.0-alpha.10",
"babel-traverse": "7.0.0-alpha.10",
"babel-types": "7.0.0-alpha.10",
"babylon": "7.0.0-beta.11",
"babylon": "7.0.0-beta.12",
"convert-source-map": "^1.1.0",
"debug": "^2.1.1",
"json5": "^0.5.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/babel-generator/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@
},
"devDependencies": {
"babel-helper-fixtures": "7.0.0-alpha.10",
"babylon": "^7.0.0-beta.8"
"babylon": "^7.0.0-beta.12"
}
}
3 changes: 3 additions & 0 deletions packages/babel-plugin-syntax-numeric-separator/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
*.log
src
36 changes: 36 additions & 0 deletions packages/babel-plugin-syntax-numeric-separator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# babel-plugin-syntax-numeric-separator

> Allow parsing of Numeric Literals (Decimal, Binary, Hex and Octal) that contain a _NumericLiteralSeparator_.


## Installation

```sh
npm install --save-dev babel-plugin-syntax-numeric-separator
```

## Usage

### Via `.babelrc` (Recommended)

**.babelrc**

```json
{
"plugins": ["syntax-numeric-separator"]
}
```

### Via CLI

```sh
babel --plugins syntax-numeric-separator script.js
```

### Via Node API

```javascript
require("babel-core").transform("code", {
plugins: ["syntax-numeric-separator"]
});
```
13 changes: 13 additions & 0 deletions packages/babel-plugin-syntax-numeric-separator/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "babel-plugin-syntax-numeric-separator",
"version": "7.0.0-alpha.12",
"description": "Allow parsing of Decimal, Binary, Hex and Octal literals that contain a Numeric Literal Separator",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-numeric-separator",
"license": "MIT",
"main": "lib/index.js",
"keywords": [
"babel-plugin"
],
"dependencies": {},
"devDependencies": {}
}
7 changes: 7 additions & 0 deletions packages/babel-plugin-syntax-numeric-separator/src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default function () {
return {
manipulateOptions(opts, parserOpts) {
parserOpts.plugins.push("numericSeparator");
},
};
}
3 changes: 3 additions & 0 deletions packages/babel-plugin-transform-numeric-separator/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
src
test
*.log
114 changes: 114 additions & 0 deletions packages/babel-plugin-transform-numeric-separator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# babel-plugin-transform-numeric-separator

> This plugin allows Babel to transform Decimal, Binary, Hex and Octal literals containing Numeric Literal Separator to their non-separated form.

## Example

### Decimal Literals

```js
let budget = 1_000_000_000_000;

// What is the value of `budget`? It's 1 trillion!
//
// Let's confirm:
console.log(budget === 10 ** 12); // true
```

### Binary Literals

```js
let nibbles = 0b1010_0001_1000_0101;

// Is bit 7 on? It sure is!
// 0b1010_0001_1000_0101
// ^
//
// We can double check:
console.log(!!(nibbles & (1 << 7))); // true
```

### Hex Literal

```js
// Messages are sent as 24 bit values, but should be
// treated as 3 distinct bytes:
let message = 0xA0_B0_C0;

// What's the value of the upper most byte? It's A0, or 160.
// We can confirm that:
let a = (message >> 16) & 0xFF;
console.log(a.toString(16), a); // a0, 160

// What's the value of the middle byte? It's B0, or 176.
// Let's just make sure...
let b = (message >> 8) & 0xFF;
console.log(b.toString(16), b); // b0, 176

// What's the value of the lower most byte? It's C0, or 192.
// Again, let's prove that:
let c = message & 0xFF;
console.log(c.toString(16), b); // c0, 192
```

### Octal Literal

*hand wave emoji*

Octals are great for permissions, but also look better when represented in `0o0000` form. No real benefit with separators here.

## Installation

```sh
npm install --save-dev babel-plugin-transform-numeric-separator
```

## Usage

### Via `.babelrc` (Recommended)

**.babelrc**

```json
{
"plugins": ["transform-numeric-separator"]
}
```

### Via CLI

```sh
babel --plugins transform-numeric-separator script.js
```

### Via Node API

```javascript
require("babel-core").transform("code", {
plugins: ["transform-numeric-separator"]
});
```

## Additional Information

If you need to further compile ES2015 Decimal, Binary, Hex and Octal number representations to their pre-ES2015 numeric literal form, add the [`"transform-es2015-literals"`](http://babeljs.io/docs/plugins/transform-es2015-literals/) plugin:

> `transform-es2015-literals` is already included in [babel-preset-env](https://github.com/babel/babel-preset-env) and babel-preset-es2015.

### Via `.babelrc` (Recommended)

**.babelrc**

```json
{
"presets": ["env"],
"plugins": ["transform-numeric-separator"]
}
{
"plugins": ["transform-numeric-separator", "transform-es2015-literals"]
}
```

## References

* [Proposal: Numeric Separators](https://github.com/samuelgoto/proposal-numeric-separator)
17 changes: 17 additions & 0 deletions packages/babel-plugin-transform-numeric-separator/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "babel-plugin-transform-numeric-separator",
"version": "7.0.0-alpha.12",
"description": "Remove numeric separators from Decimal, Binary, Hex and Octal literals",
"repository": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-numeric-separator",
"license": "MIT",
"main": "lib/index.js",
"keywords": [
"babel-plugin"
],
"dependencies": {
"babel-plugin-syntax-numeric-separator": "7.0.0-alpha.12"
},
"devDependencies": {
"babel-helper-plugin-test-runner": "7.0.0-alpha.10"
}
}
31 changes: 31 additions & 0 deletions packages/babel-plugin-transform-numeric-separator/src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import syntaxNumericSeparator from "babel-plugin-syntax-numeric-separator";

export default function () {

function replacer(value) {
return value.replace(/_/g, "");
}

function replaceNumberArg({ node }) {
if (node.callee.name === "Number") {
node.arguments[0].value = replacer(node.arguments[0].value);
}
}

const CallExpression = replaceNumberArg;
const NewExpression = replaceNumberArg;

return {
inherits: syntaxNumericSeparator,

visitor: {
CallExpression,
NewExpression,
NumericLiteral({ node }) {
if (node.extra && /_/.test(node.extra.raw)) {
node.value = replacer(node.extra.raw);
}
},
},
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
assert.equal(Number("1_000"), Number("1000"));
assert.equal(Number("0xAE_BE_CE"), Number("0xAEBECE"));
assert.equal(Number("0b1010_0001_1000_0101"), Number("0b1010000110000101"));
assert.equal(Number("0o0_6_6_6"), Number("0o0666"));

assert.equal(new Number("1_000").valueOf(), new Number("1000").valueOf());
assert.equal(new Number("0xAE_BE_CE").valueOf(), new Number("0xAEBECE").valueOf());
assert.equal(new Number("0b1010_0001_1000_0101").valueOf(), new Number("0b1010000110000101").valueOf());
assert.equal(new Number("0o0_6_6_6").valueOf(), new Number("0o0666").valueOf());
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"plugins": ["transform-numeric-separator"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
assert.equal(1_000, 1000);
assert.equal(0xAE_BE_CE, 0xAEBECE);
assert.equal(0b1010_0001_1000_0101, 0b1010000110000101);
assert.equal(0o0_6_6_6, 0o0666);
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"plugins": ["transform-numeric-separator"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1_000;
0xA0_B0_C0;
0b1010_0001_1000_0101;
0o0_6_6_6;
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
assert.equal(1_000, 1000);
assert.equal(0xAE_BE_CE, 11452110);
assert.equal(0b1010_0001_1000_0101, 41349);
assert.equal(0o0_6_6_6, 438);
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
1000;
10531008;
41349;
438;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"plugins": ["transform-numeric-separator", "transform-es2015-literals"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import runner from "babel-helper-plugin-test-runner";

runner(__dirname);
1 change: 1 addition & 0 deletions packages/babel-preset-stage-1/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-1",
"main": "lib/index.js",
"dependencies": {
"babel-plugin-syntax-numeric-separator": "7.0.0-alpha.12",
"babel-plugin-transform-decorators": "7.0.0-alpha.10",
"babel-plugin-transform-export-extensions": "7.0.0-alpha.10",
"babel-preset-stage-2": "7.0.0-alpha.10"
Expand Down
2 changes: 2 additions & 0 deletions packages/babel-preset-stage-1/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import presetStage2 from "babel-preset-stage-2";

import transformDecorators from "babel-plugin-transform-decorators";
import transformExportExtensions from "babel-plugin-transform-export-extensions";
import transformNumericSeparator from "babel-plugin-transform-numeric-separator";

export default function () {
return {
Expand All @@ -11,6 +12,7 @@ export default function () {
plugins: [
transformDecorators,
transformExportExtensions,
transformNumericSeparator,
],
};
}
2 changes: 1 addition & 1 deletion packages/babel-template/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"repository": "https://github.com/babel/babel/tree/master/packages/babel-template",
"main": "lib/index.js",
"dependencies": {
"babylon": "7.0.0-beta.11",
"babylon": "7.0.0-beta.12",
"babel-traverse": "7.0.0-alpha.10",
"babel-types": "7.0.0-alpha.10",
"lodash": "^4.2.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/babel-traverse/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"babel-helper-function-name": "7.0.0-alpha.7",
"babel-messages": "7.0.0-alpha.10",
"babel-types": "7.0.0-alpha.10",
"babylon": "7.0.0-beta.11",
"babylon": "7.0.0-beta.12",
"debug": "^2.2.0",
"globals": "^9.0.0",
"invariant": "^2.2.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/babel-types/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
},
"devDependencies": {
"babel-generator": "7.0.0-alpha.10",
"babylon": "^7.0.0-beta.8"
"babylon": "^7.0.0-beta.12"
}
}