Merge branch '7.0'

This commit is contained in:
Henry Zhu 2017-03-21 17:05:48 -04:00
commit 0f982799b6
1436 changed files with 14178 additions and 12880 deletions

View File

@ -1,48 +1,43 @@
sudo: false sudo: false
language: node_js language: node_js
node_js: node_js:
- "0.10"
- "0.12"
- "4" - "4"
- "5"
- "6" - "6"
- "7" - "7"
before_install: env:
# Rollup doesn't support node < 4.x. Switch to latest for build - JOB=test
- . $HOME/.nvm/nvm.sh
- nvm install stable && nvm use stable
before_script: before_script:
- 'if [ -n "${BABEL-}" ]; then make bootstrap-babel ; fi' - 'if [ "$JOB" = "babel-test" ]; then make bootstrap-babel ; fi'
- 'if [ -n "${FLOWTESTS-}" ]; then make bootstrap-flow ; fi' - 'if [ "$JOB" = "flow-test" ]; then make bootstrap-flow ; fi'
- 'BABEL_ENV=test npm run build' - 'if [ "$JOB" = "test" ]; then yarn run build; fi'
# Switch back to node version currently being tested prior to test run
- 'nvm use $TRAVIS_NODE_VERSION;'
script: script:
- 'if [ -n "${LINT-}" ]; then npm run lint ; fi' - 'if [ "$JOB" = "test" ]; then yarn test-only; fi'
- 'if [ -n "${FLOW-}" ]; then npm run flow ; fi' - 'if [ "$JOB" = "lint" ]; then yarn run lint && yarn run flow; fi'
- 'if [ -n "${FLOWTESTS-}" ]; then make test-flow ; fi' - 'if [ "$JOB" = "flow-test" ]; then make test-flow; fi'
- 'if [ -n "${BABEL-}" ]; then make test-babel ; fi' - 'if [ "$JOB" = "babel-test" ]; then make test-babel; fi'
- 'if [ -z "${LINT-}" ] && [ -z "${FLOW-}" ] && [ -z "${BABEL-}" ] && [ -z "${FLOWTESTS-}" ]; then npm run test-ci ; fi' - 'if [ "$JOB" = "test-coverage" ]; then yarn run test-coverage; fi'
matrix: matrix:
fast_finish: true fast_finish: true
include: include:
- node_js: "node" - node_js: "lts/*"
env: LINT=true env: JOB=test-coverage
- node_js: "node" - node_js: "lts/*"
env: FLOW=true env: JOB=lint
- node_js: "node" - node_js: "lts/*"
env: BABEL=true env: JOB=babel-test
- node_js: "node" - node_js: "lts/*"
env: FLOWTESTS=true env: JOB=flow-test
allow_failures: allow_failures:
- node_js: "node" - node_js: "lts/*"
env: FLOWTESTS=true env: JOB=flow-test
after_success: 'if [ -z "${LINT-}" ] && [ -z "${FLOW-}" ] && [ -z "${FLOWTESTS-}" ]; then npm run coverage ; fi' after_success:
- 'if [ "$JOB" = "babel-test" ]; then bash <(curl -s https://codecov.io/bash) -f coverage/coverage-final.json -F babel ; fi'
- 'if [ "$JOB" = "test-coverage" ]; then bash <(curl -s https://codecov.io/bash) -f coverage/coverage-final.json -F babylon ; fi'
notifications: notifications:
slack: babeljs:5Wy4QX13KVkGy9CnU0rmvgeK slack: babeljs:5Wy4QX13KVkGy9CnU0rmvgeK

View File

