Adjust cloning of nodes in import/export-specifiers and obj-destructuring (#24)

The cloning caused comments that where added to the original node to be persisted into
the cloned node.
Espree/Acorn does not have any cloning, that's why it is working there.
This change omits comments when cloning, as removing the cloning
causes tests in babel to fail.
This commit is contained in:
Daniel Tschinder 2016-06-21 15:55:15 +02:00 committed by Henry Zhu
parent 92d45c3f6c
commit f11a82c96c
6 changed files with 361 additions and 2 deletions

View File

@ -4,6 +4,7 @@ import { SourceLocation } from "../util/location";
// Start an AST node, attaching a start offset.
const pp = Parser.prototype;
const commentKeys = ["leadingComments", "trailingComments", "innerComments"];
class Node {
constructor(pos?: number, loc?: SourceLocation, filename?: string) {
@ -20,8 +21,14 @@ class Node {
loc: SourceLocation;
__clone(): Node {
let node2 = new Node;
for (let key in this) node2[key] = this[key];
const node2 = new Node;
for (let key in this) {
// Do not clone comments that are already attached to the node
if (commentKeys.indexOf(key) < 0) {
node2[key] = this[key];
}
}
return node2;
}
}

View File

@ -0,0 +1,3 @@
#!/usr/bin/env babel-node
import {spawn} from 'foobar';

View File

@ -0,0 +1,154 @@
{
"type": "File",
"start": 0,
"end": 56,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 29
}
},
"program": {
"type": "Program",
"start": 0,
"end": 56,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 29
}
},
"sourceType": "module",
"body": [
{
"type": "ImportDeclaration",
"start": 27,
"end": 56,
"loc": {
"start": {
"line": 3,
"column": 0
},
"end": {
"line": 3,
"column": 29
}
},
"specifiers": [
{
"type": "ImportSpecifier",
"start": 35,
"end": 40,
"loc": {
"start": {
"line": 3,
"column": 8
},
"end": {
"line": 3,
"column": 13
}
},
"imported": {
"type": "Identifier",
"start": 35,
"end": 40,
"loc": {
"start": {
"line": 3,
"column": 8
},
"end": {
"line": 3,
"column": 13
}
},
"name": "spawn"
},
"local": {
"type": "Identifier",
"start": 35,
"end": 40,
"loc": {
"start": {
"line": 3,
"column": 8
},
"end": {
"line": 3,
"column": 13
}
},
"name": "spawn"
}
}
],
"source": {
"type": "StringLiteral",
"start": 47,
"end": 55,
"loc": {
"start": {
"line": 3,
"column": 20
},
"end": {
"line": 3,
"column": 28
}
},
"extra": {
"rawValue": "foobar",
"raw": "'foobar'"
},
"value": "foobar"
},
"leadingComments": [
{
"type": "CommentLine",
"value": "/usr/bin/env babel-node",
"start": 0,
"end": 25,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 25
}
}
}
]
}
],
"directives": []
},
"comments": [
{
"type": "CommentLine",
"value": "/usr/bin/env babel-node",
"start": 0,
"end": 25,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 25
}
}
}
]
}

View File

@ -0,0 +1,3 @@
{
"sourceType": "module"
}

View File

@ -0,0 +1,3 @@
#!/usr/bin/env babel-node
var { spawn } = x;

View File

@ -0,0 +1,189 @@
{
"type": "File",
"start": 0,
"end": 45,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 18
}
},
"program": {
"type": "Program",
"start": 0,
"end": 45,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 3,
"column": 18
}
},
"sourceType": "script",
"body": [
{
"type": "VariableDeclaration",
"start": 27,
"end": 45,
"loc": {
"start": {
"line": 3,
"column": 0
},
"end": {
"line": 3,
"column": 18
}
},
"declarations": [
{
"type": "VariableDeclarator",
"start": 31,
"end": 44,
"loc": {
"start": {
"line": 3,
"column": 4
},
"end": {
"line": 3,
"column": 17
}
},
"id": {
"type": "ObjectPattern",
"start": 31,
"end": 40,
"loc": {
"start": {
"line": 3,
"column": 4
},
"end": {
"line": 3,
"column": 13
}
},
"properties": [
{
"type": "ObjectProperty",
"start": 33,
"end": 38,
"loc": {
"start": {
"line": 3,
"column": 6
},
"end": {
"line": 3,
"column": 11
}
},
"method": false,
"shorthand": true,
"computed": false,
"key": {
"type": "Identifier",
"start": 33,
"end": 38,
"loc": {
"start": {
"line": 3,
"column": 6
},
"end": {
"line": 3,
"column": 11
}
},
"name": "spawn"
},
"value": {
"type": "Identifier",
"start": 33,
"end": 38,
"loc": {
"start": {
"line": 3,
"column": 6
},
"end": {
"line": 3,
"column": 11
}
},
"name": "spawn"
},
"extra": {
"shorthand": true
}
}
]
},
"init": {
"type": "Identifier",
"start": 43,
"end": 44,
"loc": {
"start": {
"line": 3,
"column": 16
},
"end": {
"line": 3,
"column": 17
}
},
"name": "x"
}
}
],
"kind": "var",
"leadingComments": [
{
"type": "CommentLine",
"value": "/usr/bin/env babel-node",
"start": 0,
"end": 25,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 25
}
}
}
]
}
],
"directives": []
},
"comments": [
{
"type": "CommentLine",
"value": "/usr/bin/env babel-node",
"start": 0,
"end": 25,
"loc": {
"start": {
"line": 1,
"column": 0
},
"end": {
"line": 1,
"column": 25
}
}
}
]
}