You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.8 KiB
116 lines
2.8 KiB
"use strict"; |
|
|
|
exports.__esModule = true; |
|
|
|
var _create = require("babel-runtime/core-js/object/create"); |
|
|
|
var _create2 = _interopRequireDefault(_create); |
|
|
|
exports.getBindingIdentifiers = getBindingIdentifiers; |
|
exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers; |
|
|
|
var _index = require("./index"); |
|
|
|
var t = _interopRequireWildcard(_index); |
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } |
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|
|
|
function getBindingIdentifiers(node, duplicates, outerOnly) { |
|
var search = [].concat(node); |
|
var ids = (0, _create2.default)(null); |
|
|
|
while (search.length) { |
|
var id = search.shift(); |
|
if (!id) continue; |
|
|
|
var keys = t.getBindingIdentifiers.keys[id.type]; |
|
|
|
if (t.isIdentifier(id)) { |
|
if (duplicates) { |
|
var _ids = ids[id.name] = ids[id.name] || []; |
|
_ids.push(id); |
|
} else { |
|
ids[id.name] = id; |
|
} |
|
continue; |
|
} |
|
|
|
if (t.isExportDeclaration(id)) { |
|
if (t.isDeclaration(id.declaration)) { |
|
search.push(id.declaration); |
|
} |
|
continue; |
|
} |
|
|
|
if (outerOnly) { |
|
if (t.isFunctionDeclaration(id)) { |
|
search.push(id.id); |
|
continue; |
|
} |
|
|
|
if (t.isFunctionExpression(id)) { |
|
continue; |
|
} |
|
} |
|
|
|
if (keys) { |
|
for (var i = 0; i < keys.length; i++) { |
|
var key = keys[i]; |
|
if (id[key]) { |
|
search = search.concat(id[key]); |
|
} |
|
} |
|
} |
|
} |
|
|
|
return ids; |
|
} |
|
|
|
getBindingIdentifiers.keys = { |
|
DeclareClass: ["id"], |
|
DeclareFunction: ["id"], |
|
DeclareModule: ["id"], |
|
DeclareVariable: ["id"], |
|
InterfaceDeclaration: ["id"], |
|
TypeAlias: ["id"], |
|
OpaqueType: ["id"], |
|
|
|
CatchClause: ["param"], |
|
LabeledStatement: ["label"], |
|
UnaryExpression: ["argument"], |
|
AssignmentExpression: ["left"], |
|
|
|
ImportSpecifier: ["local"], |
|
ImportNamespaceSpecifier: ["local"], |
|
ImportDefaultSpecifier: ["local"], |
|
ImportDeclaration: ["specifiers"], |
|
|
|
ExportSpecifier: ["exported"], |
|
ExportNamespaceSpecifier: ["exported"], |
|
ExportDefaultSpecifier: ["exported"], |
|
|
|
FunctionDeclaration: ["id", "params"], |
|
FunctionExpression: ["id", "params"], |
|
|
|
ClassDeclaration: ["id"], |
|
ClassExpression: ["id"], |
|
|
|
RestElement: ["argument"], |
|
UpdateExpression: ["argument"], |
|
|
|
RestProperty: ["argument"], |
|
ObjectProperty: ["value"], |
|
|
|
AssignmentPattern: ["left"], |
|
ArrayPattern: ["elements"], |
|
ObjectPattern: ["properties"], |
|
|
|
VariableDeclaration: ["declarations"], |
|
VariableDeclarator: ["id"] |
|
}; |
|
|
|
function getOuterBindingIdentifiers(node, duplicates) { |
|
return getBindingIdentifiers(node, duplicates, true); |
|
} |