@ -15,6 +15,54 @@ _Note: Gaps between patch versions are faulty, broken or test releases._
See the [Babel Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) for the pre-6.8.0 version Changelog. See the [Babel Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) for the pre-6.8.0 version Changelog.
## 7.0.0-beta.4 (2017-03-01)
* Don't consume async when checking for async func decl (#377) (Brian Ng)
* add `ranges` option [skip ci] (Henry Zhu)
* Don't parse class properties without initializers when classProperties is disabled and Flow is enabled (#300) (Andrew Levine)
## 7.0.0-beta.3 (2017-02-28)
- [7.0] Change RestProperty/SpreadProperty to RestElement/SpreadElement (#384)
- Merge changes from 6.x
## 7.0.0-beta.2 (2017-02-20)
- estree: correctly change literals in all cases (#368) (Daniel Tschinder)
## 7.0.0-beta.1 (2017-02-20)
- Fix negative number literal typeannotations (#366) (Daniel Tschinder)
- Update contributing with more test info [skip ci] (#355) (Brian Ng)
## 7.0.0-beta.0 (2017-02-15)
- Reintroduce Variance node (#333) (Daniel Tschinder)
- Rename NumericLiteralTypeAnnotation to NumberLiteralTypeAnnotation (#332) (Charles Pick)
- [7.0] Remove ForAwaitStatement, add await flag to ForOfStatement (#349) (Brandon Dail)
- chore(package): update ava to version 0.18.0 (#345) (greenkeeper[bot])
- chore(package): update babel-plugin-istanbul to version 4.0.0 (#350) (greenkeeper[bot])
- Change location of ObjectTypeIndexer to match flow (#228) (Daniel Tschinder)
- Rename flow AST Type ExistentialTypeParam to ExistsTypeAnnotation (#322) (Toru Kobayashi)
- Revert "Temporary rollback for erroring on trailing comma with spread (#154)" (#290) (Daniel Tschinder)
- Remove classConstructorCall plugin (#291) (Brian Ng)
- Update yarn.lock (Daniel Tschinder)
- Update cross-env to 3.x (Daniel Tschinder)
- [7.0] Remove node 0.10, 0.12 and 5 from Travis (#284) (Sergey Rubanov)
- Remove `String.fromCodePoint` shim (#279) (Mathias Bynens)
## 6.16.1 (2017-02-23)
### :bug: Regression
- Revert "Fix export default async function to be FunctionDeclaration" ([#375](https://github.com/babel/babylon/pull/375))
Need to modify Babel for this AST node change, so moving to 7.0.
- Revert "Don't parse class properties without initializers when classProperties plugin is disabled, and Flow is enabled" ([#376](https://github.com/babel/babylon/pull/376))
[react-native](https://github.com/facebook/react-native/issues/12542) broke with this so we reverted.
## 6.16.0 (2017-02-23) ## 6.16.0 (2017-02-23)
### :rocket: New Feature ### :rocket: New Feature

View File

@ -6,10 +6,14 @@ contributing, please read the
## Setup local env ## Setup local env
> Install yarn beforehand: https://yarnpkg.com/en/docs/install
To start developing on Babylon you only need to install its dependencies: To start developing on Babylon you only need to install its dependencies:
```bash ```bash
npm install git clone https://github.com/babel/babylon
cd babylon
yarn
``` ```
## Tests ## Tests
@ -31,6 +35,26 @@ npm run test-only
Note, this does not actually run a build, so you may have to call `npm run build` after Note, this does not actually run a build, so you may have to call `npm run build` after
performing any changes. performing any changes.
### Running one test
To run only a single test, add `"only": true` to the `options.json` inside any test fixture folder (you may have to create the file if it doesn't exist).
For example, let's say we want to only run the test for the [`test/fixtures/comments/basic/shebang-import`](https://github.com/babel/babylon/tree/7.0/test/fixtures/comments/basic/shebang-import) fixture.
Add `"only": true` to its `options.json`:
```json
{
"sourceType": "module",
"only": true
}
```
Then, run the tests using the same command as before:
```bash
npm run test-only
```
### Checking code coverage locally ### Checking code coverage locally
To generate code coverage, be sure to set `BABEL_ENV=test` so that code is instrumented during To generate code coverage, be sure to set `BABEL_ENV=test` so that code is instrumented during

View File

@ -8,19 +8,18 @@ clean: ; rm -rf ./build
bootstrap-babel: clean bootstrap-babel: clean
mkdir ./build mkdir ./build
git clone --depth=1 --branch=master https://github.com/babel/babel.git ./build/babel git clone --depth=1 --branch=7.0 https://github.com/babel/babel.git ./build/babel
cd ./build/babel; \ cd ./build/babel; \
make bootstrap make bootstrap
find ./build/babel/packages -type d -name 'babylon' -prune -exec rm -rf '{}' \; -exec ln -s '../../../../../' '{}' \; find ./build/babel/packages -type d -name 'babylon' -prune -exec rm -rf '{}' \; -exec ln -s '../../../../../' '{}' \;
test-babel: test-babel:
BABEL_ENV=test npm run build BABEL_ENV=test yarn run build
# in case babel ever switches to nyc: filter its config out of package.json # in case babel ever switches to nyc: filter its config out of package.json
cd ./build/babel; \ cd ./build/babel; \
jq "del(.nyc)" package.json > package.nonyc.json; \ jq "del(.nyc)" package.json > package.nonyc.json; \
mv -f package.nonyc.json package.json; \ mv -f package.nonyc.json package.json; \
../../node_modules/.bin/nyc --no-instrument --no-source-map --report-dir ../../coverage node_modules/mocha/bin/_mocha `scripts/_get-test-directories.sh` --opts test/mocha.opts; \ ../../node_modules/.bin/nyc --no-instrument --no-source-map --reporter=json --report-dir ../../coverage node_modules/mocha/bin/_mocha `scripts/_get-test-directories.sh` --opts test/mocha.opts; \
mv .nyc_output ../../.nyc_output
bootstrap-flow: clean bootstrap-flow: clean
mkdir ./build mkdir ./build

View File

@ -7,6 +7,7 @@
</p> </p>
<p align="center"> <p align="center">
<a href="https://www.npmjs.com/package/babylon"><img alt="NPM Version" src="https://img.shields.io/npm/v/babylon.svg?style=flat"></a>
<a href="https://travis-ci.org/babel/babylon"><img alt="Travis Status" src="https://img.shields.io/travis/babel/babylon/master.svg?style=flat&label=travis"></a> <a href="https://travis-ci.org/babel/babylon"><img alt="Travis Status" src="https://img.shields.io/travis/babel/babylon/master.svg?style=flat&label=travis"></a>
<a href="https://codecov.io/gh/babel/babylon"><img alt="Codecov Status" src="https://img.shields.io/codecov/c/github/babel/babylon/master.svg?style=flat"></a> <a href="https://codecov.io/gh/babel/babylon"><img alt="Codecov Status" src="https://img.shields.io/codecov/c/github/babel/babylon/master.svg?style=flat"></a>
</p> </p>
@ -56,6 +57,8 @@ mind. When in doubt, use `.parse()`.
- **strictMode**: TODO - **strictMode**: TODO
- **ranges**: Adds a `ranges` property to each node: `[node.start, node.end]`
### Output ### Output
Babylon generates AST according to [Babel AST format][]. Babylon generates AST according to [Babel AST format][].

View File

@ -1,6 +1,7 @@
These are the core Babylon AST node types. These are the core Babylon AST node types.
- [Node objects](#node-objects) - [Node objects](#node-objects)
- [Changes](#changes)
- [Identifier](#identifier) - [Identifier](#identifier)
- [Literals](#literals) - [Literals](#literals)
- [RegExpLiteral](#regexpliteral) - [RegExpLiteral](#regexpliteral)
@ -35,7 +36,6 @@ These are the core Babylon AST node types.
- [ForStatement](#forstatement) - [ForStatement](#forstatement)
- [ForInStatement](#forinstatement) - [ForInStatement](#forinstatement)
- [ForOfStatement](#forofstatement) - [ForOfStatement](#forofstatement)
- [ForAwaitStatement](#forawaitstatement)
- [Declarations](#declarations) - [Declarations](#declarations)
- [FunctionDeclaration](#functiondeclaration) - [FunctionDeclaration](#functiondeclaration)
- [VariableDeclaration](#variabledeclaration) - [VariableDeclaration](#variabledeclaration)
@ -56,8 +56,6 @@ These are the core Babylon AST node types.
- [ObjectMember](#objectmember) - [ObjectMember](#objectmember)
- [ObjectProperty](#objectproperty) - [ObjectProperty](#objectproperty)
- [ObjectMethod](#objectmethod) - [ObjectMethod](#objectmethod)
- [RestProperty](#restproperty)
- [SpreadProperty](#spreadproperty)
- [FunctionExpression](#functionexpression) - [FunctionExpression](#functionexpression)
- [Unary operations](#unary-operations) - [Unary operations](#unary-operations)
- [UnaryExpression](#unaryexpression) - [UnaryExpression](#unaryexpression)
@ -141,6 +139,22 @@ interface Position {
} }
``` ```
# Changes
### Babylon 7
Flow: Node renamed from `ExistentialTypeParam` to `ExistsTypeAnnotation` [#322](https://github.com/babel/babylon/pull/322)
Flow: Node renamed from `NumericLiteralTypeAnnotation` to `NumberLiteralTypeAnnotation` [babel/babylon#332](https://github.com/babel/babylon/pull/332)
Flow: Node `Variance` which replaces the string value of the `variance` field on several nodes [babel/babylon#333](https://github.com/babel/babylon/pull/333)
Flow: `ObjectTypeIndexer` location info matches Flow's better [babel/babylon#228](https://github.com/babel/babylon/pull/228)
Node `ForAwaitStatement` has been removed [#349](https://github.com/babel/babylon/pull/349) in favor of modifying `ForOfStatement`
`RestProperty` and `SpreadProperty` have been dropped in favor of `RestElement` and `SpreadElement`.
# Identifier # Identifier
```js ```js
@ -479,16 +493,7 @@ A `for`/`in` statement.
```js ```js
interface ForOfStatement <: ForInStatement { interface ForOfStatement <: ForInStatement {
type: "ForOfStatement"; type: "ForOfStatement";
} await: boolean;
```
A `for`/`await` statement.
## ForAwaitStatement
```js
interface ForAwaitStatement <: ForInStatement {
type: "ForAwaitStatement";
} }
``` ```
@ -652,7 +657,7 @@ An array expression.
```js ```js
interface ObjectExpression <: Expression { interface ObjectExpression <: Expression {
type: "ObjectExpression"; type: "ObjectExpression";
properties: [ ObjectProperty | ObjectMethod | SpreadProperty ]; properties: [ ObjectProperty | ObjectMethod | SpreadElement ];
} }
``` ```
@ -664,7 +669,6 @@ An object expression.
interface ObjectMember <: Node { interface ObjectMember <: Node {
key: Expression; key: Expression;
computed: boolean; computed: boolean;
value: Expression;
decorators: [ Decorator ]; decorators: [ Decorator ];
} }
``` ```
@ -675,6 +679,7 @@ interface ObjectMember <: Node {
interface ObjectProperty <: ObjectMember { interface ObjectProperty <: ObjectMember {
type: "ObjectProperty"; type: "ObjectProperty";
shorthand: boolean; shorthand: boolean;
value: Expression;
} }
``` ```
@ -687,24 +692,6 @@ interface ObjectMethod <: ObjectMember, Function {
} }
``` ```
## RestProperty
```js
interface RestProperty <: Node {
type: "RestProperty";
argument: Expression;
}
```
## SpreadProperty
```js
interface SpreadProperty <: Node {
type: "SpreadProperty";
argument: Expression;
}
```
## FunctionExpression ## FunctionExpression
```js ```js
@ -980,7 +967,7 @@ interface AssignmentProperty <: ObjectProperty {
interface ObjectPattern <: Pattern { interface ObjectPattern <: Pattern {
type: "ObjectPattern"; type: "ObjectPattern";
properties: [ AssignmentProperty | RestProperty ]; properties: [ AssignmentProperty | RestElement ];
} }
``` ```
@ -1035,10 +1022,9 @@ interface ClassBody <: Node {
## ClassMethod ## ClassMethod
```js ```js
interface ClassMethod <: Node { interface ClassMethod <: Function {
type: "ClassMethod"; type: "ClassMethod";
key: Expression; key: Expression;
value: FunctionExpression;
kind: "constructor" | "method" | "get" | "set"; kind: "constructor" | "method" | "get" | "set";
computed: boolean; computed: boolean;
static: boolean; static: boolean;

View File

@ -1,6 +1,6 @@
{ {
"name": "babylon", "name": "babylon",
"version": "6.16.1", "version": "7.0.0-beta.5",
"description": "A JavaScript parser", "description": "A JavaScript parser",
"author": "Sebastian McKenzie <sebmck@gmail.com>", "author": "Sebastian McKenzie <sebmck@gmail.com>",
"homepage": "https://babeljs.io/", "homepage": "https://babeljs.io/",
@ -17,19 +17,21 @@
"bin", "bin",
"lib" "lib"
], ],
"engines": {
"node": ">=4.2.0"
},
"devDependencies": { "devDependencies": {
"ava": "^0.17.0", "ava": "^0.18.0",
"babel-cli": "^6.14.0", "babel-cli": "^6.14.0",
"babel-eslint": "^7.0.0", "babel-eslint": "^7.0.0",
"babel-helper-fixtures": "^6.9.0", "babel-helper-fixtures": "^6.9.0",
"babel-plugin-external-helpers": "^6.18.0", "babel-plugin-external-helpers": "^6.18.0",
"babel-plugin-istanbul": "^3.0.0", "babel-plugin-istanbul": "^4.0.0",
"babel-plugin-transform-flow-strip-types": "^6.14.0", "babel-plugin-transform-flow-strip-types": "^6.14.0",
"babel-preset-es2015": "^6.14.0", "babel-preset-es2015": "^6.14.0",
"babel-preset-stage-0": "^6.5.0", "babel-preset-stage-0": "^6.5.0",
"chalk": "^1.1.3", "chalk": "^1.1.3",
"codecov": "^1.0.1", "cross-env": "^3.1.4",
"cross-env": "^2.0.0",
"eslint": "^3.7.1", "eslint": "^3.7.1",
"eslint-config-babel": "^6.0.0", "eslint-config-babel": "^6.0.0",
"eslint-plugin-flowtype": "^2.20.0", "eslint-plugin-flowtype": "^2.20.0",
@ -46,18 +48,17 @@
"babylon": "./bin/babylon.js" "babylon": "./bin/babylon.js"
}, },
"scripts": { "scripts": {
"build": "npm run clean && rollup -c", "build": "yarn run clean && rollup -c",
"coverage": "nyc report --reporter=json && codecov -f coverage/coverage-final.json", "changelog": "git log `git describe --tags --abbrev=0`..HEAD --pretty=format:' * %s (%an)' | grep -v 'Merge pull request'",
"lint": "eslint src bin",
"clean": "rimraf lib", "clean": "rimraf lib",
"flow": "flow", "flow": "flow",
"prepublish": "cross-env BABEL_ENV=production npm run build", "lint": "eslint src bin",
"preversion": "npm run test && npm run changelog", "prepublish": "cross-env BABEL_ENV=production yarn run build",
"test": "npm run lint && npm run flow && npm run build -- -m && npm run test-only", "preversion": "yarn run test && npm run changelog",
"test": "yarn run lint && yarn run flow && yarn run build -- -m && yarn run test-only",
"test-only": "ava", "test-only": "ava",
"test-ci": "nyc npm run test-only", "test-coverage": "cross-env BABEL_ENV=test yarn run build && nyc --reporter=json --reporter=text yarn run test-only",
"changelog": "git log `git describe --tags --abbrev=0`..HEAD --pretty=format:' * %s (%an)' | grep -v 'Merge pull request'", "watch": "yarn run clean && rollup -c --watch"
"watch": "npm run clean && rollup -c --watch"
}, },
"nyc": { "nyc": {
"include": [ "include": [
@ -75,10 +76,5 @@
"src/**/*.js", "src/**/*.js",
"bin/**/*.js" "bin/**/*.js"
] ]
},
"greenkeeper": {
"ignore": [
"cross-env"
]
} }
} }

24
scripts/rmExpected.js Normal file
View File

@ -0,0 +1,24 @@
// Use this to remove all "expected.json" in all tests.
const { existsSync, readdirSync, statSync, unlinkSync } = require("fs");
const { join } = require("path");
const rootPath = join(__dirname, "..", "test", "fixtures");
for (const fixtureName of readdirSync(rootPath)) {
const fixturePath = join(rootPath, fixtureName);
for (const suiteName of readdirSync(fixturePath)) {
const suitePath = join(fixturePath, suiteName);
if (!statSync(suitePath).isDirectory()) {
continue;
}
for (const testName of readdirSync(suitePath)) {
const testPath = join(suitePath, testName);
const expectedPath = join(testPath, "expected.json");
if (existsSync(expectedPath)) {
unlinkSync(expectedPath);
}
}
}
}

View File

@ -9,7 +9,8 @@ export const defaultOptions: {
allowImportExportEverywhere: boolean, allowImportExportEverywhere: boolean,
allowSuperOutsideMethod: boolean, allowSuperOutsideMethod: boolean,
plugins: Array<string>, plugins: Array<string>,
strictMode: any strictMode: any,
ranges: boolean,
} = { } = {
// Source type ("script" or "module") for different semantics // Source type ("script" or "module") for different semantics
sourceType: "script", sourceType: "script",
@ -30,6 +31,15 @@ export const defaultOptions: {
plugins: [], plugins: [],
// TODO // TODO
strictMode: null, strictMode: null,
// Nodes have their start and end characters offsets recorded in
// `start` and `end` properties (directly on the node, rather than
// the `loc` object, which holds line/column data. To also add a
// [semi-standardized][range] `range` property holding a `[start,
// end]` array with the same numbers, set the `ranges` option to
// `true`.
//
// [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
ranges: false,
}; };
// Interpret and default an options object // Interpret and default an options object

View File

@ -752,7 +752,7 @@ pp.parseObj = function (isPattern, refShorthandDefaultPos) {
if (this.hasPlugin("objectRestSpread") && this.match(tt.ellipsis)) { if (this.hasPlugin("objectRestSpread") && this.match(tt.ellipsis)) {
prop = this.parseSpread(isPattern ? { start: 0 } : undefined); prop = this.parseSpread(isPattern ? { start: 0 } : undefined);
prop.type = isPattern ? "RestProperty" : "SpreadProperty"; prop.type = isPattern ? "RestElement" : "SpreadElement";
if (isPattern) this.toAssignable(prop.argument, true, "object pattern"); if (isPattern) this.toAssignable(prop.argument, true, "object pattern");
node.properties.push(prop); node.properties.push(prop);
if (isPattern) { if (isPattern) {
@ -762,9 +762,7 @@ pp.parseObj = function (isPattern, refShorthandDefaultPos) {
} else if (this.eat(tt.braceR)) { } else if (this.eat(tt.braceR)) {
break; break;
} else if (this.match(tt.comma) && this.lookahead().type === tt.braceR) { } else if (this.match(tt.comma) && this.lookahead().type === tt.braceR) {
// TODO: temporary rollback this.unexpected(position, "A trailing comma is not permitted after the rest element");
// this.unexpected(position, "A trailing comma is not permitted after the rest element");
continue;
} else { } else {
firstRestLocation = position; firstRestLocation = position;
continue; continue;

View File

@ -3,19 +3,6 @@ import { getOptions } from "../options";
import Tokenizer from "../tokenizer"; import Tokenizer from "../tokenizer";
export const plugins = {}; export const plugins = {};
const frozenDeprecatedWildcardPluginList = [
"jsx",
"doExpressions",
"objectRestSpread",
"decorators",
"classProperties",
"exportExtensions",
"asyncGenerators",
"functionBind",
"functionSent",
"dynamicImport",
"flow"
];
export default class Parser extends Tokenizer { export default class Parser extends Tokenizer {
constructor(options: Object, input: string) { constructor(options: Object, input: string) {
@ -43,10 +30,6 @@ export default class Parser extends Tokenizer {
} }
hasPlugin(name: string): boolean { hasPlugin(name: string): boolean {
if (this.plugins["*"] && frozenDeprecatedWildcardPluginList.indexOf(name) > -1) {
return true;
}
return !!this.plugins[name]; return !!this.plugins[name];
} }
@ -54,25 +37,7 @@ export default class Parser extends Tokenizer {
this[name] = f(this[name]); this[name] = f(this[name]);
} }
loadAllPlugins() {
// ensure flow plugin loads last, also ensure estree is not loaded with *
const pluginNames = Object.keys(plugins).filter((name) => name !== "flow" && name !== "estree");
pluginNames.push("flow");
pluginNames.forEach((name) => {
const plugin = plugins[name];
if (plugin) plugin(this);
});
}
loadPlugins(pluginList: Array<string>): { [key: string]: boolean } { loadPlugins(pluginList: Array<string>): { [key: string]: boolean } {
// TODO: Deprecate "*" option in next major version of Babylon
if (pluginList.indexOf("*") >= 0) {
this.loadAllPlugins();
return { "*": true };
}
const pluginMap = {}; const pluginMap = {};
if (pluginList.indexOf("flow") >= 0) { if (pluginList.indexOf("flow") >= 0) {

View File

@ -34,8 +34,8 @@ pp.toAssignable = function (node, isBinding, contextDescription) {
this.toAssignable(node.value, isBinding, contextDescription); this.toAssignable(node.value, isBinding, contextDescription);
break; break;
case "SpreadProperty": case "SpreadElement":
node.type = "RestProperty"; node.type = "RestElement";
break; break;
case "ArrayExpression": case "ArrayExpression":
@ -85,6 +85,8 @@ pp.toAssignableList = function (exprList, isBinding, contextDescription) {
} }
for (let i = 0; i < end; i++) { for (let i = 0; i < end; i++) {
const elt = exprList[i]; const elt = exprList[i];
if (elt && elt.type === "SpreadElement")
this.raise(elt.start, "The rest element has to be the last element when destructuring");
if (elt) this.toAssignable(elt, isBinding, contextDescription); if (elt) this.toAssignable(elt, isBinding, contextDescription);
} }
return exprList; return exprList;
@ -246,10 +248,6 @@ pp.checkLVal = function (expr, isBinding, checkClashes, contextDescription) {
this.checkLVal(expr.left, isBinding, checkClashes, "assignment pattern"); this.checkLVal(expr.left, isBinding, checkClashes, "assignment pattern");
break; break;
case "RestProperty":
this.checkLVal(expr.argument, isBinding, checkClashes, "rest property");
break;
case "RestElement": case "RestElement":
this.checkLVal(expr.argument, isBinding, checkClashes, "rest element"); this.checkLVal(expr.argument, isBinding, checkClashes, "rest element");
break; break;

View File

@ -1,5 +1,5 @@
import Parser from "./index"; import Parser from "./index";
import { SourceLocation } from "../util/location"; import { SourceLocation, type Position } from "../util/location";
// Start an AST node, attaching a start offset. // Start an AST node, attaching a start offset.
@ -7,12 +7,13 @@ const pp = Parser.prototype;
const commentKeys = ["leadingComments", "trailingComments", "innerComments"]; const commentKeys = ["leadingComments", "trailingComments", "innerComments"];
class Node { class Node {
constructor(pos?: number, loc?: number, filename?: string) { constructor(parser?: Parser, pos?: number, loc?: Position) {
this.type = ""; this.type = "";
this.start = pos; this.start = pos;
this.end = 0; this.end = 0;
this.loc = new SourceLocation(loc); this.loc = new SourceLocation(loc);
if (filename) this.loc.filename = filename; if (parser && parser.options.ranges) this.range = [pos, 0];
if (parser && parser.filename) this.loc.filename = parser.filename;
} }
type: string; type: string;
@ -34,17 +35,18 @@ class Node {
} }
pp.startNode = function () { pp.startNode = function () {
return new Node(this.state.start, this.state.startLoc, this.filename); return new Node(this, this.state.start, this.state.startLoc);
}; };
pp.startNodeAt = function (pos, loc) { pp.startNodeAt = function (pos, loc) {
return new Node(pos, loc, this.filename); return new Node(this, pos, loc);
}; };
function finishNodeAt(node, type, pos, loc) { function finishNodeAt(node, type, pos, loc) {
node.type = type; node.type = type;
node.end = pos; node.end = pos;
node.loc.end = loc; node.loc.end = loc;
if (this.options.ranges) node.range[1] = pos;
this.processComment(node); this.processComment(node);
return node; return node;
} }
@ -60,3 +62,15 @@ pp.finishNode = function (node, type) {
pp.finishNodeAt = function (node, type, pos, loc) { pp.finishNodeAt = function (node, type, pos, loc) {
return finishNodeAt.call(this, node, type, pos, loc); return finishNodeAt.call(this, node, type, pos, loc);
}; };
/**
* Reset the start location of node to the start location of locationNode
*/
pp.resetStartLocationFromNode = function (node, locationNode) {
node.start = locationNode.start;
node.loc.start = locationNode.loc.start;
if (this.options.ranges) node.range[0] = locationNode.range[0];
return node;
};

View File

@ -529,14 +529,13 @@ pp.parseFor = function (node, init) {
// same from parser's perspective. // same from parser's perspective.
pp.parseForIn = function (node, init, forAwait) { pp.parseForIn = function (node, init, forAwait) {
let type; const type = this.match(tt._in) ? "ForInStatement" : "ForOfStatement";
if (forAwait) { if (forAwait) {
this.eatContextual("of"); this.eatContextual("of");
type = "ForAwaitStatement";
} else { } else {
type = this.match(tt._in) ? "ForInStatement" : "ForOfStatement";
this.next(); this.next();
} }
node.await = !!forAwait;
node.left = init; node.left = init;
node.right = this.parseExpression(); node.right = this.parseExpression();
this.expect(tt.parenR); this.expect(tt.parenR);
@ -644,7 +643,6 @@ pp.parseClassBody = function (node) {
const oldStrict = this.state.strict; const oldStrict = this.state.strict;
this.state.strict = true; this.state.strict = true;
let hadConstructorCall = false;
let hadConstructor = false; let hadConstructor = false;
let decorators = []; let decorators = [];
const classBody = this.startNode(); const classBody = this.startNode();
@ -750,17 +748,6 @@ pp.parseClassBody = function (node) {
} }
this.parseClassMethod(classBody, method, false, false); this.parseClassMethod(classBody, method, false, false);
this.checkGetterSetterParamCount(method); this.checkGetterSetterParamCount(method);
} else if (this.hasPlugin("classConstructorCall") && isSimple && key.name === "call" && this.match(tt.name) && this.state.value === "constructor") {
// a (deprecated) call constructor
if (hadConstructorCall) {
this.raise(method.start, "Duplicate constructor call in the same class");
} else if (method.decorators) {
this.raise(method.start, "You can't attach decorators to a class constructor");
}
hadConstructorCall = true;
method.kind = "constructorCall";
this.parsePropertyName(method); // consume "constructor" and make it the method's name
this.parseClassMethod(classBody, method, false, false);
} else if (this.isLineTerminator()) { } else if (this.isLineTerminator()) {
// an uninitialized class property (due to ASI, since we don't otherwise recognize the next token) // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)
if (this.isNonstaticConstructor(method)) { if (this.isNonstaticConstructor(method)) {
@ -783,8 +770,13 @@ pp.parseClassBody = function (node) {
}; };
pp.parseClassProperty = function (node) { pp.parseClassProperty = function (node) {
const noPluginMsg = "You can only use Class Properties when the 'classProperties' plugin is enabled.";
if (!node.typeAnnotation && !this.hasPlugin("classProperties")) {
this.raise(node.start, noPluginMsg);
}
if (this.match(tt.eq)) { if (this.match(tt.eq)) {
if (!this.hasPlugin("classProperties")) this.unexpected(); if (!this.hasPlugin("classProperties")) this.raise(this.state.start, noPluginMsg);
this.next(); this.next();
node.value = this.parseMaybeAssign(); node.value = this.parseMaybeAssign();
} else { } else {
@ -852,6 +844,13 @@ pp.parseExport = function (node) {
let needsSemi = false; let needsSemi = false;
if (this.eat(tt._function)) { if (this.eat(tt._function)) {
expr = this.parseFunction(expr, true, false, false, true); expr = this.parseFunction(expr, true, false, false, true);
} else if (
this.isContextual("async") &&
this.lookahead().type === tt._function
) { // async function declaration
this.eatContextual("async");
this.eat(tt._function);
expr = this.parseFunction(expr, true, false, true, true);
} else if (this.match(tt._class)) { } else if (this.match(tt._class)) {
expr = this.parseClass(expr, true, true); expr = this.parseClass(expr, true, true);
} else { } else {
@ -969,7 +968,7 @@ pp.checkDeclaration = function(node) {
} }
} else if (node.type === "ObjectProperty") { } else if (node.type === "ObjectProperty") {
this.checkDeclaration(node.value); this.checkDeclaration(node.value);
} else if (node.type === "RestElement" || node.type === "RestProperty") { } else if (node.type === "RestElement") {
this.checkDeclaration(node.argument); this.checkDeclaration(node.argument);
} else if (node.type === "Identifier") { } else if (node.type === "Identifier") {
this.checkDuplicateExports(node, node.name); this.checkDuplicateExports(node, node.name);

View File

@ -352,8 +352,11 @@ pp.flowParseObjectTypeIndexer = function (node, isStatic, variance) {
node.value = this.flowParseTypeInitialiser(); node.value = this.flowParseTypeInitialiser();
node.variance = variance; node.variance = variance;
// Finish node first to not include a possible semicolon in the locations
const indexer = this.finishNode(node, "ObjectTypeIndexer");
this.flowObjectTypeSemicolon(); this.flowObjectTypeSemicolon();
return this.finishNode(node, "ObjectTypeIndexer");
return indexer;
}; };
pp.flowParseObjectTypeMethodish = function (node) { pp.flowParseObjectTypeMethodish = function (node) {
@ -437,14 +440,13 @@ pp.flowParseObjectType = function (allowStatic, allowExact) {
isStatic = true; isStatic = true;
} }
const variancePos = this.state.start;
const variance = this.flowParseVariance(); const variance = this.flowParseVariance();
if (this.match(tt.bracketL)) { if (this.match(tt.bracketL)) {
nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance)); nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));
} else if (this.match(tt.parenL) || this.isRelational("<")) { } else if (this.match(tt.parenL) || this.isRelational("<")) {
if (variance) { if (variance) {
this.unexpected(variancePos); this.unexpected(variance.start);
} }
nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic)); nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));
} else { } else {
@ -452,7 +454,7 @@ pp.flowParseObjectType = function (allowStatic, allowExact) {
if (this.isRelational("<") || this.match(tt.parenL)) { if (this.isRelational("<") || this.match(tt.parenL)) {
// This is a method property // This is a method property
if (variance) { if (variance) {
this.unexpected(variancePos); this.unexpected(variance.start);
} }
nodeStart.properties.push(this.flowParseObjectTypeMethod(startPos, startLoc, isStatic, propertyKey)); nodeStart.properties.push(this.flowParseObjectTypeMethod(startPos, startLoc, isStatic, propertyKey));
} else { } else {
@ -716,12 +718,12 @@ pp.flowParsePrimaryType = function () {
this.next(); this.next();
if (!this.match(tt.num)) this.unexpected(null, "Unexpected token, expected number"); if (!this.match(tt.num)) this.unexpected(null, "Unexpected token, expected number");
return this.parseLiteral(-this.state.value, "NumericLiteralTypeAnnotation", node.start, node.loc.start); return this.parseLiteral(-this.state.value, "NumberLiteralTypeAnnotation", node.start, node.loc.start);
} }
this.unexpected(); this.unexpected();
case tt.num: case tt.num:
return this.parseLiteral(this.state.value, "NumericLiteralTypeAnnotation"); return this.parseLiteral(this.state.value, "NumberLiteralTypeAnnotation");
case tt._null: case tt._null:
node.value = this.match(tt._null); node.value = this.match(tt._null);
@ -735,7 +737,7 @@ pp.flowParsePrimaryType = function () {
case tt.star: case tt.star:
this.next(); this.next();
return this.finishNode(node, "ExistentialTypeParam"); return this.finishNode(node, "ExistsTypeAnnotation");
default: default:
if (this.state.type.keyword === "typeof") { if (this.state.type.keyword === "typeof") {
@ -847,12 +849,14 @@ pp.typeCastToParameter = function (node) {
pp.flowParseVariance = function() { pp.flowParseVariance = function() {
let variance = null; let variance = null;
if (this.match(tt.plusMin)) { if (this.match(tt.plusMin)) {
variance = this.startNode();
if (this.state.value === "+") { if (this.state.value === "+") {
variance = "plus"; variance.kind = "plus";
} else if (this.state.value === "-") { } else {
variance = "minus"; variance.kind = "minus";
} }
this.next(); this.next();
this.finishNode(variance, "Variance");
} }
return variance; return variance;
}; };
@ -1101,7 +1105,6 @@ export default function (instance) {
// parse class property type annotations // parse class property type annotations
instance.extend("parseClassProperty", function (inner) { instance.extend("parseClassProperty", function (inner) {
return function (node) { return function (node) {
delete node.variancePos;
if (this.match(tt.colon)) { if (this.match(tt.colon)) {
node.typeAnnotation = this.flowParseTypeAnnotation(); node.typeAnnotation = this.flowParseTypeAnnotation();
} }
@ -1127,10 +1130,9 @@ export default function (instance) {
instance.extend("parseClassMethod", function (inner) { instance.extend("parseClassMethod", function (inner) {
return function (classBody, method, ...args) { return function (classBody, method, ...args) {
if (method.variance) { if (method.variance) {
this.unexpected(method.variancePos); this.unexpected(method.variance.start);
} }
delete method.variance; delete method.variance;
delete method.variancePos;
if (this.isRelational("<")) { if (this.isRelational("<")) {
method.typeParameters = this.flowParseTypeParameterDeclaration(); method.typeParameters = this.flowParseTypeParameterDeclaration();
} }
@ -1165,11 +1167,9 @@ export default function (instance) {
instance.extend("parsePropertyName", function (inner) { instance.extend("parsePropertyName", function (inner) {
return function (node) { return function (node) {
const variancePos = this.state.start;
const variance = this.flowParseVariance(); const variance = this.flowParseVariance();
const key = inner.call(this, node); const key = inner.call(this, node);
node.variance = variance; node.variance = variance;
node.variancePos = variancePos;
return key; return key;
}; };
}); });
@ -1178,10 +1178,9 @@ export default function (instance) {
instance.extend("parseObjPropValue", function (inner) { instance.extend("parseObjPropValue", function (inner) {
return function (prop) { return function (prop) {
if (prop.variance) { if (prop.variance) {
this.unexpected(prop.variancePos); this.unexpected(prop.variance.start);
} }
delete prop.variance; delete prop.variance;
delete prop.variancePos;
let typeParameters; let typeParameters;
@ -1389,8 +1388,7 @@ export default function (instance) {
arrowExpression = inner.apply(this, args); arrowExpression = inner.apply(this, args);
arrowExpression.typeParameters = typeParameters; arrowExpression.typeParameters = typeParameters;
arrowExpression.start = typeParameters.start; this.resetStartLocationFromNode(arrowExpression, typeParameters);
arrowExpression.loc.start = typeParameters.loc.start;
} catch (err) { } catch (err) {
throw jsxError || err; throw jsxError || err;
} }

View File

@ -1,66 +0,0 @@
// Adapted from String.fromcodepoint to export the function without modifying String
/*! https://mths.be/fromcodepoint v0.2.1 by @mathias */
// The MIT License (MIT)
// Copyright (c) Mathias Bynens
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
// associated documentation files (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge, publish, distribute,
// sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
let fromCodePoint = String.fromCodePoint;
if (!fromCodePoint) {
const stringFromCharCode = String.fromCharCode;
const floor = Math.floor;
fromCodePoint = function() {
const MAX_SIZE = 0x4000;
const codeUnits = [];
let highSurrogate;
let lowSurrogate;
let index = -1;
const length = arguments.length;
if (!length) {
return "";
}
let result = "";
while (++index < length) {
let codePoint = Number(arguments[index]);
if (
!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
codePoint < 0 || // not a valid Unicode code point
codePoint > 0x10FFFF || // not a valid Unicode code point
floor(codePoint) != codePoint // not an integer
) {
throw RangeError("Invalid code point: " + codePoint);
}
if (codePoint <= 0xFFFF) { // BMP code point
codeUnits.push(codePoint);
} else { // Astral code point; split in surrogate halves
// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
codePoint -= 0x10000;
highSurrogate = (codePoint >> 10) + 0xD800;
lowSurrogate = (codePoint % 0x400) + 0xDC00;
codeUnits.push(highSurrogate, lowSurrogate);
}
if (index + 1 == length || codeUnits.length > MAX_SIZE) {
result += stringFromCharCode.apply(null, codeUnits);
codeUnits.length = 0;
}
}
return result;
};
}
export default fromCodePoint;

View File

@ -1,5 +1,3 @@
import fromCodePoint from "./fromCodePoint";
import XHTMLEntities from "./xhtml"; import XHTMLEntities from "./xhtml";
import { TokenType, types as tt } from "../../tokenizer/types"; import { TokenType, types as tt } from "../../tokenizer/types";
import { TokContext, types as tc } from "../../tokenizer/context"; import { TokContext, types as tc } from "../../tokenizer/context";
@ -136,11 +134,11 @@ pp.jsxReadEntity = function() {
if (str[1] === "x") { if (str[1] === "x") {
str = str.substr(2); str = str.substr(2);
if (HEX_NUMBER.test(str)) if (HEX_NUMBER.test(str))
entity = fromCodePoint(parseInt(str, 16)); entity = String.fromCodePoint(parseInt(str, 16));
} else { } else {
str = str.substr(1); str = str.substr(1);
if (DECIMAL_NUMBER.test(str)) if (DECIMAL_NUMBER.test(str))
entity = fromCodePoint(parseInt(str, 10)); entity = String.fromCodePoint(parseInt(str, 10));
} }
} else { } else {
entity = XHTMLEntities[str]; entity = XHTMLEntities[str];

View File

@ -4,14 +4,14 @@ import { lineBreakG } from "./whitespace";
// `startLoc` and `endLoc` properties. // `startLoc` and `endLoc` properties.
export class Position { export class Position {
constructor(line, col) { constructor(line: number, col: number) {
this.line = line; this.line = line;
this.column = col; this.column = col;
} }
} }
export class SourceLocation { export class SourceLocation {
constructor(start, end) { constructor(start: Position, end?: Position) {
this.start = start; this.start = start;
this.end = end; this.end = end;
} }

3
test/fixtures/comments/basic/block-trailing-comment/expected.json vendored Executable file → Normal file
View File

@ -83,7 +83,8 @@
"end": { "end": {
"line": 2, "line": 2,
"column": 5 "column": 5
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
}, },

3
test/fixtures/comments/basic/comment-within-condition/expected.json vendored Executable file → Normal file
View File

@ -54,7 +54,8 @@
"end": { "end": {
"line": 2, "line": 2,
"column": 16 "column": 16
} },
"identifierName": "a"
}, },
"name": "a", "name": "a",
"leadingComments": [ "leadingComments": [

View File

@ -87,6 +87,7 @@
"column": 5 "column": 5
} }
}, },
"static": false,
"computed": false, "computed": false,
"key": { "key": {
"type": "Identifier", "type": "Identifier",
@ -100,16 +101,17 @@
"end": { "end": {
"line": 8, "line": 8,
"column": 11 "column": 11
} },
"identifierName": "method1"
}, },
"name": "method1", "name": "method1",
"leadingComments": null "leadingComments": null
}, },
"static": false,
"kind": "method", "kind": "method",
"id": null, "id": null,
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [], "params": [],
"body": { "body": {
"type": "BlockStatement", "type": "BlockStatement",

View File

@ -69,9 +69,11 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 13 "column": 13
} },
"identifierName": "spawn"
}, },
"name": "spawn" "name": "spawn",
"leadingComments": null
}, },
"local": { "local": {
"type": "Identifier", "type": "Identifier",
@ -85,10 +87,12 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 13 "column": 13
} },
"identifierName": "spawn"
}, },
"name": "spawn" "name": "spawn"
} },
"leadingComments": null
} }
], ],
"source": { "source": {
@ -151,4 +155,4 @@
} }
} }
] ]
} }

View File

@ -101,9 +101,11 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 11 "column": 11
} },
"identifierName": "spawn"
}, },
"name": "spawn" "name": "spawn",
"leadingComments": null
}, },
"value": { "value": {
"type": "Identifier", "type": "Identifier",
@ -117,15 +119,18 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 11 "column": 11
} },
"identifierName": "spawn"
}, },
"name": "spawn" "name": "spawn"
}, },
"leadingComments": null,
"extra": { "extra": {
"shorthand": true "shorthand": true
} }
} }
] ],
"leadingComments": null
}, },
"init": { "init": {
"type": "Identifier", "type": "Identifier",
@ -139,10 +144,12 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 17 "column": 17
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
} },
"leadingComments": null
} }
], ],
"kind": "var", "kind": "var",
@ -186,4 +193,4 @@
} }
} }
] ]
} }

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [], "params": [],
"body": { "body": {
"type": "BlockStatement", "type": "BlockStatement",
@ -116,7 +118,8 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 7 "column": 7
} },
"identifierName": "foo"
}, },
"name": "foo", "name": "foo",
"leadingComments": null "leadingComments": null

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [], "params": [],
"body": { "body": {
"type": "BlockStatement", "type": "BlockStatement",

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [], "params": [],
"body": { "body": {
"type": "BlockStatement", "type": "BlockStatement",

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [], "params": [],
"body": { "body": {
"type": "BlockStatement", "type": "BlockStatement",

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "f"
}, },
"name": "f" "name": "f"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [], "params": [],
"body": { "body": {
"type": "BlockStatement", "type": "BlockStatement",
@ -204,7 +206,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 65 "column": 65
} },
"identifierName": "each"
}, },
"name": "each", "name": "each",
"leadingComments": null "leadingComments": null

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 12 "column": 12
} },
"identifierName": "bar"
}, },
"name": "bar" "name": "bar"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [ "params": [
{ {
"type": "Identifier", "type": "Identifier",
@ -73,7 +75,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 16 "column": 16
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
} }
@ -119,7 +122,8 @@
"end": { "end": {
"line": 2, "line": 2,
"column": 14 "column": 14
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -252,7 +256,8 @@
"end": { "end": {
"line": 7, "line": 7,
"column": 16 "column": 16
} },
"identifierName": "doIt"
}, },
"name": "doIt" "name": "doIt"
}, },

View File

@ -54,7 +54,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -187,7 +188,8 @@
"end": { "end": {
"line": 6, "line": 6,
"column": 12 "column": 12
} },
"identifierName": "doIt"
}, },
"name": "doIt" "name": "doIt"
}, },

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 12 "column": 12
} },
"identifierName": "bar"
}, },
"name": "bar" "name": "bar"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [ "params": [
{ {
"type": "Identifier", "type": "Identifier",
@ -73,7 +75,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 14 "column": 14
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
} }
@ -119,7 +122,8 @@
"end": { "end": {
"line": 2, "line": 2,
"column": 13 "column": 13
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
}, },

View File

@ -83,7 +83,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 6 "column": 6
} },
"identifierName": "module"
}, },
"name": "module" "name": "module"
}, },
@ -99,7 +100,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 14 "column": 14
} },
"identifierName": "exports"
}, },
"name": "exports" "name": "exports"
}, },
@ -122,6 +124,7 @@
"id": null, "id": null,
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [ "params": [
{ {
"type": "Identifier", "type": "Identifier",
@ -135,7 +138,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 33 "column": 33
} },
"identifierName": "context"
}, },
"name": "context" "name": "context"
} }
@ -181,12 +185,14 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 23 "column": 23
} },
"identifierName": "isConstant"
}, },
"name": "isConstant" "name": "isConstant"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [ "params": [
{ {
"type": "Identifier", "type": "Identifier",
@ -200,7 +206,8 @@
"end": { "end": {
"line": 3, "line": 3,
"column": 28 "column": 28
} },
"identifierName": "node"
}, },
"name": "node" "name": "node"
} }
@ -260,7 +267,8 @@
"end": { "end": {
"line": 4, "line": 4,
"column": 20 "column": 20
} },
"identifierName": "node"
}, },
"name": "node" "name": "node"
}, },
@ -276,7 +284,8 @@
"end": { "end": {
"line": 4, "line": 4,
"column": 25 "column": 25
} },
"identifierName": "type"
}, },
"name": "type" "name": "type"
}, },
@ -338,7 +347,8 @@
"end": { "end": {
"line": 6, "line": 6,
"column": 33 "column": 33
} },
"identifierName": "isConstant"
}, },
"name": "isConstant" "name": "isConstant"
}, },
@ -383,7 +393,8 @@
"end": { "end": {
"line": 6, "line": 6,
"column": 38 "column": 38
} },
"identifierName": "node"
}, },
"name": "node" "name": "node"
}, },
@ -399,7 +410,8 @@
"end": { "end": {
"line": 6, "line": 6,
"column": 50 "column": 50
} },
"identifierName": "expressions"
}, },
"name": "expressions" "name": "expressions"
}, },
@ -459,7 +471,8 @@
"end": { "end": {
"line": 6, "line": 6,
"column": 55 "column": 55
} },
"identifierName": "node"
}, },
"name": "node" "name": "node"
}, },
@ -475,7 +488,8 @@
"end": { "end": {
"line": 6, "line": 6,
"column": 67 "column": 67
} },
"identifierName": "expressions"
}, },
"name": "expressions" "name": "expressions"
}, },
@ -493,7 +507,8 @@
"end": { "end": {
"line": 6, "line": 6,
"column": 74 "column": 74
} },
"identifierName": "length"
}, },
"name": "length" "name": "length"
}, },
@ -631,4 +646,4 @@
} }
} }
] ]
} }

