diff --git a/packages/babel-traverse/src/index.js b/packages/babel-traverse/src/index.js index 1f058919c3..28dfdd1ac0 100644 --- a/packages/babel-traverse/src/index.js +++ b/packages/babel-traverse/src/index.js @@ -73,7 +73,6 @@ traverse.node = function (node: Object, opts: Object, scope: Object, state: Obje }; const CLEAR_KEYS: Array = t.COMMENT_KEYS.concat([ - "_scopeInfo", "_paths", "tokens", "comments", "start", "end", "loc", "raw", "rawValue" @@ -83,6 +82,15 @@ traverse.clearNode = function (node) { for (let key of CLEAR_KEYS) { if (node[key] != null) node[key] = undefined; } + + for (let key in node) { + if (key[0] === "_" && node[key] != null) node[key] = undefined; + } + + let syms: Array = Object.getOwnPropertyNames(node); + for (let sym of syms) { + node[sym] = null; + } }; traverse.removeProperties = function (tree) { diff --git a/packages/babel-types/src/index.js b/packages/babel-types/src/index.js index 8900bf9b17..eaaecc7e5f 100644 --- a/packages/babel-types/src/index.js +++ b/packages/babel-types/src/index.js @@ -33,7 +33,7 @@ export const COMMENT_KEYS = ["leadingComments", "trailingComments", " export const INHERIT_KEYS = { optional: ["typeAnnotation", "typeParameters", "returnType"], - force: ["_scopeInfo", "_paths", "start", "loc", "end"] + force: ["start", "loc", "end"] }; export const BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="]; @@ -384,12 +384,25 @@ function _inheritComments(key, child, parent) { export function inherits(child: Object, parent: Object): Object { if (!child || !parent) return child; + // optionally inherit specific properties if not null for (let key of (t.INHERIT_KEYS.optional: Array)) { if (child[key] == null) { child[key] = parent[key]; } } + // force inherit symbols + let parentSymbols: Array = Object.getOwnPropertyNames(parent); + for (let sym of parentSymbols) { + child[sym] = parent[sym]; + } + + // force inherit "private" properties + for (let key in parent) { + if (key[0] === "_") node[key] = parent[key]; + } + + // force inherit select properties for (let key of (t.INHERIT_KEYS.force: Array)) { child[key] = parent[key]; }