View File

@ -54,7 +54,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 9 "column": 9
} },
"identifierName": "a"
}, },
"name": "a" "name": "a"
}, },

View File

@ -74,7 +74,8 @@
"line": 2, "line": 2,
"column": 8 "column": 8
}, },
"filename": "path/to/input-file.js" "filename": "path/to/input-file.js",
"identifierName": "node"
}, },
"name": "node", "name": "node",
"leadingComments": null "leadingComments": null

View File

@ -68,4 +68,4 @@
], ],
"directives": [] "directives": []
} }
} }

View File

@ -168,292 +168,5 @@
} }
], ],
"directives": [] "directives": []
}, }
"comments": [], }
"tokens": [
{
"type": {
"label": "name",
"beforeExpr": false,
"startsExpr": true,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null
},
"value": "call",
"start": 0,
"end": 4,
"loc": {
"start": {
"line": 3,
"column": 0
},
"end": {
"line": 3,
"column": 4
}
}
},
{
"type": {
"label": "(",
"beforeExpr": true,
"startsExpr": true,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null
},
"start": 4,
"end": 5,
"loc": {
"start": {
"line": 3,
"column": 4
},
"end": {
"line": 3,
"column": 5
}
}
},
{
"type": {
"label": "num",
"beforeExpr": false,
"startsExpr": true,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null,
"updateContext": null
},
"value": 1,
"start": 5,
"end": 6,
"loc": {
"start": {
"line": 3,
"column": 5
},
"end": {
"line": 3,
"column": 6
}
}
},
{
"type": {
"label": ")",
"beforeExpr": false,
"startsExpr": false,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null
},
"start": 6,
"end": 7,
"loc": {
"start": {
"line": 3,
"column": 6
},
"end": {
"line": 3,
"column": 7
}
}
},
{
"type": {
"label": ";",
"beforeExpr": true,
"startsExpr": false,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null,
"updateContext": null
},
"start": 7,
"end": 8,
"loc": {
"start": {
"line": 3,
"column": 7
},
"end": {
"line": 3,
"column": 8
}
}
},
{
"type": {
"label": "name",
"beforeExpr": false,
"startsExpr": true,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null
},
"value": "run",
"start": 9,
"end": 12,
"loc": {
"start": {
"line": 4,
"column": 0
},
"end": {
"line": 4,
"column": 3
}
}
},
{
"type": {
"label": "(",
"beforeExpr": true,
"startsExpr": true,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null
},
"start": 12,
"end": 13,
"loc": {
"start": {
"line": 4,
"column": 3
},
"end": {
"line": 4,
"column": 4
}
}
},
{
"type": {
"label": "num",
"beforeExpr": false,
"startsExpr": true,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null,
"updateContext": null
},
"value": 2,
"start": 13,
"end": 14,
"loc": {
"start": {
"line": 4,
"column": 4
},
"end": {
"line": 4,
"column": 5
}
}
},
{
"type": {
"label": ")",
"beforeExpr": false,
"startsExpr": false,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null
},
"start": 14,
"end": 15,
"loc": {
"start": {
"line": 4,
"column": 5
},
"end": {
"line": 4,
"column": 6
}
}
},
{
"type": {
"label": ";",
"beforeExpr": true,
"startsExpr": false,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null,
"updateContext": null
},
"start": 15,
"end": 16,
"loc": {
"start": {
"line": 4,
"column": 6
},
"end": {
"line": 4,
"column": 7
}
}
},
{
"type": {
"label": "eof",
"beforeExpr": false,
"startsExpr": false,
"rightAssociative": false,
"isLoop": false,
"isAssign": false,
"prefix": false,
"postfix": false,
"binop": null,
"updateContext": null
},
"start": 16,
"end": 16,
"loc": {
"start": {
"line": 4,
"column": 7
},
"end": {
"line": 4,
"column": 7
}
}
}
]
}

View File

@ -0,0 +1,3 @@
var a = 1;
var b = a + 1;

View File

@ -0,0 +1,207 @@
{
"type": "File",
"start": 0,
"end": 26,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 14
}
},
"program": {
"type": "Program",
"start": 0,
"end": 26,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 14
}
},
"sourceType": "script",
"body": [
{
"type": "VariableDeclaration",
"start": 0,
"end": 10,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 10
}
},
"declarations": [
{
"type": "VariableDeclarator",
"start": 4,
"end": 9,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 9
}
},
"id": {
"type": "Identifier",
"start": 4,
"end": 5,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 5
},
"identifierName": "a"
},
"name": "a"
},
"init": {
"type": "NumericLiteral",
"start": 8,
"end": 9,
"loc": {
"start": {
"line": 1,
"column": 8
},
"end": {
"line": 1,
"column": 9
}
},
"extra": {
"rawValue": 1,
"raw": "1"
},
"value": 1
}
}
],
"kind": "var"
},
{
"type": "VariableDeclaration",
"start": 12,
"end": 26,
"loc": {
"start": {
"line": 3,
"column": 0
},
"end": {
"line": 3,
"column": 14
}
},
"declarations": [
{
"type": "VariableDeclarator",
"start": 16,
"end": 25,
"loc": {
"start": {
"line": 3,
"column": 4
},
"end": {
"line": 3,
"column": 13
}
},
"id": {
"type": "Identifier",
"start": 16,
"end": 17,
"loc": {
"start": {
"line": 3,
"column": 4
},
"end": {
"line": 3,
"column": 5
},
"identifierName": "b"
},
"name": "b"
},
"init": {
"type": "BinaryExpression",
"start": 20,
"end": 25,
"loc": {
"start": {
"line": 3,
"column": 8
},
"end": {
"line": 3,
"column": 13
}
},
"left": {
"type": "Identifier",
"start": 20,
"end": 21,
"loc": {
"start": {
"line": 3,
"column": 8
},
"end": {
"line": 3,
"column": 9
},
"identifierName": "a"
},
"name": "a"
},
"operator": "+",
"right": {
"type": "NumericLiteral",
"start": 24,
"end": 25,
"loc": {
"start": {
"line": 3,
"column": 12
},
"end": {
"line": 3,
"column": 13
}
},
"extra": {
"rawValue": 1,
"raw": "1"
},
"value": 1
}
}
}
],
"kind": "var"
}
],
"directives": []
}
}

View File

@ -0,0 +1,3 @@
var a = 1;
var b = a + 1;

View File

@ -0,0 +1,255 @@
{
"type": "File",
"start": 0,
"end": 26,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 14
}
},
"range": [
0,
26
],
"program": {
"type": "Program",
"start": 0,
"end": 26,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 14
}
},
"range": [
0,
26
],
"sourceType": "script",
"body": [
{
"type": "VariableDeclaration",
"start": 0,
"end": 10,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 10
}
},
"range": [
0,
10
],
"declarations": [
{
"type": "VariableDeclarator",
"start": 4,
"end": 9,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 9
}
},
"range": [
4,
9
],
"id": {
"type": "Identifier",
"start": 4,
"end": 5,
"loc": {
"start": {
"line": 1,
"column": 4
},
"end": {
"line": 1,
"column": 5
},
"identifierName": "a"
},
"range": [
4,
5
],
"name": "a"
},
"init": {
"type": "NumericLiteral",
"start": 8,
"end": 9,
"loc": {
"start": {
"line": 1,
"column": 8
},
"end": {
"line": 1,
"column": 9
}
},
"range": [
8,
9
],
"extra": {
"rawValue": 1,
"raw": "1"
},
"value": 1
}
}
],
"kind": "var"
},
{
"type": "VariableDeclaration",
"start": 12,
"end": 26,
"loc": {
"start": {
"line": 3,
"column": 0
},
"end": {
"line": 3,
"column": 14
}
},
"range": [
12,
26
],
"declarations": [
{
"type": "VariableDeclarator",
"start": 16,
"end": 25,
"loc": {
"start": {
"line": 3,
"column": 4
},
"end": {
"line": 3,
"column": 13
}
},
"range": [
16,
25
],
"id": {
"type": "Identifier",
"start": 16,
"end": 17,
"loc": {
"start": {
"line": 3,
"column": 4
},
"end": {
"line": 3,
"column": 5
},
"identifierName": "b"
},
"range": [
16,
17
],
"name": "b"
},
"init": {
"type": "BinaryExpression",
"start": 20,
"end": 25,
"loc": {
"start": {
"line": 3,
"column": 8
},
"end": {
"line": 3,
"column": 13
}
},
"range": [
20,
25
],
"left": {
"type": "Identifier",
"start": 20,
"end": 21,
"loc": {
"start": {
"line": 3,
"column": 8
},
"end": {
"line": 3,
"column": 9
},
"identifierName": "a"
},
"range": [
20,
21
],
"name": "a"
},
"operator": "+",
"right": {
"type": "NumericLiteral",
"start": 24,
"end": 25,
"loc": {
"start": {
"line": 3,
"column": 12
},
"end": {
"line": 3,
"column": 13
}
},
"range": [
24,
25
],
"extra": {
"rawValue": 1,
"raw": "1"
},
"value": 1
}
}
}
],
"kind": "var"
}
],
"directives": []
}
}

View File

@ -0,0 +1,3 @@
{
"ranges": true
}

View File

@ -54,12 +54,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },
"generator": false, "generator": false,
"expression": false, "expression": false,
"async": false,
"params": [], "params": [],
"body": { "body": {
"type": "BlockStatement", "type": "BlockStatement",
@ -117,7 +119,8 @@
"end": { "end": {
"line": 2, "line": 2,
"column": 7 "column": 7
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -58,6 +58,7 @@
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -68,13 +68,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "Button"
}, },
"name": "Button" "name": "Button"
}, },
"arguments": [] "arguments": []
} }
} }
] ],
"directives": []
} }
} }

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -68,13 +68,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "Button"
}, },
"name": "Button" "name": "Button"
}, },
"arguments": [] "arguments": []
} }
} }
] ],
"directives": []
} }
} }

View File

@ -82,7 +82,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 11 "column": 11
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -91,6 +92,7 @@
"arguments": [] "arguments": []
} }
} }
] ],
"directives": []
} }
} }

View File

@ -82,7 +82,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 11 "column": 11
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -91,6 +92,7 @@
"arguments": [] "arguments": []
} }
} }
] ],
"directives": []
} }
} }

View File

@ -96,7 +96,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 7 "column": 7
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -114,7 +115,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 13 "column": 13
} },
"identifierName": "bar"
}, },
"name": "bar" "name": "bar"
}, },
@ -123,6 +125,7 @@
"arguments": [] "arguments": []
} }
} }
] ],
"directives": []
} }
} }

View File

@ -82,7 +82,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 7 "column": 7
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -98,7 +99,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 11 "column": 11
} },
"identifierName": "bar"
}, },
"name": "bar" "name": "bar"
}, },
@ -107,6 +109,7 @@
"arguments": [] "arguments": []
} }
} }
] ],
"directives": []
} }
} }

View File

@ -82,7 +82,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 7 "column": 7
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -98,7 +99,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 11 "column": 11
} },
"identifierName": "bar"
}, },
"name": "bar" "name": "bar"
}, },
@ -107,6 +109,7 @@
"arguments": [] "arguments": []
} }
} }
] ],
"directives": []
} }
} }

View File

@ -96,13 +96,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 9 "column": 9
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
"arguments": [], "arguments": [],
"extra": { "extra": {
"parenthesized": true "parenthesized": true,
"parenStart": 0
} }
}, },
"property": { "property": {
@ -117,7 +119,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 14 "column": 14
} },
"identifierName": "bar"
}, },
"name": "bar" "name": "bar"
}, },

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 3 "column": 3
} },
"identifierName": "foo"
}, },
"name": "foo" "name": "foo"
}, },
@ -85,7 +86,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 7 "column": 7
} },
"identifierName": "bar"
}, },
"name": "bar" "name": "bar"
}, },
@ -101,13 +103,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 12 "column": 12
} },
"identifierName": "baz"
}, },
"name": "baz" "name": "baz"
} }
] ]
} }
} }
] ],
"directives": []
} }
} }

View File

@ -68,11 +68,13 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "foo"
}, },
"name": "foo", "name": "foo",
"extra": { "extra": {
"parenthesized": true "parenthesized": true,
"parenStart": 0
} }
}, },
"arguments": [] "arguments": []

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -84,13 +85,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 17 "column": 17
} },
"identifierName": "milkyway"
}, },
"name": "milkyway" "name": "milkyway"
}, },
"computed": false "computed": false
} }
} }
] ],
"directives": []
} }
} }

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -82,7 +82,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -98,7 +99,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 17 "column": 17
} },
"identifierName": "milkyway"
}, },
"name": "milkyway" "name": "milkyway"
}, },
@ -116,13 +118,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 29 "column": 29
} },
"identifierName": "solarsystem"
}, },
"name": "solarsystem" "name": "solarsystem"
}, },
"computed": false "computed": false
} }
} }
] ],
"directives": []
} }
} }

View File

@ -96,7 +96,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -112,7 +113,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 17 "column": 17
} },
"identifierName": "milkyway"
}, },
"name": "milkyway" "name": "milkyway"
}, },
@ -130,7 +132,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 29 "column": 29
} },
"identifierName": "solarsystem"
}, },
"name": "solarsystem" "name": "solarsystem"
}, },
@ -148,13 +151,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 35 "column": 35
} },
"identifierName": "Earth"
}, },
"name": "Earth" "name": "Earth"
}, },
"computed": false "computed": false
} }
} }
] ],
"directives": []
} }
} }

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -99,7 +100,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 19 "column": 19
} },
"identifierName": "galaxyName"
}, },
"name": "galaxyName" "name": "galaxyName"
}, },
@ -115,7 +117,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 37 "column": 37
} },
"identifierName": "otherUselessName"
}, },
"name": "otherUselessName" "name": "otherUselessName"
} }
@ -124,6 +127,7 @@
"computed": true "computed": true
} }
} }
] ],
"directives": []
} }
} }

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -84,13 +85,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 19 "column": 19
} },
"identifierName": "galaxyName"
}, },
"name": "galaxyName" "name": "galaxyName"
}, },
"computed": true "computed": true
} }
} }
] ],
"directives": []
} }
} }

View File

@ -82,7 +82,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -120,7 +121,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 21 "column": 21
} },
"identifierName": "galaxies"
}, },
"name": "galaxies" "name": "galaxies"
}, },

View File

@ -82,7 +82,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -121,7 +122,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 21 "column": 21
} },
"identifierName": "galaxies"
}, },
"name": "galaxies" "name": "galaxies"
}, },

View File

@ -110,7 +110,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -149,7 +150,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 21 "column": 21
} },
"identifierName": "galaxies"
}, },
"name": "galaxies" "name": "galaxies"
}, },
@ -230,7 +232,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 41 "column": 41
} },
"identifierName": "milkyway"
}, },
"name": "milkyway" "name": "milkyway"
}, },

View File

@ -110,7 +110,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "earth"
}, },
"name": "earth" "name": "earth"
}, },
@ -126,7 +127,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 10 "column": 10
} },
"identifierName": "asia"
}, },
"name": "asia" "name": "asia"
}, },
@ -144,7 +146,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 20 "column": 20
} },
"identifierName": "Indonesia"
}, },
"name": "Indonesia" "name": "Indonesia"
}, },
@ -162,7 +165,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 39 "column": 39
} },
"identifierName": "prepareForElection"
}, },
"name": "prepareForElection" "name": "prepareForElection"
}, },

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -84,13 +85,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 11 "column": 11
} },
"identifierName": "if"
}, },
"name": "if" "name": "if"
}, },
"computed": false "computed": false
} }
} }
] ],
"directives": []
} }
} }

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -84,13 +85,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 13 "column": 13
} },
"identifierName": "true"
}, },
"name": "true" "name": "true"
}, },
"computed": false "computed": false
} }
} }
] ],
"directives": []
} }
} }

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -84,13 +85,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 14 "column": 14
} },
"identifierName": "false"
}, },
"name": "false" "name": "false"
}, },
"computed": false "computed": false
} }
} }
] ],
"directives": []
} }
} }

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "universe"
}, },
"name": "universe" "name": "universe"
}, },
@ -84,13 +85,15 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 13 "column": 13
} },
"identifierName": "null"
}, },
"name": "null" "name": "null"
}, },
"computed": false "computed": false
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 4 "column": 4
} },
"identifierName": "eval"
}, },
"name": "eval" "name": "eval"
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 4 "column": 4
} },
"identifierName": "eval"
}, },
"name": "eval" "name": "eval"
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 9 "column": 9
} },
"identifierName": "arguments"
}, },
"name": "arguments" "name": "arguments"
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 9 "column": 9
} },
"identifierName": "arguments"
}, },
"name": "arguments" "name": "arguments"
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 3 "column": 3
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 3 "column": 3
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 3 "column": 3
} },
"identifierName": "日本語"
}, },
"name": "日本語" "name": "日本語"
}, },
@ -91,6 +92,7 @@
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 6 "column": 6
} },
"identifierName": "eval"
}, },
"name": "eval" "name": "eval"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 6 "column": 6
} },
"identifierName": "eval"
}, },
"name": "eval" "name": "eval"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 11 "column": 11
} },
"identifierName": "arguments"
}, },
"name": "arguments" "name": "arguments"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 11 "column": 11
} },
"identifierName": "arguments"
}, },
"name": "arguments" "name": "arguments"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 2 "column": 2
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 2 "column": 2
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 2 "column": 2
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 2 "column": 2
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 6 "column": 6
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -69,7 +69,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 2 "column": 2
} },
"identifierName": "T‿"
}, },
"name": "T‿" "name": "T‿"
}, },
@ -91,6 +92,7 @@
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -70,12 +70,17 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 8 "column": 8
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
},
"extra": {
"parenthesizedArgument": false
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },
@ -85,12 +86,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "y"
}, },
"name": "y" "name": "y"
} }
} }
} }
] ],
"directives": []
} }
} }

View File

@ -68,7 +68,8 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 1 "column": 1
} },
"identifierName": "x"
}, },
"name": "x" "name": "x"
}, },
@ -85,12 +86,14 @@
"end": { "end": {
"line": 1, "line": 1,
"column": 5 "column": 5
} },
"identifierName": "y"
}, },
"name": "y" "name": "y"
} }
} }
} }
] ],
"directives": []
} }
} }

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